From f76a789a49abd11774df9611a3cd8e03ec8e4efe Mon Sep 17 00:00:00 2001 From: Testo Nakada Date: Fri, 16 Oct 2015 09:18:48 -0700 Subject: [PATCH 01/18] - make Meta generator take the swagger code gen version - generate the class name correctly if the name contains hyphen --- .../src/main/java/io/swagger/codegen/cmd/Meta.java | 13 ++++++++++--- .../src/main/resources/codegen/pom.mustache | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Meta.java b/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Meta.java index c75181c51cd..ca06652b942 100644 --- a/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Meta.java +++ b/modules/swagger-codegen-cli/src/main/java/io/swagger/codegen/cmd/Meta.java @@ -1,6 +1,7 @@ package io.swagger.codegen.cmd; import ch.lambdaj.function.convert.Converter; +import com.google.common.base.CaseFormat; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.samskivert.mustache.Mustache; @@ -9,7 +10,6 @@ import io.airlift.airline.Option; import io.swagger.codegen.DefaultGenerator; import io.swagger.codegen.SupportingFile; import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,7 +55,7 @@ public class Meta implements Runnable { final File targetDir = new File(outputFolder); LOG.info("writing to folder [{}]", targetDir.getAbsolutePath()); - String mainClass = StringUtils.capitalize(name) + "Generator"; + String mainClass = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, name) + "Generator"; List supportingFiles = ImmutableList.of( new SupportingFile("pom.mustache", "", "pom.xml"), @@ -68,11 +68,18 @@ public class Meta implements Runnable { "src/main/resources/META-INF/services", "io.swagger.codegen.CodegenConfig") ); + String swaggerVersion = this.getClass().getPackage().getImplementationVersion(); + // if the code is running outside of the jar (i.e. from the IDE), it will not have the version available. + // let's default it with something. + if (swaggerVersion==null) { + swaggerVersion = "2.1.3"; + } Map data = new ImmutableMap.Builder() .put("generatorPackage", targetPackage) .put("generatorClass", mainClass) .put("name", name) - .put("fullyQualifiedGeneratorClass", targetPackage + "." + mainClass).build(); + .put("fullyQualifiedGeneratorClass", targetPackage + "." + mainClass) + .put("swaggerCodegenVersion", swaggerVersion).build(); with(supportingFiles).convert(processFiles(targetDir, data)); diff --git a/modules/swagger-codegen/src/main/resources/codegen/pom.mustache b/modules/swagger-codegen/src/main/resources/codegen/pom.mustache index 29a980a5091..30f1b14872c 100644 --- a/modules/swagger-codegen/src/main/resources/codegen/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/codegen/pom.mustache @@ -95,8 +95,8 @@ - 2.1.3 + {{swaggerCodegenVersion}} 1.0.0 4.8.1 - \ No newline at end of file + From 271661aec79771e15ce65943a1ed1e8af1ca4d34 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 20 Nov 2015 17:01:21 +0800 Subject: [PATCH 02/18] update python auth to skip empty token/username,password --- .../main/resources/python/api_client.mustache | 4 ++- samples/client/petstore/python/.coverage | 2 +- .../petstore/python/dev-requirements.txt.log | 14 ++++++++ .../python/swagger_client/api_client.py | 4 ++- .../python/swagger_client/apis/pet_api.py | 32 ++++++++++++------- .../python/swagger_client/apis/store_api.py | 16 ++++++---- .../python/swagger_client/apis/user_api.py | 26 +++++++++------ 7 files changed, 68 insertions(+), 30 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/api_client.mustache b/modules/swagger-codegen/src/main/resources/python/api_client.mustache index 969eb4e7992..d097ec4536d 100644 --- a/modules/swagger-codegen/src/main/resources/python/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api_client.mustache @@ -453,7 +453,9 @@ class ApiClient(object): for auth in auth_settings: auth_setting = config.auth_settings().get(auth) if auth_setting: - if auth_setting['in'] == 'header': + if not auth_setting['value']: + continue + elif auth_setting['in'] == 'header': headers[auth_setting['key']] = auth_setting['value'] elif auth_setting['in'] == 'query': querys[auth_setting['key']] = auth_setting['value'] diff --git a/samples/client/petstore/python/.coverage b/samples/client/petstore/python/.coverage index 03f8b2a2d03..ddd00f77a03 100644 --- a/samples/client/petstore/python/.coverage +++ b/samples/client/petstore/python/.coverage @@ -1 +1 @@ -!coverage.py: This is a private format, don't read it directly!{"runs": [{"brief_sys": "CPython 3.4.3 Darwin"}], "lines": {"/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/user.py": [70, 136, 202, 272, 81, 147, 213, 22, 25, 92, 29, 158, 224, 103, 169, 235, 114, 19, 180, 30, 246, 266, 191, 125, 21], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/rest.py": [20, 21, 23, 24, 25, 26, 27, 28, 31, 33, 35, 36, 40, 42, 48, 51, 53, 54, 55, 56, 57, 59, 63, 65, 72, 74, 82, 83, 88, 92, 95, 98, 101, 102, 103, 104, 105, 106, 109, 110, 121, 122, 124, 129, 130, 132, 135, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 159, 160, 161, 166, 170, 171, 174, 176, 177, 179, 181, 182, 183, 184, 186, 191, 198, 199, 200, 201, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 225, 227, 228, 229, 230, 231, 232, 239, 243, 244, 245, 246, 248, 249, 251], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/__init__.py": [1, 4, 5, 6, 7, 8], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/__init__.py": [1, 4, 5, 6], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/tag.py": [72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/pet.py": [128, 130, 150, 172, 139, 141, 19, 215, 21, 22, 152, 25, 29, 30, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 48, 49, 50, 51, 52, 53, 54, 183, 57, 58, 59, 60, 61, 62, 64, 194, 195, 200, 73, 202, 75, 206, 208, 209, 210, 211, 84, 213, 86, 185, 216, 218, 220, 222, 95, 97, 226, 228, 106, 108, 117, 119, 212], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/pet_api.py": [469, 18, 20, 22, 23, 536, 26, 539, 28, 29, 69, 32, 545, 546, 548, 37, 39, 40, 41, 42, 555, 44, 557, 558, 559, 48, 561, 562, 564, 567, 568, 569, 70, 573, 574, 577, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 80, 82, 83, 85, 87, 89, 91, 92, 94, 95, 96, 99, 100, 101, 614, 617, 618, 620, 621, 622, 111, 157, 113, 114, 627, 628, 106, 630, 631, 120, 633, 634, 635, 637, 639, 641, 642, 643, 644, 645, 646, 449, 648, 651, 652, 653, 109, 144, 657, 658, 147, 148, 661, 73, 663, 664, 665, 666, 155, 668, 538, 670, 671, 160, 112, 162, 164, 166, 167, 169, 170, 171, 174, 175, 176, 115, 180, 181, 184, 116, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 118, 198, 535, 119, 121, 219, 220, 222, 549, 224, 123, 229, 230, 232, 233, 551, 237, 238, 239, 552, 243, 244, 246, 553, 249, 250, 383, 255, 256, 259, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 673, 273, 46, 294, 295, 297, 298, 299, 304, 305, 307, 308, 310, 312, 313, 314, 223, 316, 318, 319, 321, 324, 325, 326, 330, 331, 45, 334, 336, 337, 338, 339, 340, 667, 342, 343, 344, 345, 346, 348, 540, 145, 483, 369, 372, 373, 375, 376, 377, 382, 149, 385, 386, 235, 388, 389, 390, 392, 394, 396, 397, 399, 402, 403, 404, 408, 409, 412, 154, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 426, 669, 72, 105, 158, 241, 74, 117, 672, 452, 453, 455, 456, 457, 462, 463, 465, 466, 468, 532, 470, 472, 474, 79, 476, 477, 478, 479, 480, 481, 251, 486, 487, 488, 492, 493, 496, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 341], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/__init__.py": [1, 4, 5, 6, 7, 8, 11, 12, 13, 16, 18, 20], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/store_api.py": [273, 18, 20, 22, 23, 26, 28, 29, 32, 37, 39, 40, 41, 44, 46, 48, 195, 68, 69, 71, 72, 79, 81, 82, 84, 86, 88, 90, 91, 93, 96, 97, 98, 102, 103, 106, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 120], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/category.py": [72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/order.py": [130, 44, 141, 45, 19, 21, 22, 152, 25, 29, 30, 52, 161, 163, 39, 40, 41, 42, 43, 172, 173, 174, 175, 48, 49, 50, 51, 180, 53, 54, 57, 58, 59, 60, 61, 62, 191, 64, 202, 75, 86, 176, 222, 97, 228, 178, 108, 119], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/api_client.py": [516, 523, 524, 525, 19, 21, 22, 535, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 40, 42, 44, 49, 52, 566, 567, 568, 569, 570, 571, 573, 68, 69, 70, 75, 76, 77, 79, 80, 82, 84, 91, 96, 98, 102, 103, 104, 107, 108, 109, 111, 112, 115, 116, 117, 118, 119, 120, 123, 124, 125, 126, 129, 130, 131, 134, 137, 138, 23, 141, 144, 145, 146, 147, 149, 152, 153, 155, 157, 158, 160, 162, 171, 172, 174, 176, 191, 192, 544, 194, 195, 196, 197, 198, 199, 200, 201, 202, 204, 205, 212, 213, 214, 216, 217, 219, 231, 235, 236, 240, 242, 251, 252, 254, 255, 256, 257, 258, 260, 261, 262, 263, 556, 267, 268, 269, 272, 274, 275, 276, 278, 279, 280, 281, 283, 286, 287, 288, 564, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 337, 338, 339, 340, 341, 345, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 369, 370, 371, 372, 379, 387, 389, 390, 392, 393, 394, 395, 397, 398, 399, 400, 401, 402, 404, 406, 413, 414, 416, 418, 419, 421, 423, 430, 431, 433, 435, 436, 438, 440, 501, 448, 450, 453, 454, 455, 456, 457, 465, 546, 491, 500, 545, 506, 508], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/configuration.py": [135, 136, 137, 138, 139, 142, 19, 149, 22, 23, 25, 26, 27, 29, 158, 31, 32, 34, 36, 37, 39, 40, 41, 170, 43, 172, 46, 47, 189, 179, 52, 54, 59, 61, 190, 63, 192, 224, 67, 69, 71, 200, 73, 204, 80, 81, 82, 84, 213, 86, 199, 88, 90, 219, 92, 221, 222, 223, 96, 225, 98, 100, 102, 230, 104, 167, 111, 76, 168, 157, 122, 123, 42, 21], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/user_api.py": [32, 37, 198, 39, 423, 582, 48, 273, 18, 20, 501, 22, 23, 26, 123, 28, 29, 351]}} \ No newline at end of file +!coverage.py: This is a private format, don't read it directly!{"lines": {"/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/pet_api.py": [512, 513, 514, 516, 86, 18, 20, 22, 23, 26, 539, 28, 29, 542, 543, 32, 548, 37, 39, 40, 41, 42, 555, 556, 45, 558, 559, 560, 562, 564, 565, 566, 568, 569, 571, 574, 575, 576, 580, 581, 70, 584, 73, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 598, 88, 90, 92, 93, 95, 96, 97, 100, 101, 102, 106, 107, 621, 622, 624, 625, 626, 79, 116, 117, 118, 631, 632, 121, 122, 635, 124, 638, 639, 641, 642, 643, 645, 647, 649, 650, 651, 652, 653, 654, 656, 145, 146, 659, 148, 661, 150, 665, 666, 155, 156, 538, 159, 160, 673, 162, 675, 164, 677, 166, 679, 168, 169, 171, 172, 173, 541, 176, 177, 178, 115, 182, 183, 186, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 552, 200, 119, 120, 377, 221, 222, 549, 224, 225, 226, 231, 232, 431, 235, 236, 110, 238, 240, 241, 242, 244, 246, 247, 249, 383, 252, 253, 254, 258, 259, 262, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 46, 48, 297, 298, 300, 301, 302, 44, 307, 308, 311, 312, 314, 316, 317, 318, 320, 322, 323, 325, 113, 328, 329, 330, 334, 335, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 485, 352, 84, 114, 373, 374, 376, 660, 378, 149, 384, 387, 390, 391, 393, 394, 395, 397, 399, 401, 402, 404, 407, 408, 409, 413, 414, 69, 417, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 669, 72, 671, 74, 672, 83, 454, 455, 457, 458, 459, 674, 112, 464, 465, 468, 471, 472, 676, 474, 475, 476, 478, 480, 80, 482, 483, 484, 678, 486, 487, 489, 492, 493, 494, 680, 498, 499, 502, 681, 504, 505, 506, 507, 508, 509, 510, 511], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/user_api.py": [32, 355, 37, 39, 200, 124, 428, 589, 48, 18, 20, 22, 23, 276, 26, 507, 28, 29], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/api_client.py": [518, 525, 526, 527, 19, 21, 22, 23, 24, 537, 26, 27, 28, 29, 30, 31, 32, 33, 34, 547, 36, 37, 40, 42, 44, 558, 49, 52, 566, 568, 569, 570, 571, 572, 573, 575, 68, 69, 70, 75, 76, 77, 79, 80, 82, 84, 91, 96, 98, 102, 103, 104, 107, 108, 109, 111, 112, 115, 116, 117, 118, 119, 120, 123, 124, 125, 126, 129, 130, 131, 134, 137, 138, 141, 144, 145, 146, 147, 149, 152, 153, 155, 157, 158, 160, 162, 171, 172, 174, 176, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201, 202, 204, 205, 212, 213, 214, 216, 217, 219, 231, 235, 236, 240, 242, 251, 252, 254, 255, 256, 257, 258, 260, 261, 262, 263, 267, 268, 269, 272, 274, 275, 276, 278, 279, 280, 281, 283, 286, 287, 288, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 337, 338, 339, 340, 341, 345, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 369, 370, 371, 372, 379, 387, 389, 390, 392, 393, 394, 395, 548, 397, 398, 399, 400, 401, 402, 404, 406, 413, 414, 416, 418, 419, 421, 423, 430, 431, 433, 435, 436, 438, 440, 448, 450, 453, 454, 455, 456, 458, 459, 467, 546, 493, 502, 503, 508, 510], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/category.py": [72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/rest.py": [20, 21, 23, 24, 25, 26, 27, 28, 31, 33, 35, 36, 40, 42, 48, 51, 53, 54, 55, 56, 57, 59, 63, 65, 72, 74, 82, 83, 88, 92, 95, 98, 101, 102, 103, 104, 105, 106, 109, 110, 121, 122, 124, 129, 130, 132, 135, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 159, 160, 161, 166, 170, 171, 174, 176, 177, 179, 181, 182, 183, 184, 186, 191, 198, 199, 200, 201, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 225, 227, 228, 229, 230, 231, 232, 239, 243, 244, 245, 246, 248, 249, 251], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/__init__.py": [1, 4, 5, 6, 7, 8], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/store_api.py": [18, 276, 22, 23, 26, 28, 29, 197, 32, 37, 39, 40, 41, 44, 46, 48, 20, 68, 69, 71, 72, 79, 82, 83, 85, 87, 89, 91, 92, 94, 97, 98, 99, 103, 104, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/configuration.py": [135, 136, 137, 138, 139, 142, 19, 149, 22, 23, 25, 26, 27, 29, 158, 31, 32, 34, 36, 37, 39, 40, 41, 170, 43, 172, 46, 47, 189, 179, 52, 54, 59, 61, 190, 63, 192, 224, 67, 69, 71, 200, 73, 204, 80, 81, 82, 84, 213, 86, 199, 88, 90, 219, 92, 221, 222, 223, 96, 225, 98, 100, 102, 230, 104, 167, 111, 76, 168, 157, 122, 123, 42, 21], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/__init__.py": [1, 4, 5, 6, 7, 8, 11, 12, 13, 16, 18, 20], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/pet.py": [128, 130, 150, 172, 139, 141, 19, 215, 21, 22, 152, 25, 29, 30, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 48, 49, 50, 51, 52, 53, 54, 183, 57, 58, 59, 60, 61, 62, 64, 194, 195, 200, 73, 202, 75, 206, 208, 209, 210, 211, 84, 213, 86, 185, 216, 218, 220, 222, 95, 97, 226, 228, 106, 108, 117, 119, 212], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/user.py": [70, 136, 202, 272, 81, 147, 213, 22, 25, 92, 29, 158, 224, 103, 169, 235, 114, 19, 180, 30, 246, 266, 191, 125, 21], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/__init__.py": [1, 4, 5, 6], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/order.py": [130, 44, 141, 45, 19, 21, 22, 152, 25, 29, 30, 52, 161, 163, 39, 40, 41, 42, 43, 172, 173, 174, 175, 48, 49, 50, 51, 180, 53, 54, 57, 58, 59, 60, 61, 62, 191, 64, 202, 75, 86, 176, 222, 97, 228, 178, 108, 119], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/tag.py": [72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63]}} \ No newline at end of file diff --git a/samples/client/petstore/python/dev-requirements.txt.log b/samples/client/petstore/python/dev-requirements.txt.log index 0d8dcbb5831..316a9394b50 100644 --- a/samples/client/petstore/python/dev-requirements.txt.log +++ b/samples/client/petstore/python/dev-requirements.txt.log @@ -20,3 +20,17 @@ Requirement already satisfied (use --upgrade to upgrade): randomize in ./.venv/l Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in ./.venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in ./.venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in ./.venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): nose in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 1)) +Requirement already satisfied (use --upgrade to upgrade): tox in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): coverage in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 3)) +Requirement already satisfied (use --upgrade to upgrade): randomize in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 4)) +Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): nose in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 1)) +Requirement already satisfied (use --upgrade to upgrade): tox in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): coverage in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 3)) +Requirement already satisfied (use --upgrade to upgrade): randomize in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 4)) +Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) diff --git a/samples/client/petstore/python/swagger_client/api_client.py b/samples/client/petstore/python/swagger_client/api_client.py index fdc92cae77f..f3c66bd3706 100644 --- a/samples/client/petstore/python/swagger_client/api_client.py +++ b/samples/client/petstore/python/swagger_client/api_client.py @@ -453,7 +453,9 @@ class ApiClient(object): for auth in auth_settings: auth_setting = config.auth_settings().get(auth) if auth_setting: - if auth_setting['in'] == 'header': + if not auth_setting['value']: + continue + elif auth_setting['in'] == 'header': headers[auth_setting['key']] = auth_setting['value'] elif auth_setting['in'] == 'query': querys[auth_setting['key']] = auth_setting['value'] diff --git a/samples/client/petstore/python/swagger_client/apis/pet_api.py b/samples/client/petstore/python/swagger_client/apis/pet_api.py index d68d34e6774..d7bc11daaaf 100644 --- a/samples/client/petstore/python/swagger_client/apis/pet_api.py +++ b/samples/client/petstore/python/swagger_client/apis/pet_api.py @@ -79,6 +79,7 @@ class PetApi(object): params[key] = val del params['kwargs'] + resource_path = '/pet'.replace('{format}', 'json') method = 'PUT' @@ -154,6 +155,7 @@ class PetApi(object): params[key] = val del params['kwargs'] + resource_path = '/pet'.replace('{format}', 'json') method = 'POST' @@ -229,6 +231,7 @@ class PetApi(object): params[key] = val del params['kwargs'] + resource_path = '/pet/findByStatus'.replace('{format}', 'json') method = 'GET' @@ -304,6 +307,7 @@ class PetApi(object): params[key] = val del params['kwargs'] + resource_path = '/pet/findByTags'.replace('{format}', 'json') method = 'GET' @@ -365,9 +369,6 @@ class PetApi(object): If the method is called asynchronously, returns the request thread. """ - # verify the required parameter 'pet_id' is set - if pet_id is None: - raise ValueError("Missing the required parameter `pet_id` when calling `get_pet_by_id`") all_params = ['pet_id'] all_params.append('callback') @@ -382,6 +383,10 @@ class PetApi(object): params[key] = val del params['kwargs'] + # verify the required parameter 'pet_id' is set + if ('pet_id' not in params) or (params['pet_id'] is None): + raise ValueError("Missing the required parameter `pet_id` when calling `get_pet_by_id`") + resource_path = '/pet/{petId}'.replace('{format}', 'json') method = 'GET' @@ -445,9 +450,6 @@ class PetApi(object): If the method is called asynchronously, returns the request thread. """ - # verify the required parameter 'pet_id' is set - if pet_id is None: - raise ValueError("Missing the required parameter `pet_id` when calling `update_pet_with_form`") all_params = ['pet_id', 'name', 'status'] all_params.append('callback') @@ -462,6 +464,10 @@ class PetApi(object): params[key] = val del params['kwargs'] + # verify the required parameter 'pet_id' is set + if ('pet_id' not in params) or (params['pet_id'] is None): + raise ValueError("Missing the required parameter `pet_id` when calling `update_pet_with_form`") + resource_path = '/pet/{petId}'.replace('{format}', 'json') method = 'POST' @@ -528,9 +534,6 @@ class PetApi(object): If the method is called asynchronously, returns the request thread. """ - # verify the required parameter 'pet_id' is set - if pet_id is None: - raise ValueError("Missing the required parameter `pet_id` when calling `delete_pet`") all_params = ['pet_id', 'api_key'] all_params.append('callback') @@ -545,6 +548,10 @@ class PetApi(object): params[key] = val del params['kwargs'] + # verify the required parameter 'pet_id' is set + if ('pet_id' not in params) or (params['pet_id'] is None): + raise ValueError("Missing the required parameter `pet_id` when calling `delete_pet`") + resource_path = '/pet/{petId}'.replace('{format}', 'json') method = 'DELETE' @@ -610,9 +617,6 @@ class PetApi(object): If the method is called asynchronously, returns the request thread. """ - # verify the required parameter 'pet_id' is set - if pet_id is None: - raise ValueError("Missing the required parameter `pet_id` when calling `upload_file`") all_params = ['pet_id', 'additional_metadata', 'file'] all_params.append('callback') @@ -627,6 +631,10 @@ class PetApi(object): params[key] = val del params['kwargs'] + # verify the required parameter 'pet_id' is set + if ('pet_id' not in params) or (params['pet_id'] is None): + raise ValueError("Missing the required parameter `pet_id` when calling `upload_file`") + resource_path = '/pet/{petId}/uploadImage'.replace('{format}', 'json') method = 'POST' diff --git a/samples/client/petstore/python/swagger_client/apis/store_api.py b/samples/client/petstore/python/swagger_client/apis/store_api.py index 9e08a0b2f47..e3835990a30 100644 --- a/samples/client/petstore/python/swagger_client/apis/store_api.py +++ b/samples/client/petstore/python/swagger_client/apis/store_api.py @@ -78,6 +78,7 @@ class StoreApi(object): params[key] = val del params['kwargs'] + resource_path = '/store/inventory'.replace('{format}', 'json') method = 'GET' @@ -151,6 +152,7 @@ class StoreApi(object): params[key] = val del params['kwargs'] + resource_path = '/store/order'.replace('{format}', 'json') method = 'POST' @@ -212,9 +214,6 @@ class StoreApi(object): If the method is called asynchronously, returns the request thread. """ - # verify the required parameter 'order_id' is set - if order_id is None: - raise ValueError("Missing the required parameter `order_id` when calling `get_order_by_id`") all_params = ['order_id'] all_params.append('callback') @@ -229,6 +228,10 @@ class StoreApi(object): params[key] = val del params['kwargs'] + # verify the required parameter 'order_id' is set + if ('order_id' not in params) or (params['order_id'] is None): + raise ValueError("Missing the required parameter `order_id` when calling `get_order_by_id`") + resource_path = '/store/order/{orderId}'.replace('{format}', 'json') method = 'GET' @@ -290,9 +293,6 @@ class StoreApi(object): If the method is called asynchronously, returns the request thread. """ - # verify the required parameter 'order_id' is set - if order_id is None: - raise ValueError("Missing the required parameter `order_id` when calling `delete_order`") all_params = ['order_id'] all_params.append('callback') @@ -307,6 +307,10 @@ class StoreApi(object): params[key] = val del params['kwargs'] + # verify the required parameter 'order_id' is set + if ('order_id' not in params) or (params['order_id'] is None): + raise ValueError("Missing the required parameter `order_id` when calling `delete_order`") + resource_path = '/store/order/{orderId}'.replace('{format}', 'json') method = 'DELETE' diff --git a/samples/client/petstore/python/swagger_client/apis/user_api.py b/samples/client/petstore/python/swagger_client/apis/user_api.py index aa35e6db53a..4394941b1d5 100644 --- a/samples/client/petstore/python/swagger_client/apis/user_api.py +++ b/samples/client/petstore/python/swagger_client/apis/user_api.py @@ -79,6 +79,7 @@ class UserApi(object): params[key] = val del params['kwargs'] + resource_path = '/user'.replace('{format}', 'json') method = 'POST' @@ -154,6 +155,7 @@ class UserApi(object): params[key] = val del params['kwargs'] + resource_path = '/user/createWithArray'.replace('{format}', 'json') method = 'POST' @@ -229,6 +231,7 @@ class UserApi(object): params[key] = val del params['kwargs'] + resource_path = '/user/createWithList'.replace('{format}', 'json') method = 'POST' @@ -305,6 +308,7 @@ class UserApi(object): params[key] = val del params['kwargs'] + resource_path = '/user/login'.replace('{format}', 'json') method = 'GET' @@ -381,6 +385,7 @@ class UserApi(object): params[key] = val del params['kwargs'] + resource_path = '/user/logout'.replace('{format}', 'json') method = 'GET' @@ -440,9 +445,6 @@ class UserApi(object): If the method is called asynchronously, returns the request thread. """ - # verify the required parameter 'username' is set - if username is None: - raise ValueError("Missing the required parameter `username` when calling `get_user_by_name`") all_params = ['username'] all_params.append('callback') @@ -457,6 +459,10 @@ class UserApi(object): params[key] = val del params['kwargs'] + # verify the required parameter 'username' is set + if ('username' not in params) or (params['username'] is None): + raise ValueError("Missing the required parameter `username` when calling `get_user_by_name`") + resource_path = '/user/{username}'.replace('{format}', 'json') method = 'GET' @@ -519,9 +525,6 @@ class UserApi(object): If the method is called asynchronously, returns the request thread. """ - # verify the required parameter 'username' is set - if username is None: - raise ValueError("Missing the required parameter `username` when calling `update_user`") all_params = ['username', 'body'] all_params.append('callback') @@ -536,6 +539,10 @@ class UserApi(object): params[key] = val del params['kwargs'] + # verify the required parameter 'username' is set + if ('username' not in params) or (params['username'] is None): + raise ValueError("Missing the required parameter `username` when calling `update_user`") + resource_path = '/user/{username}'.replace('{format}', 'json') method = 'PUT' @@ -599,9 +606,6 @@ class UserApi(object): If the method is called asynchronously, returns the request thread. """ - # verify the required parameter 'username' is set - if username is None: - raise ValueError("Missing the required parameter `username` when calling `delete_user`") all_params = ['username'] all_params.append('callback') @@ -616,6 +620,10 @@ class UserApi(object): params[key] = val del params['kwargs'] + # verify the required parameter 'username' is set + if ('username' not in params) or (params['username'] is None): + raise ValueError("Missing the required parameter `username` when calling `delete_user`") + resource_path = '/user/{username}'.replace('{format}', 'json') method = 'DELETE' From b823e8bd35d236e04d6f4e69a19422ec75c44c06 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 20 Nov 2015 17:34:46 +0800 Subject: [PATCH 03/18] Ignore auths when value not specified in Java clients --- .../src/main/resources/Java/auth/ApiKeyAuth.mustache | 3 +++ .../src/main/resources/Java/auth/HttpBasicAuth.mustache | 3 +++ .../Java/libraries/okhttp-gson/auth/HttpBasicAuth.mustache | 3 +++ .../src/main/java/io/swagger/client/auth/ApiKeyAuth.java | 5 ++++- .../src/main/java/io/swagger/client/auth/HttpBasicAuth.java | 5 ++++- .../src/main/java/io/swagger/client/auth/ApiKeyAuth.java | 5 ++++- .../src/main/java/io/swagger/client/auth/HttpBasicAuth.java | 5 ++++- .../src/main/java/io/swagger/client/auth/ApiKeyAuth.java | 5 ++++- .../src/main/java/io/swagger/client/auth/HttpBasicAuth.java | 3 +++ 9 files changed, 32 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache index 04be4812292..931d17b0d04 100644 --- a/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache @@ -44,6 +44,9 @@ public class ApiKeyAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { + if (apiKey == null) { + return; + } String value; if (apiKeyPrefix != null) { value = apiKeyPrefix + " " + apiKey; diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache index 63813e2504e..509f4742b61 100644 --- a/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache @@ -31,6 +31,9 @@ public class HttpBasicAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { + if (username == null && password == null) { + return; + } String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); try { headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary(str.getBytes("UTF-8"))); diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/auth/HttpBasicAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/auth/HttpBasicAuth.mustache index 5b4070fcafb..76fa4a2d0a3 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/auth/HttpBasicAuth.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/auth/HttpBasicAuth.mustache @@ -31,6 +31,9 @@ public class HttpBasicAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { + if (username == null && password == null) { + return; + } String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); try { headerParams.put("Authorization", "Basic " + Base64.encodeToString(str.getBytes("UTF-8"), false)); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index 14891e3504f..0011210c8cc 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-30T16:36:47.681+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-20T17:28:23.285+08:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; @@ -44,6 +44,9 @@ public class ApiKeyAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { + if (apiKey == null) { + return; + } String value; if (apiKeyPrefix != null) { value = apiKeyPrefix + " " + apiKey; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index 99ff90e4c6f..074f1833542 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -8,7 +8,7 @@ import java.util.List; import java.io.UnsupportedEncodingException; import javax.xml.bind.DatatypeConverter; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-30T16:36:47.681+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-20T17:28:23.285+08:00") public class HttpBasicAuth implements Authentication { private String username; private String password; @@ -31,6 +31,9 @@ public class HttpBasicAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { + if (username == null && password == null) { + return; + } String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); try { headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary(str.getBytes("UTF-8"))); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index d7d3d3e63b0..bc3bdaefc44 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-17T11:17:50.535-05:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-20T17:28:47.318+08:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; @@ -44,6 +44,9 @@ public class ApiKeyAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { + if (apiKey == null) { + return; + } String value; if (apiKeyPrefix != null) { value = apiKeyPrefix + " " + apiKey; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index 390502ab9e5..0abfc056e1d 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -8,7 +8,7 @@ import java.util.List; import java.io.UnsupportedEncodingException; import javax.xml.bind.DatatypeConverter; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-17T11:17:50.535-05:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-20T17:28:47.318+08:00") public class HttpBasicAuth implements Authentication { private String username; private String password; @@ -31,6 +31,9 @@ public class HttpBasicAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { + if (username == null && password == null) { + return; + } String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); try { headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary(str.getBytes("UTF-8"))); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index c072321f457..fbfda66f881 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-20T11:42:25.339-07:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-20T17:28:54.086+08:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; @@ -44,6 +44,9 @@ public class ApiKeyAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { + if (apiKey == null) { + return; + } String value; if (apiKeyPrefix != null) { value = apiKeyPrefix + " " + apiKey; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index d2b56433169..38617121e30 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -31,6 +31,9 @@ public class HttpBasicAuth implements Authentication { @Override public void applyToParams(List queryParams, Map headerParams) { + if (username == null && password == null) { + return; + } String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); try { headerParams.put("Authorization", "Basic " + Base64.encodeToString(str.getBytes("UTF-8"), false)); From 8303374aa50b37d63ffd903ed6ab6df9ea152ca6 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 20 Nov 2015 17:36:17 +0800 Subject: [PATCH 04/18] update perl auth to skip null apikey/username&password --- .../main/resources/perl/ApiClient.mustache | 20 ++++++++++++++++--- .../perl/lib/WWW/SwaggerClient/ApiClient.pm | 12 ++++++++--- .../perl/lib/WWW/SwaggerClient/Role.pm | 4 ++-- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/perl/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/perl/ApiClient.mustache index bf1220912d2..1623721cc70 100644 --- a/modules/swagger-codegen/src/main/resources/perl/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/perl/ApiClient.mustache @@ -317,14 +317,28 @@ sub update_params_for_auth { foreach my $auth (@$auth_settings) { # determine which one to use if (!defined($auth)) { + # TODO show warning about auth setting not defined } {{#authMethods}}elsif ($auth eq '{{name}}') { - {{#isApiKey}}{{#isKeyInHeader}}$header_params->{'{{keyParamName}}'} = $self->get_api_key_with_prefix('{{keyParamName}}');{{/isKeyInHeader}}{{#isKeyInQuery}}$query_params->{'{{keyParamName}}'} = $self->get_api_key_with_prefix('{{keyParamName}}');{{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}}$header_params->{'Authorization'} = 'Basic '.encode_base64($WWW::{{moduleName}}::Configuration::username.":".$WWW::{{moduleName}}::Configuration::password);{{/isBasic}} - {{#isOAuth}}$header_params->{'Authorization'} = 'Bearer ' . $WWW::{{moduleName}}::Configuration::access_token;{{/isOAuth}} + {{#isApiKey}}{{#isKeyInHeader}} + my $api_key = $self->get_api_key_with_prefix('{{keyParamName}}'); + if ($api_key) { + $header_params->{'{{keyParamName}}'} = $api_key; + }{{/isKeyInHeader}}{{#isKeyInQuery}} + my $api_key = $self->get_api_key_with_prefix('{{keyParamName}}'); + if ($api_key) { + $query_params->{'{{keyParamName}}'} = $api_key; + }{{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}} + if ($WWW::{{moduleName}}::Configuration::username || $WWW::{{moduleName}}::Configuration::password) { + $header_params->{'Authorization'} = 'Basic ' . encode_base64($WWW::{{moduleName}}::Configuration::username . ":" . $WWW::{{moduleName}}::Configuration::password); + }{{/isBasic}}{{#isOAuth}} + if ($WWW::{{moduleName}}::Configuration::access_token) { + $header_params->{'Authorization'} = 'Bearer ' . $WWW::{{moduleName}}::Configuration::access_token; + }{{/isOAuth}} } {{/authMethods}} else { - # TODO show warning about security definition not found + # TODO show warning about security definition not found } } } diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/ApiClient.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/ApiClient.pm index dbd822cc1d4..11f2ab3f236 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/ApiClient.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/ApiClient.pm @@ -317,18 +317,24 @@ sub update_params_for_auth { foreach my $auth (@$auth_settings) { # determine which one to use if (!defined($auth)) { + # TODO show warning about auth setting not defined } elsif ($auth eq 'api_key') { - $header_params->{'api_key'} = $self->get_api_key_with_prefix('api_key'); + my $api_key = $self->get_api_key_with_prefix('api_key'); + if ($api_key) { + $header_params->{'api_key'} = $api_key; + } } elsif ($auth eq 'petstore_auth') { - $header_params->{'Authorization'} = 'Bearer ' . $WWW::SwaggerClient::Configuration::access_token; + if ($WWW::SwaggerClient::Configuration::access_token) { + $header_params->{'Authorization'} = 'Bearer ' . $WWW::SwaggerClient::Configuration::access_token; + } } else { - # TODO show warning about security definition not found + # TODO show warning about security definition not found } } } diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm index feb5228cb61..941d9e0ce24 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm @@ -37,7 +37,7 @@ has version_info => ( is => 'ro', default => sub { { app_name => 'Swagger Petstore', app_version => '1.0.0', - generated_date => '2015-11-13T20:46:43.271Z', + generated_date => '2015-11-20T17:35:18.902+08:00', generator_class => 'class io.swagger.codegen.languages.PerlClientCodegen', } }, documentation => 'Information about the application version and the codegen codebase version' @@ -103,7 +103,7 @@ Automatically generated by the Perl Swagger Codegen project: =over 4 -=item Build date: 2015-11-13T20:46:43.271Z +=item Build date: 2015-11-20T17:35:18.902+08:00 =item Build package: class io.swagger.codegen.languages.PerlClientCodegen From 81cf57a00b2f279d8610090f28fb51e119f9a3e3 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 20 Nov 2015 20:10:05 +0800 Subject: [PATCH 05/18] Use okhttp's Credentials class to build basic auth string --- .../okhttp-gson/auth/HttpBasicAuth.mustache | 11 +++---- .../Java/libraries/okhttp-gson/pom.mustache | 5 --- .../client/petstore/java/okhttp-gson/pom.xml | 5 --- .../io/swagger/client/auth/HttpBasicAuth.java | 11 +++---- .../swagger/client/auth/ApiKeyAuthTest.java | 31 ++++++++++++++++++- .../client/auth/HttpBasicAuthTest.java | 10 ++++++ 6 files changed, 48 insertions(+), 25 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/auth/HttpBasicAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/auth/HttpBasicAuth.mustache index 76fa4a2d0a3..f3ed85d980b 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/auth/HttpBasicAuth.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/auth/HttpBasicAuth.mustache @@ -2,7 +2,7 @@ package {{invokerPackage}}.auth; import {{invokerPackage}}.Pair; -import com.migcomponents.migbase64.Base64; +import com.squareup.okhttp.Credentials; import java.util.Map; import java.util.List; @@ -34,11 +34,8 @@ public class HttpBasicAuth implements Authentication { if (username == null && password == null) { return; } - String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); - try { - headerParams.put("Authorization", "Basic " + Base64.encodeToString(str.getBytes("UTF-8"), false)); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } + headerParams.put("Authorization", Credentials.basic( + username == null ? "" : username, + password == null ? "" : password)); } } diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/pom.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/pom.mustache index 67fc10e8323..0d7e9015101 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/pom.mustache @@ -122,11 +122,6 @@ gson ${gson-version} - - com.brsanthu - migbase64 - 2.2 - diff --git a/samples/client/petstore/java/okhttp-gson/pom.xml b/samples/client/petstore/java/okhttp-gson/pom.xml index 2442e1c318e..9fa057be939 100644 --- a/samples/client/petstore/java/okhttp-gson/pom.xml +++ b/samples/client/petstore/java/okhttp-gson/pom.xml @@ -122,11 +122,6 @@ gson ${gson-version} - - com.brsanthu - migbase64 - 2.2 - diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index 38617121e30..6ed16d1db30 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -2,7 +2,7 @@ package io.swagger.client.auth; import io.swagger.client.Pair; -import com.migcomponents.migbase64.Base64; +import com.squareup.okhttp.Credentials; import java.util.Map; import java.util.List; @@ -34,11 +34,8 @@ public class HttpBasicAuth implements Authentication { if (username == null && password == null) { return; } - String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); - try { - headerParams.put("Authorization", "Basic " + Base64.encodeToString(str.getBytes("UTF-8"), false)); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } + headerParams.put("Authorization", Credentials.basic( + username == null ? "" : username, + password == null ? "" : password)); } } diff --git a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java index 5bdb4fb78fb..3715e9724e6 100644 --- a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java +++ b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java @@ -29,9 +29,23 @@ public class ApiKeyAuthTest { assertEquals(0, headerParams.size()); } + @Test + public void testApplyToParamsInQueryWithNullValue() { + List queryParams = new ArrayList(); + Map headerParams = new HashMap(); + + ApiKeyAuth auth = new ApiKeyAuth("query", "api_key"); + auth.setApiKey(null); + auth.applyToParams(queryParams, headerParams); + + // no changes to parameters + assertEquals(0, queryParams.size()); + assertEquals(0, headerParams.size()); + } + @Test public void testApplyToParamsInHeaderWithPrefix() { - List queryParams = new ArrayList(); + List queryParams = new ArrayList(); Map headerParams = new HashMap(); ApiKeyAuth auth = new ApiKeyAuth("header", "X-API-TOKEN"); @@ -44,4 +58,19 @@ public class ApiKeyAuthTest { assertEquals(1, headerParams.size()); assertEquals("Token my-api-token", headerParams.get("X-API-TOKEN")); } + + @Test + public void testApplyToParamsInHeaderWithNullValue() { + List queryParams = new ArrayList(); + Map headerParams = new HashMap(); + + ApiKeyAuth auth = new ApiKeyAuth("header", "X-API-TOKEN"); + auth.setApiKey(null); + auth.setApiKeyPrefix("Token"); + auth.applyToParams(queryParams, headerParams); + + // no changes to parameters + assertEquals(0, queryParams.size()); + assertEquals(0, headerParams.size()); + } } diff --git a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java index 52c5497ba83..ddee04f57fc 100644 --- a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java +++ b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java @@ -48,5 +48,15 @@ public class HttpBasicAuthTest { // the string below is base64-encoded result of "my-username:" with the "Basic " prefix expected = "Basic bXktdXNlcm5hbWU6"; assertEquals(expected, headerParams.get("Authorization")); + + // null username and password should be ignored + queryParams = new ArrayList(); + headerParams = new HashMap(); + auth.setUsername(null); + auth.setPassword(null); + auth.applyToParams(queryParams, headerParams); + // no changes to parameters + assertEquals(0, queryParams.size()); + assertEquals(0, headerParams.size()); } } From 1ce3b67aa42572e91a2f77701c0dde40f6c7307b Mon Sep 17 00:00:00 2001 From: wing328 Date: Sat, 21 Nov 2015 13:22:00 +0800 Subject: [PATCH 06/18] add equal and gethashcode to C# model --- .../src/main/resources/csharp/model.mustache | 122 +++++-- .../main/csharp/IO/Swagger/Model/Category.cs | 147 ++++++--- .../src/main/csharp/IO/Swagger/Model/Order.cs | 249 ++++++++++----- .../src/main/csharp/IO/Swagger/Model/Pet.cs | 249 ++++++++++----- .../src/main/csharp/IO/Swagger/Model/Tag.cs | 147 ++++++--- .../src/main/csharp/IO/Swagger/Model/User.cs | 299 ++++++++++++------ .../csharp/SwaggerClientTest/TestPet.cs | 46 +++ .../bin/Debug/SwaggerClientTest.dll | Bin 62464 -> 67072 bytes .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 19469 -> 21049 bytes ...ClientTest.csproj.FilesWrittenAbsolute.txt | 16 +- .../obj/Debug/SwaggerClientTest.dll | Bin 62464 -> 67072 bytes .../obj/Debug/SwaggerClientTest.dll.mdb | Bin 19469 -> 21049 bytes 12 files changed, 883 insertions(+), 392 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/model.mustache b/modules/swagger-codegen/src/main/resources/csharp/model.mustache index d40ece4cc02..c95d2f1a1b9 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/model.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/model.mustache @@ -8,46 +8,98 @@ using Newtonsoft.Json; {{#models}} {{#model}} -namespace {{packageName}}.Model { - - /// - /// {{description}} - /// - [DataContract] - public class {{classname}}{{#parent}} : {{{parent}}}{{/parent}} { - {{#vars}} - /// - /// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{{description}}}{{/description}} - /// {{#description}} - /// {{{description}}}{{/description}} - [DataMember(Name="{{baseName}}", EmitDefaultValue=false)] - public {{{datatype}}} {{name}} { get; set; } - - {{/vars}} +namespace {{packageName}}.Model +{ /// - /// Get the string presentation of the object + /// {{description}} /// - /// String presentation of the object - public override string ToString() { - var sb = new StringBuilder(); - sb.Append("class {{classname}} {\n"); - {{#vars}} - sb.Append(" {{name}}: ").Append({{name}}).Append("\n"); - {{/vars}} - sb.Append("}\n"); - return sb.ToString(); - } + [DataContract] + public class {{classname}} : IEquatable<{{classname}}>{{#parent}}, {{{parent}}}{{/parent}} + { + {{#vars}} + /// + /// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{{description}}}{{/description}} + /// {{#description}} + /// {{{description}}}{{/description}} + [DataMember(Name="{{baseName}}", EmitDefaultValue=false)] + public {{{datatype}}} {{name}} { get; set; } + + {{/vars}} + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class {{classname}} {\n"); + {{#vars}}sb.Append(" {{name}}: ").Append({{name}}).Append("\n"); + {{/vars}} + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public {{#parent}} new {{/parent}}string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } - /// - /// Get the JSON string presentation of the object - /// - /// JSON string presentation of the object - public {{#parent}} new {{/parent}}string ToJson() { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + // credit: http://stackoverflow.com/a/10454552/677735 + return this.Equals(obj as {{classname}}); + } -} + /// + /// Returns true if {{classname}} instances are equal + /// + /// Instance of {{classname}} to be compared + /// Boolean + public bool Equals({{classname}} other) + { + // credit: http://stackoverflow.com/a/10454552/677735 + if (other == null) + return false; + + return {{#vars}} + ( + this.{{name}} == other.{{name}} || + this.{{name}} != null && + this.{{name}}.Equals(other.{{name}}) + ){{#hasMore}} && {{/hasMore}}{{/vars}}; + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + // credit: http://stackoverflow.com/a/263416/677735 + unchecked // Overflow is fine, just wrap + { + int hash = 41; + // Suitable nullity checks etc, of course :) + {{#vars}} + if (this.{{name}} != null) + hash = hash * 57 + this.{{name}}.GetHashCode(); + {{/vars}} + return hash; + } + } + + } {{/model}} {{/models}} } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs index 56ebfdb3b7b..6b39196b2b7 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs @@ -6,52 +6,111 @@ using System.Collections.Generic; using System.Runtime.Serialization; using Newtonsoft.Json; -namespace IO.Swagger.Model { - - /// - /// - /// - [DataContract] - public class Category { - - /// - /// Gets or Sets Id - /// - [DataMember(Name="id", EmitDefaultValue=false)] - public long? Id { get; set; } - - - /// - /// Gets or Sets Name - /// - [DataMember(Name="name", EmitDefaultValue=false)] - public string Name { get; set; } - - +namespace IO.Swagger.Model +{ /// - /// Get the string presentation of the object + /// /// - /// String presentation of the object - public override string ToString() { - var sb = new StringBuilder(); - sb.Append("class Category {\n"); - - sb.Append(" Id: ").Append(Id).Append("\n"); - - sb.Append(" Name: ").Append(Name).Append("\n"); - - sb.Append("}\n"); - return sb.ToString(); + [DataContract] + public class Category : IEquatable + { + + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + public long? Id { get; set; } + + + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + public string Name { get; set; } + + + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Category {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + // credit: http://stackoverflow.com/a/10454552/677735 + return this.Equals(obj as Category); + } + + /// + /// Returns true if Category instances are equal + /// + /// Instance of Category to be compared + /// Boolean + public bool Equals(Category other) + { + // credit: http://stackoverflow.com/a/10454552/677735 + if (other == null) + return false; + + return + ( + this.Id == other.Id || + this.Id != null && + this.Id.Equals(other.Id) + ) && + ( + this.Name == other.Name || + this.Name != null && + this.Name.Equals(other.Name) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + // credit: http://stackoverflow.com/a/263416/677735 + unchecked // Overflow is fine, just wrap + { + int hash = 41; + // Suitable nullity checks etc, of course :) + + if (this.Id != null) + hash = hash * 57 + this.Id.GetHashCode(); + + if (this.Name != null) + hash = hash * 57 + this.Name.GetHashCode(); + + return hash; + } + } + } - - /// - /// Get the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - -} } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs index 1fa62c1605a..8346e1cc6d8 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs @@ -6,89 +6,176 @@ using System.Collections.Generic; using System.Runtime.Serialization; using Newtonsoft.Json; -namespace IO.Swagger.Model { - - /// - /// - /// - [DataContract] - public class Order { - - /// - /// Gets or Sets Id - /// - [DataMember(Name="id", EmitDefaultValue=false)] - public long? Id { get; set; } - - - /// - /// Gets or Sets PetId - /// - [DataMember(Name="petId", EmitDefaultValue=false)] - public long? PetId { get; set; } - - - /// - /// Gets or Sets Quantity - /// - [DataMember(Name="quantity", EmitDefaultValue=false)] - public int? Quantity { get; set; } - - - /// - /// Gets or Sets ShipDate - /// - [DataMember(Name="shipDate", EmitDefaultValue=false)] - public DateTime? ShipDate { get; set; } - - - /// - /// Order Status - /// - /// Order Status - [DataMember(Name="status", EmitDefaultValue=false)] - public string Status { get; set; } - - - /// - /// Gets or Sets Complete - /// - [DataMember(Name="complete", EmitDefaultValue=false)] - public bool? Complete { get; set; } - - +namespace IO.Swagger.Model +{ /// - /// Get the string presentation of the object + /// /// - /// String presentation of the object - public override string ToString() { - var sb = new StringBuilder(); - sb.Append("class Order {\n"); - - sb.Append(" Id: ").Append(Id).Append("\n"); - - sb.Append(" PetId: ").Append(PetId).Append("\n"); - - sb.Append(" Quantity: ").Append(Quantity).Append("\n"); - - sb.Append(" ShipDate: ").Append(ShipDate).Append("\n"); - - sb.Append(" Status: ").Append(Status).Append("\n"); - - sb.Append(" Complete: ").Append(Complete).Append("\n"); - - sb.Append("}\n"); - return sb.ToString(); + [DataContract] + public class Order : IEquatable + { + + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + public long? Id { get; set; } + + + /// + /// Gets or Sets PetId + /// + [DataMember(Name="petId", EmitDefaultValue=false)] + public long? PetId { get; set; } + + + /// + /// Gets or Sets Quantity + /// + [DataMember(Name="quantity", EmitDefaultValue=false)] + public int? Quantity { get; set; } + + + /// + /// Gets or Sets ShipDate + /// + [DataMember(Name="shipDate", EmitDefaultValue=false)] + public DateTime? ShipDate { get; set; } + + + /// + /// Order Status + /// + /// Order Status + [DataMember(Name="status", EmitDefaultValue=false)] + public string Status { get; set; } + + + /// + /// Gets or Sets Complete + /// + [DataMember(Name="complete", EmitDefaultValue=false)] + public bool? Complete { get; set; } + + + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Order {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" PetId: ").Append(PetId).Append("\n"); + sb.Append(" Quantity: ").Append(Quantity).Append("\n"); + sb.Append(" ShipDate: ").Append(ShipDate).Append("\n"); + sb.Append(" Status: ").Append(Status).Append("\n"); + sb.Append(" Complete: ").Append(Complete).Append("\n"); + + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + // credit: http://stackoverflow.com/a/10454552/677735 + return this.Equals(obj as Order); + } + + /// + /// Returns true if Order instances are equal + /// + /// Instance of Order to be compared + /// Boolean + public bool Equals(Order other) + { + // credit: http://stackoverflow.com/a/10454552/677735 + if (other == null) + return false; + + return + ( + this.Id == other.Id || + this.Id != null && + this.Id.Equals(other.Id) + ) && + ( + this.PetId == other.PetId || + this.PetId != null && + this.PetId.Equals(other.PetId) + ) && + ( + this.Quantity == other.Quantity || + this.Quantity != null && + this.Quantity.Equals(other.Quantity) + ) && + ( + this.ShipDate == other.ShipDate || + this.ShipDate != null && + this.ShipDate.Equals(other.ShipDate) + ) && + ( + this.Status == other.Status || + this.Status != null && + this.Status.Equals(other.Status) + ) && + ( + this.Complete == other.Complete || + this.Complete != null && + this.Complete.Equals(other.Complete) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + // credit: http://stackoverflow.com/a/263416/677735 + unchecked // Overflow is fine, just wrap + { + int hash = 41; + // Suitable nullity checks etc, of course :) + + if (this.Id != null) + hash = hash * 57 + this.Id.GetHashCode(); + + if (this.PetId != null) + hash = hash * 57 + this.PetId.GetHashCode(); + + if (this.Quantity != null) + hash = hash * 57 + this.Quantity.GetHashCode(); + + if (this.ShipDate != null) + hash = hash * 57 + this.ShipDate.GetHashCode(); + + if (this.Status != null) + hash = hash * 57 + this.Status.GetHashCode(); + + if (this.Complete != null) + hash = hash * 57 + this.Complete.GetHashCode(); + + return hash; + } + } + } - - /// - /// Get the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - -} } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs index 37c80259944..3c5264fe8c8 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs @@ -6,89 +6,176 @@ using System.Collections.Generic; using System.Runtime.Serialization; using Newtonsoft.Json; -namespace IO.Swagger.Model { - - /// - /// - /// - [DataContract] - public class Pet { - - /// - /// Gets or Sets Id - /// - [DataMember(Name="id", EmitDefaultValue=false)] - public long? Id { get; set; } - - - /// - /// Gets or Sets Category - /// - [DataMember(Name="category", EmitDefaultValue=false)] - public Category Category { get; set; } - - - /// - /// Gets or Sets Name - /// - [DataMember(Name="name", EmitDefaultValue=false)] - public string Name { get; set; } - - - /// - /// Gets or Sets PhotoUrls - /// - [DataMember(Name="photoUrls", EmitDefaultValue=false)] - public List PhotoUrls { get; set; } - - - /// - /// Gets or Sets Tags - /// - [DataMember(Name="tags", EmitDefaultValue=false)] - public List Tags { get; set; } - - - /// - /// pet status in the store - /// - /// pet status in the store - [DataMember(Name="status", EmitDefaultValue=false)] - public string Status { get; set; } - - +namespace IO.Swagger.Model +{ /// - /// Get the string presentation of the object + /// /// - /// String presentation of the object - public override string ToString() { - var sb = new StringBuilder(); - sb.Append("class Pet {\n"); - - sb.Append(" Id: ").Append(Id).Append("\n"); - - sb.Append(" Category: ").Append(Category).Append("\n"); - - sb.Append(" Name: ").Append(Name).Append("\n"); - - sb.Append(" PhotoUrls: ").Append(PhotoUrls).Append("\n"); - - sb.Append(" Tags: ").Append(Tags).Append("\n"); - - sb.Append(" Status: ").Append(Status).Append("\n"); - - sb.Append("}\n"); - return sb.ToString(); + [DataContract] + public class Pet : IEquatable + { + + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + public long? Id { get; set; } + + + /// + /// Gets or Sets Category + /// + [DataMember(Name="category", EmitDefaultValue=false)] + public Category Category { get; set; } + + + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + public string Name { get; set; } + + + /// + /// Gets or Sets PhotoUrls + /// + [DataMember(Name="photoUrls", EmitDefaultValue=false)] + public List PhotoUrls { get; set; } + + + /// + /// Gets or Sets Tags + /// + [DataMember(Name="tags", EmitDefaultValue=false)] + public List Tags { get; set; } + + + /// + /// pet status in the store + /// + /// pet status in the store + [DataMember(Name="status", EmitDefaultValue=false)] + public string Status { get; set; } + + + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Pet {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Category: ").Append(Category).Append("\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + sb.Append(" PhotoUrls: ").Append(PhotoUrls).Append("\n"); + sb.Append(" Tags: ").Append(Tags).Append("\n"); + sb.Append(" Status: ").Append(Status).Append("\n"); + + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + // credit: http://stackoverflow.com/a/10454552/677735 + return this.Equals(obj as Pet); + } + + /// + /// Returns true if Pet instances are equal + /// + /// Instance of Pet to be compared + /// Boolean + public bool Equals(Pet other) + { + // credit: http://stackoverflow.com/a/10454552/677735 + if (other == null) + return false; + + return + ( + this.Id == other.Id || + this.Id != null && + this.Id.Equals(other.Id) + ) && + ( + this.Category == other.Category || + this.Category != null && + this.Category.Equals(other.Category) + ) && + ( + this.Name == other.Name || + this.Name != null && + this.Name.Equals(other.Name) + ) && +// ( +// this.PhotoUrls == other.PhotoUrls || +// this.PhotoUrls != null && +// this.PhotoUrls.Equals(other.PhotoUrls) +// ) && + ( + this.Tags == other.Tags || + this.Tags != null && + this.Tags.Equals(other.Tags) + ) && + ( + this.Status == other.Status || + this.Status != null && + this.Status.Equals(other.Status) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + // credit: http://stackoverflow.com/a/263416/677735 + unchecked // Overflow is fine, just wrap + { + int hash = 41; + // Suitable nullity checks etc, of course :) + + if (this.Id != null) + hash = hash * 57 + this.Id.GetHashCode(); + + if (this.Category != null) + hash = hash * 57 + this.Category.GetHashCode(); + + if (this.Name != null) + hash = hash * 57 + this.Name.GetHashCode(); + + if (this.PhotoUrls != null) + hash = hash * 57 + this.PhotoUrls.GetHashCode(); + + if (this.Tags != null) + hash = hash * 57 + this.Tags.GetHashCode(); + + if (this.Status != null) + hash = hash * 57 + this.Status.GetHashCode(); + + return hash; + } + } + } - - /// - /// Get the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - -} } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs index 7d2ea38833b..6e8f84b89e9 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs @@ -6,52 +6,111 @@ using System.Collections.Generic; using System.Runtime.Serialization; using Newtonsoft.Json; -namespace IO.Swagger.Model { - - /// - /// - /// - [DataContract] - public class Tag { - - /// - /// Gets or Sets Id - /// - [DataMember(Name="id", EmitDefaultValue=false)] - public long? Id { get; set; } - - - /// - /// Gets or Sets Name - /// - [DataMember(Name="name", EmitDefaultValue=false)] - public string Name { get; set; } - - +namespace IO.Swagger.Model +{ /// - /// Get the string presentation of the object + /// /// - /// String presentation of the object - public override string ToString() { - var sb = new StringBuilder(); - sb.Append("class Tag {\n"); - - sb.Append(" Id: ").Append(Id).Append("\n"); - - sb.Append(" Name: ").Append(Name).Append("\n"); - - sb.Append("}\n"); - return sb.ToString(); + [DataContract] + public class Tag : IEquatable + { + + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + public long? Id { get; set; } + + + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + public string Name { get; set; } + + + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Tag {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + // credit: http://stackoverflow.com/a/10454552/677735 + return this.Equals(obj as Tag); + } + + /// + /// Returns true if Tag instances are equal + /// + /// Instance of Tag to be compared + /// Boolean + public bool Equals(Tag other) + { + // credit: http://stackoverflow.com/a/10454552/677735 + if (other == null) + return false; + + return + ( + this.Id == other.Id || + this.Id != null && + this.Id.Equals(other.Id) + ) && + ( + this.Name == other.Name || + this.Name != null && + this.Name.Equals(other.Name) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + // credit: http://stackoverflow.com/a/263416/677735 + unchecked // Overflow is fine, just wrap + { + int hash = 41; + // Suitable nullity checks etc, of course :) + + if (this.Id != null) + hash = hash * 57 + this.Id.GetHashCode(); + + if (this.Name != null) + hash = hash * 57 + this.Name.GetHashCode(); + + return hash; + } + } + } - - /// - /// Get the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - -} } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs index 5430d1182cb..aff43555136 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs @@ -6,107 +6,208 @@ using System.Collections.Generic; using System.Runtime.Serialization; using Newtonsoft.Json; -namespace IO.Swagger.Model { - - /// - /// - /// - [DataContract] - public class User { - - /// - /// Gets or Sets Id - /// - [DataMember(Name="id", EmitDefaultValue=false)] - public long? Id { get; set; } - - - /// - /// Gets or Sets Username - /// - [DataMember(Name="username", EmitDefaultValue=false)] - public string Username { get; set; } - - - /// - /// Gets or Sets FirstName - /// - [DataMember(Name="firstName", EmitDefaultValue=false)] - public string FirstName { get; set; } - - - /// - /// Gets or Sets LastName - /// - [DataMember(Name="lastName", EmitDefaultValue=false)] - public string LastName { get; set; } - - - /// - /// Gets or Sets Email - /// - [DataMember(Name="email", EmitDefaultValue=false)] - public string Email { get; set; } - - - /// - /// Gets or Sets Password - /// - [DataMember(Name="password", EmitDefaultValue=false)] - public string Password { get; set; } - - - /// - /// Gets or Sets Phone - /// - [DataMember(Name="phone", EmitDefaultValue=false)] - public string Phone { get; set; } - - - /// - /// User Status - /// - /// User Status - [DataMember(Name="userStatus", EmitDefaultValue=false)] - public int? UserStatus { get; set; } - - +namespace IO.Swagger.Model +{ /// - /// Get the string presentation of the object + /// /// - /// String presentation of the object - public override string ToString() { - var sb = new StringBuilder(); - sb.Append("class User {\n"); - - sb.Append(" Id: ").Append(Id).Append("\n"); - - sb.Append(" Username: ").Append(Username).Append("\n"); - - sb.Append(" FirstName: ").Append(FirstName).Append("\n"); - - sb.Append(" LastName: ").Append(LastName).Append("\n"); - - sb.Append(" Email: ").Append(Email).Append("\n"); - - sb.Append(" Password: ").Append(Password).Append("\n"); - - sb.Append(" Phone: ").Append(Phone).Append("\n"); - - sb.Append(" UserStatus: ").Append(UserStatus).Append("\n"); - - sb.Append("}\n"); - return sb.ToString(); + [DataContract] + public class User : IEquatable + { + + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + public long? Id { get; set; } + + + /// + /// Gets or Sets Username + /// + [DataMember(Name="username", EmitDefaultValue=false)] + public string Username { get; set; } + + + /// + /// Gets or Sets FirstName + /// + [DataMember(Name="firstName", EmitDefaultValue=false)] + public string FirstName { get; set; } + + + /// + /// Gets or Sets LastName + /// + [DataMember(Name="lastName", EmitDefaultValue=false)] + public string LastName { get; set; } + + + /// + /// Gets or Sets Email + /// + [DataMember(Name="email", EmitDefaultValue=false)] + public string Email { get; set; } + + + /// + /// Gets or Sets Password + /// + [DataMember(Name="password", EmitDefaultValue=false)] + public string Password { get; set; } + + + /// + /// Gets or Sets Phone + /// + [DataMember(Name="phone", EmitDefaultValue=false)] + public string Phone { get; set; } + + + /// + /// User Status + /// + /// User Status + [DataMember(Name="userStatus", EmitDefaultValue=false)] + public int? UserStatus { get; set; } + + + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class User {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Username: ").Append(Username).Append("\n"); + sb.Append(" FirstName: ").Append(FirstName).Append("\n"); + sb.Append(" LastName: ").Append(LastName).Append("\n"); + sb.Append(" Email: ").Append(Email).Append("\n"); + sb.Append(" Password: ").Append(Password).Append("\n"); + sb.Append(" Phone: ").Append(Phone).Append("\n"); + sb.Append(" UserStatus: ").Append(UserStatus).Append("\n"); + + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + // credit: http://stackoverflow.com/a/10454552/677735 + return this.Equals(obj as User); + } + + /// + /// Returns true if User instances are equal + /// + /// Instance of User to be compared + /// Boolean + public bool Equals(User other) + { + // credit: http://stackoverflow.com/a/10454552/677735 + if (other == null) + return false; + + return + ( + this.Id == other.Id || + this.Id != null && + this.Id.Equals(other.Id) + ) && + ( + this.Username == other.Username || + this.Username != null && + this.Username.Equals(other.Username) + ) && + ( + this.FirstName == other.FirstName || + this.FirstName != null && + this.FirstName.Equals(other.FirstName) + ) && + ( + this.LastName == other.LastName || + this.LastName != null && + this.LastName.Equals(other.LastName) + ) && + ( + this.Email == other.Email || + this.Email != null && + this.Email.Equals(other.Email) + ) && + ( + this.Password == other.Password || + this.Password != null && + this.Password.Equals(other.Password) + ) && + ( + this.Phone == other.Phone || + this.Phone != null && + this.Phone.Equals(other.Phone) + ) && + ( + this.UserStatus == other.UserStatus || + this.UserStatus != null && + this.UserStatus.Equals(other.UserStatus) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + // credit: http://stackoverflow.com/a/263416/677735 + unchecked // Overflow is fine, just wrap + { + int hash = 41; + // Suitable nullity checks etc, of course :) + + if (this.Id != null) + hash = hash * 57 + this.Id.GetHashCode(); + + if (this.Username != null) + hash = hash * 57 + this.Username.GetHashCode(); + + if (this.FirstName != null) + hash = hash * 57 + this.FirstName.GetHashCode(); + + if (this.LastName != null) + hash = hash * 57 + this.LastName.GetHashCode(); + + if (this.Email != null) + hash = hash * 57 + this.Email.GetHashCode(); + + if (this.Password != null) + hash = hash * 57 + this.Password.GetHashCode(); + + if (this.Phone != null) + hash = hash * 57 + this.Phone.GetHashCode(); + + if (this.UserStatus != null) + hash = hash * 57 + this.UserStatus.GetHashCode(); + + return hash; + } + } + } - - /// - /// Get the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - -} } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs index 5a42b8703c2..6fe0de92cac 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs @@ -144,6 +144,52 @@ namespace SwaggerClient.TestPet } + [Test ()] + public void TestEqual() + { + // create pet + Pet p1 = new Pet(); + p1.Id = petId; + p1.Name = "Csharp test"; + p1.Status = "available"; + // create Category object + Category category1 = new Category(); + category1.Id = 56; + category1.Name = "sample category name2"; + List photoUrls1 = new List(new String[] {"sample photoUrls"}); + // create Tag object + Tag tag1 = new Tag(); + tag1.Id = petId; + tag1.Name = "sample tag name1"; + List tags1 = new List(new Tag[] {tag1}); + p1.Tags = tags1; + p1.Category = category1; + p1.PhotoUrls = photoUrls1; + + // create pet + Pet p2 = new Pet(); + p2.Id = petId; + p2.Name = "Csharp test"; + p2.Status = "available"; + // create Category object + Category category2 = new Category(); + category2.Id = 56; + category2.Name = "sample category name2"; + List photoUrls2 = new List(new String[] {"sample photoUrls"}); + // create Tag object + Tag tag2 = new Tag(); + tag2.Id = petId; + tag2.Name = "sample tag name1"; + List tags2 = new List(new Tag[] {tag2}); + p2.Tags = tags2; + p2.Category = category2; + p2.PhotoUrls = photoUrls2; + + Assert.IsTrue (category1.Equals (category2)); + Assert.IsTrue (tag1.Equals (tag2)); + Assert.IsTrue (p1.Equals(p2)); + } + } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index c975e54d4bed8fc21372acb08c3eaa6fab9aa969..5e020c8b222027bde45f4a7a71a9cde3f078339b 100755 GIT binary patch delta 11756 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 delta 7275 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 diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb index 5c1092d07fca586d960495ae792c0d8c2f9a8e0f..915a29526545d08d305da895ba140ded4178cc07 100644 GIT binary patch literal 21049 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 K4rcXufd3Ehs4epV literal 19469 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 delta 7275 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 diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb index 5c1092d07fca586d960495ae792c0d8c2f9a8e0f..915a29526545d08d305da895ba140ded4178cc07 100644 GIT binary patch literal 21049 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 K4rcXufd3Ehs4epV literal 19469 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 Date: Sat, 21 Nov 2015 15:16:38 +0800 Subject: [PATCH 07/18] add test case for pet equal --- .../src/main/resources/csharp/model.mustache | 10 ++++++-- .../main/csharp/IO/Swagger/Model/Category.cs | 1 + .../src/main/csharp/IO/Swagger/Model/Order.cs | 1 + .../src/main/csharp/IO/Swagger/Model/Pet.cs | 13 +++++----- .../src/main/csharp/IO/Swagger/Model/Tag.cs | 1 + .../src/main/csharp/IO/Swagger/Model/User.cs | 1 + .../SwaggerClientTest.userprefs | 19 ++++++++++++++- .../csharp/SwaggerClientTest/TestPet.cs | 23 +++++++++++++++--- .../bin/Debug/SwaggerClientTest.dll | Bin 67072 -> 67584 bytes .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 21049 -> 21107 bytes .../obj/Debug/SwaggerClientTest.dll | Bin 67072 -> 67584 bytes .../obj/Debug/SwaggerClientTest.dll.mdb | Bin 21049 -> 21107 bytes 12 files changed, 57 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/model.mustache b/modules/swagger-codegen/src/main/resources/csharp/model.mustache index c95d2f1a1b9..7ab48dc56e2 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/model.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/model.mustache @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.IO; using System.Text; using System.Collections; @@ -72,12 +73,17 @@ namespace {{packageName}}.Model if (other == null) return false; - return {{#vars}} + return {{#vars}}{{#isNotContainer}} ( this.{{name}} == other.{{name}} || this.{{name}} != null && this.{{name}}.Equals(other.{{name}}) - ){{#hasMore}} && {{/hasMore}}{{/vars}}; + ){{#hasMore}} && {{/hasMore}}{{/isNotContainer}}{{^isNotContainer}} + ( + this.{{name}} == other.{{name}} || + this.{{name}} != null && + this.{{name}}.SequenceEqual(other.{{name}}) + ){{#hasMore}} && {{/hasMore}}{{/isNotContainer}}{{/vars}}; } /// diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs index 6b39196b2b7..7d3f0936dce 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.IO; using System.Text; using System.Collections; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs index 8346e1cc6d8..1f786769d55 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.IO; using System.Text; using System.Collections; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs index 3c5264fe8c8..d85d8a8be7e 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.IO; using System.Text; using System.Collections; @@ -126,15 +127,15 @@ namespace IO.Swagger.Model this.Name != null && this.Name.Equals(other.Name) ) && -// ( -// this.PhotoUrls == other.PhotoUrls || -// this.PhotoUrls != null && -// this.PhotoUrls.Equals(other.PhotoUrls) -// ) && + ( + this.PhotoUrls == other.PhotoUrls || + this.PhotoUrls != null && + this.PhotoUrls.SequenceEqual(other.PhotoUrls) + ) && ( this.Tags == other.Tags || this.Tags != null && - this.Tags.Equals(other.Tags) + this.Tags.SequenceEqual(other.Tags) ) && ( this.Status == other.Status || diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs index 6e8f84b89e9..8b2cbe08474 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.IO; using System.Text; using System.Collections; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs index aff43555136..d2c1e3a46eb 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.IO; using System.Text; using System.Collections; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs index 31e5cba141b..05585bff932 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs +++ b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs @@ -2,8 +2,25 @@ - + + + + + + + + + + + + + + + + + + diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs index 6fe0de92cac..0227a2d9113 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs @@ -1,5 +1,6 @@ using NUnit.Framework; using System; +using System.Linq; using System.IO; using System.Collections.Generic; using IO.Swagger.Api; @@ -166,7 +167,7 @@ namespace SwaggerClient.TestPet p1.Category = category1; p1.PhotoUrls = photoUrls1; - // create pet + // create pet 2 Pet p2 = new Pet(); p2.Id = petId; p2.Name = "Csharp test"; @@ -185,9 +186,25 @@ namespace SwaggerClient.TestPet p2.Category = category2; p2.PhotoUrls = photoUrls2; + // p1 and p2 should be equal (both object and attribute level) Assert.IsTrue (category1.Equals (category2)); - Assert.IsTrue (tag1.Equals (tag2)); - Assert.IsTrue (p1.Equals(p2)); + Assert.IsTrue (tags1.SequenceEqual (tags2)); + Assert.IsTrue (p1.PhotoUrls.SequenceEqual(p2.PhotoUrls)); + + Assert.IsTrue (p1.Equals (p2)); + + // update attribute to that p1 and p2 are not equal + category2.Name = "new category name"; + Assert.IsFalse(category1.Equals (category2)); + + tags2 = new List (); + Assert.IsFalse (tags1.SequenceEqual (tags2)); + + // photoUrls has not changed so it should be equal + Assert.IsTrue (p1.PhotoUrls.SequenceEqual(p2.PhotoUrls)); + + Assert.IsFalse (p1.Equals (p2)); + } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index 5e020c8b222027bde45f4a7a71a9cde3f078339b..924934c46233779ca4dd6c58049f0518ece993b2 100755 GIT binary patch delta 5639 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 OuYAqxxm#Rzg7M#yM;ccE delta 5375 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 Ha`S%yPU&#W delta 3869 zcmZ9P2Ut{B8ixPFjKj=aj06EAMF`z276z22f(Wj=*?khSnkB-TLD~$cAY!8ph>C!T z%86J}V~aIvjG7{-No?39f)R>^T$M0XRh_ucH6Qy_#>hWl+HyFbr(IFNCy{L-^usE!$%VN z2!PJ7;9Z}5+RY}@uFvT4qbu9nA{WH@u8)YJ%0-hG^0A6OHq}cT#<~?R?fZ|L4db$w zf80td#EOHZlTE@}Z{hr%y~8~0w-@`>{h={cE?PQS-(6&PB0smbb<+=?`=Sgk&WqB^ zd4W{V`M(Q{6Rnw>%$1wK2aU zWn?jByy-Sxyh+oSSNdABLHui9M;69w@cK_4=kLSc>gU4ZdH;UHnLW?wXJ;@yQrR(< z3StXmO^qmJrbj9l$5KV?lCG({a%(JYi`_1z9%6g0%0sdAQ|!-OQ%_}mEM1KKO-lbJ z&h=Eb#?t-R2V&}kbt`4Y_&sG&9L5Fw z5_hy~>ZNRmqswuPNToed%0}?K{_*T%ex<)7)AE;iP2;@=$3e^HF zEz~a3nz~S#w!%ZTK}#F8Uv*9Us(#ecer=VM8n>d4>YSF&Yiqlv?y5Ulx~sh>rN%Y) zRlU|yyS772#jQ}8wxYj^$I}<_i{s5rX!y>7cB3@nqPzZ0e|Rg|F*A#!$5Zj9|s2qUl-AQ`E$R%>I%l}dV1Qd&}8$08ap1Y>1QZPq_V`t ziN^NPv-*A_JxFXbjpb_7Id@dICsIdZL6T{aovEw(izHf{R3W9Nqp04JL|c=#bxqyX z2b1Vf(oaaG<*8*}tS4{L_>8JcqRUB*(iMYPPlp8bqU!FdQZG)XisU89<|l_S+Xz#w zw@SS$nZ8NhE!D(do4zimlIe8v8H9}Fy7(zN##jfwdayBs^@zVv?;6x|Q|R-QB`M}r z3rADvSjutJST1y~TBuKFf(9t-GtqG`c}W^jTou7a9mF{`V&$bE*@kT;fkKF>aTT8 zJ%lHEda8dWrK7~TZbDfq%}@O-)!c+J^%lNNrM0Q+kmBdBGX41zWYIX^ZhYdP$Wi-J zsVcQvx+wXLBOrW}M!VC#O*7vxXK-)z&i_C0 z-Eiu=@v6arPERLL`-FKDO}Dj@y(M<9wt6y=o=$wmtph{Y+x-2&kps#mQPrgCNn+!Q zjHImL8G7+gx0TG7+1iAb`{N>++!klXsyv-mrdRTVfgVbnV4Kj?P#c~RG=Mt>`C9&% zPW9;*)A`vTC-!fi7Bo(AEQ1;|e&=U`oLM4o4T@CMOr|T7ukyfP7nfM6R6Xs$H1jmJ zZaS@>zG1p?tdy1Uum~4!H6+M>_jLMp`W{n`+p%RcX!(p4eC&{k_M2zWmKj@TNVixy zlPYJf;*BV6n@QVeemzqvt`GLyo-5K=~6y5pSYG(@=ohxAH3;6QzETE**r$`=dsUV=J_Qhj7m#b8O+?lQ{#LV73sJVX=Mpp z)mao9SW?PpX(?OAwNaBDw_vcflx>5V@3*du(fTsBfwx2r9 zX!t1T95@9&4muCcgJ(gtU>;x~D#hSe3^v2pKo`IV;CrDu@CEous2!)Cj%`KL`De=PM=*CThjt3b+|u0$l~OKs*3^ z4LlDV23-g5g0F&ZfQJR40q{-mLGY*0EwE28t^?l&CxhRI?tpK>H$!*9bs}j6QNh&OYnN=HF#t=b|lO|)Q-W&82kt70N28kA;LT0ZTJm{fj=FN zX29Y*VLOW_USd1#XAGgt~)sBXQ_NffvB%Lp{K1d>&m5wgx+c9iX?t74UwL4R|wrqd4w~ g!5zT&kS+L6_%p~3Y(EmsK=>%82!MO>HPN+y0k5`lDgXcg diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll index 5e020c8b222027bde45f4a7a71a9cde3f078339b..924934c46233779ca4dd6c58049f0518ece993b2 100755 GIT binary patch delta 5639 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 OuYAqxxm#Rzg7M#yM;ccE delta 5375 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 Ha`S%yPU&#W delta 3869 zcmZ9P2Ut{B8ixPFjKj=aj06EAMF`z276z22f(Wj=*?khSnkB-TLD~$cAY!8ph>C!T z%86J}V~aIvjG7{-No?39f)R>^T$M0XRh_ucH6Qy_#>hWl+HyFbr(IFNCy{L-^usE!$%VN z2!PJ7;9Z}5+RY}@uFvT4qbu9nA{WH@u8)YJ%0-hG^0A6OHq}cT#<~?R?fZ|L4db$w zf80td#EOHZlTE@}Z{hr%y~8~0w-@`>{h={cE?PQS-(6&PB0smbb<+=?`=Sgk&WqB^ zd4W{V`M(Q{6Rnw>%$1wK2aU zWn?jByy-Sxyh+oSSNdABLHui9M;69w@cK_4=kLSc>gU4ZdH;UHnLW?wXJ;@yQrR(< z3StXmO^qmJrbj9l$5KV?lCG({a%(JYi`_1z9%6g0%0sdAQ|!-OQ%_}mEM1KKO-lbJ z&h=Eb#?t-R2V&}kbt`4Y_&sG&9L5Fw z5_hy~>ZNRmqswuPNToed%0}?K{_*T%ex<)7)AE;iP2;@=$3e^HF zEz~a3nz~S#w!%ZTK}#F8Uv*9Us(#ecer=VM8n>d4>YSF&Yiqlv?y5Ulx~sh>rN%Y) zRlU|yyS772#jQ}8wxYj^$I}<_i{s5rX!y>7cB3@nqPzZ0e|Rg|F*A#!$5Zj9|s2qUl-AQ`E$R%>I%l}dV1Qd&}8$08ap1Y>1QZPq_V`t ziN^NPv-*A_JxFXbjpb_7Id@dICsIdZL6T{aovEw(izHf{R3W9Nqp04JL|c=#bxqyX z2b1Vf(oaaG<*8*}tS4{L_>8JcqRUB*(iMYPPlp8bqU!FdQZG)XisU89<|l_S+Xz#w zw@SS$nZ8NhE!D(do4zimlIe8v8H9}Fy7(zN##jfwdayBs^@zVv?;6x|Q|R-QB`M}r z3rADvSjutJST1y~TBuKFf(9t-GtqG`c}W^jTou7a9mF{`V&$bE*@kT;fkKF>aTT8 zJ%lHEda8dWrK7~TZbDfq%}@O-)!c+J^%lNNrM0Q+kmBdBGX41zWYIX^ZhYdP$Wi-J zsVcQvx+wXLBOrW}M!VC#O*7vxXK-)z&i_C0 z-Eiu=@v6arPERLL`-FKDO}Dj@y(M<9wt6y=o=$wmtph{Y+x-2&kps#mQPrgCNn+!Q zjHImL8G7+gx0TG7+1iAb`{N>++!klXsyv-mrdRTVfgVbnV4Kj?P#c~RG=Mt>`C9&% zPW9;*)A`vTC-!fi7Bo(AEQ1;|e&=U`oLM4o4T@CMOr|T7ukyfP7nfM6R6Xs$H1jmJ zZaS@>zG1p?tdy1Uum~4!H6+M>_jLMp`W{n`+p%RcX!(p4eC&{k_M2zWmKj@TNVixy zlPYJf;*BV6n@QVeemzqvt`GLyo-5K=~6y5pSYG(@=ohxAH3;6QzETE**r$`=dsUV=J_Qhj7m#b8O+?lQ{#LV73sJVX=Mpp z)mao9SW?PpX(?OAwNaBDw_vcflx>5V@3*du(fTsBfwx2r9 zX!t1T95@9&4muCcgJ(gtU>;x~D#hSe3^v2pKo`IV;CrDu@CEous2!)Cj%`KL`De=PM=*CThjt3b+|u0$l~OKs*3^ z4LlDV23-g5g0F&ZfQJR40q{-mLGY*0EwE28t^?l&CxhRI?tpK>H$!*9bs}j6QNh&OYnN=HF#t=b|lO|)Q-W&82kt70N28kA;LT0ZTJm{fj=FN zX29Y*VLOW_USd1#XAGgt~)sBXQ_NffvB%Lp{K1d>&m5wgx+c9iX?t74UwL4R|wrqd4w~ g!5zT&kS+L6_%p~3Y(EmsK=>%82!MO>HPN+y0k5`lDgXcg From 6f27a8512d78eb460a7d5bf683daa90d90e22728 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 22 Nov 2015 00:06:12 +0800 Subject: [PATCH 08/18] Add python flask --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 0eeb2a3065e..ef321e4bb59 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Check out [Swagger-Spec](https://github.com/swagger-api/swagger-spec) for additi - [To build a server stub](#to-build-a-server-stub) - [Node.js](#nodejs) - [PHP Silex](#php-silex) + - [Python Flask (Connexion)](#python-flask-connexion) - [Ruby Sinatra](#ruby-sinatra) - [Scala Scalatra](#scala-scalatra) - [Java JAX-RS](#java-jax-rs) @@ -268,9 +269,11 @@ AkkaScalaClientCodegen.java AndroidClientCodegen.java AsyncScalaClientCodegen.java CSharpClientCodegen.java +ClojureClientCodegen.java CsharpDotNet2ClientCodegen.java DartClientCodegen.java FlashClientCodegen.java +FlaskConnexionCodegen.java JavaClientCodegen.java JavaInflectorServerCodegen.java JaxRSServerCodegen.java @@ -441,6 +444,15 @@ java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \ -o samples/server/petstore/silex ``` +### Python Flask (Connexion) + +``` +java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \ + -i http://petstore.swagger.io/v2/swagger.json \ + -l flaskConnexion \ + -o samples/server/petstore/flaskConnexion +``` + ### Ruby Sinatra ``` From a9da01a45107521f9cdad1bff3051342f402c8dd Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 20 Nov 2015 15:54:42 +0800 Subject: [PATCH 09/18] better auth for C#, format change --- .../main/resources/csharp/ApiClient.mustache | 39 +++++++++++++++---- .../csharp/IO/Swagger/Client/ApiClient.cs | 32 ++++++++++----- ...ClientTest.csproj.FilesWrittenAbsolute.txt | 10 ++++- 3 files changed, 62 insertions(+), 19 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index 87d55ab3f6e..8af5250c471 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -198,10 +198,12 @@ namespace {{packageName}}.Client { if (obj is DateTime) return ((DateTime)obj).ToString ("u"); - else if (obj is IList) { + else if (obj is IList) + { string flattenString = ""; string separator = ","; - foreach (var param in (IList)obj) { + foreach (var param in (IList)obj) + { flattenString += param.ToString() + separator; } return flattenString.Remove(flattenString.Length - 1);; @@ -318,11 +320,29 @@ namespace {{packageName}}.Client { {{#authMethods}} case "{{name}}": - {{#isApiKey}}{{#isKeyInHeader}}headerParams["{{keyParamName}}"] = GetApiKeyWithPrefix("{{keyParamName}}");{{/isKeyInHeader}}{{#isKeyInQuery}}queryParams["{{keyParamName}}"] = GetApiKeyWithPrefix("{{keyParamName}}");{{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}}headerParams["Authorization"] = "Basic " + Base64Encode(Configuration.Username + ":" + Configuration.Password);{{/isBasic}}{{#isOAuth}}headerParams["Authorization"] = "Bearer " + Configuration.AccessToken;{{/isOAuth}} + {{#isApiKey}}{{#isKeyInHeader}} + var apiKeyValue = GetApiKeyWithPrefix("{{keyParamName}}"); + if (!String.IsNullOrEmpty(apiKeyValue)) + { + headerParams["{{keyParamName}}"] = apiKeyValue; + }{{/isKeyInHeader}}{{#isKeyInQuery}} + var apiKeyValue = GetApiKeyWithPrefix("{{keyParamName}}"); + if (!String.IsNullOrEmpty(apiKeyValue)) + { + queryParams["{{keyParamName}}"] = apiKeyValue; + }{{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}} + if (!String.IsNullOrEmpty(Configuration.Username) && !String.IsNullOrEmpty(Configuration.Password)) + { + headerParams["Authorization"] = "Basic " + Base64Encode(Configuration.Username + ":" + Configuration.Password); + }{{/isBasic}}{{#isOAuth}} + if (!String.IsNullOrEmpty(Configuration.AccessToken)) + { + headerParams["Authorization"] = "Bearer " + Configuration.AccessToken; + }{{/isOAuth}} break; {{/authMethods}} default: - //TODO show warning about security definition not found + //show warning about security definition not found break; } } @@ -335,11 +355,14 @@ namespace {{packageName}}.Client /// /// The accepts array to select from. /// The Accept header to use. - public String SelectHeaderAccept(String[] accepts) { + public String SelectHeaderAccept(String[] accepts) + { if (accepts.Length == 0) return null; + if (accepts.Contains("application/json", StringComparer.OrdinalIgnoreCase)) return "application/json"; + return String.Join(",", accepts); } @@ -350,8 +373,7 @@ namespace {{packageName}}.Client /// Encoded string. public static string Base64Encode(string text) { - var textByte = System.Text.Encoding.UTF8.GetBytes(text); - return System.Convert.ToBase64String(textByte); + return System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text)); } /// @@ -361,7 +383,8 @@ namespace {{packageName}}.Client /// Object to be casted /// Target type /// Casted object - public static dynamic ConvertType(dynamic source, Type dest) { + public static dynamic ConvertType(dynamic source, Type dest) + { return Convert.ChangeType(source, dest); } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs index 36217fde02d..a4f9276c882 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs @@ -198,10 +198,12 @@ namespace IO.Swagger.Client { if (obj is DateTime) return ((DateTime)obj).ToString ("u"); - else if (obj is IList) { + else if (obj is IList) + { string flattenString = ""; string separator = ","; - foreach (var param in (IList)obj) { + foreach (var param in (IList)obj) + { flattenString += param.ToString() + separator; } return flattenString.Remove(flattenString.Length - 1);; @@ -318,15 +320,24 @@ namespace IO.Swagger.Client { case "api_key": - headerParams["api_key"] = GetApiKeyWithPrefix("api_key"); + + var apiKeyValue = GetApiKeyWithPrefix("api_key"); + if (!String.IsNullOrEmpty(apiKeyValue)) + { + headerParams["api_key"] = apiKeyValue; + } break; case "petstore_auth": - headerParams["Authorization"] = "Bearer " + Configuration.AccessToken; + + if (!String.IsNullOrEmpty(Configuration.AccessToken)) + { + headerParams["Authorization"] = "Bearer " + Configuration.AccessToken; + } break; default: - //TODO show warning about security definition not found + //show warning about security definition not found break; } } @@ -339,11 +350,14 @@ namespace IO.Swagger.Client /// /// The accepts array to select from. /// The Accept header to use. - public String SelectHeaderAccept(String[] accepts) { + public String SelectHeaderAccept(String[] accepts) + { if (accepts.Length == 0) return null; + if (accepts.Contains("application/json", StringComparer.OrdinalIgnoreCase)) return "application/json"; + return String.Join(",", accepts); } @@ -354,8 +368,7 @@ namespace IO.Swagger.Client /// Encoded string. public static string Base64Encode(string text) { - var textByte = System.Text.Encoding.UTF8.GetBytes(text); - return System.Convert.ToBase64String(textByte); + return System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text)); } /// @@ -365,7 +378,8 @@ namespace IO.Swagger.Client /// Object to be casted /// Target type /// Casted object - public static dynamic ConvertType(dynamic source, Type dest) { + public static dynamic ConvertType(dynamic source, Type dest) + { return Convert.ChangeType(source, dest); } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.csproj.FilesWrittenAbsolute.txt b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.csproj.FilesWrittenAbsolute.txt index b46eed9f9d6..6b370d8d490 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.csproj.FilesWrittenAbsolute.txt +++ b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.csproj.FilesWrittenAbsolute.txt @@ -1,6 +1,12 @@ +/Users/williamcheng/Code/csharp/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/.NETFramework,Version=v4.5.AssemblyAttribute.cs +/Users/williamcheng/Code/csharp/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb +/Users/williamcheng/Code/csharp/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll +/Users/williamcheng/Code/csharp/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll +/Users/williamcheng/Code/csharp/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb +/Users/williamcheng/Code/csharp/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/Newtonsoft.Json.dll +/Users/williamcheng/Code/csharp/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/nunit.framework.dll +/Users/williamcheng/Code/csharp/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/RestSharp.dll /Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/.NETFramework,Version=v4.5.AssemblyAttribute.cs -/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb -/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll /Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll /Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll.mdb /Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/Newtonsoft.Json.dll From 9d76d39c006554ca8150fbd8c5e26c6e11108b5a Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 20 Nov 2015 16:15:19 +0800 Subject: [PATCH 10/18] update basic auth to allow only username/password --- .../src/main/resources/csharp/ApiClient.mustache | 2 +- .../csharp/SwaggerClientTest/SwaggerClientTest.userprefs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index 8af5250c471..bac6fd02a69 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -331,7 +331,7 @@ namespace {{packageName}}.Client { queryParams["{{keyParamName}}"] = apiKeyValue; }{{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}} - if (!String.IsNullOrEmpty(Configuration.Username) && !String.IsNullOrEmpty(Configuration.Password)) + if (!String.IsNullOrEmpty(Configuration.Username) || !String.IsNullOrEmpty(Configuration.Password)) { headerParams["Authorization"] = "Basic " + Base64Encode(Configuration.Username + ":" + Configuration.Password); }{{/isBasic}}{{#isOAuth}} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs index 05585bff932..5f6ec1cf979 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs +++ b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs @@ -2,7 +2,7 @@ - + @@ -26,4 +26,4 @@ - \ No newline at end of file + From 11daa87e44a7b492b086555d6924c0e2d57da51c Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 22 Nov 2015 16:14:16 +0800 Subject: [PATCH 11/18] add documentation to test cases in C# --- .../SwaggerClientTest.userprefs | 21 ++---------------- .../csharp/SwaggerClientTest/TestPet.cs | 20 +++++++++++++++-- .../bin/Debug/SwaggerClientTest.dll | Bin 67584 -> 67584 bytes .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 21107 -> 21137 bytes ...ClientTest.csproj.FilesWrittenAbsolute.txt | 2 ++ .../obj/Debug/SwaggerClientTest.dll | Bin 67584 -> 67584 bytes .../obj/Debug/SwaggerClientTest.dll.mdb | Bin 21107 -> 21137 bytes 7 files changed, 22 insertions(+), 21 deletions(-) diff --git a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs index 5f6ec1cf979..0a2248522b9 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs +++ b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs @@ -2,28 +2,11 @@ - + - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs index 0227a2d9113..19a14c592f4 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs @@ -49,7 +49,9 @@ namespace SwaggerClient.TestPet petApi.DeletePet(petId, "test key"); } - + /// + /// Test GetPetByIdAsync + /// [Test ()] public void TestGetPetByIdAsync () { @@ -74,6 +76,9 @@ namespace SwaggerClient.TestPet } + /// + /// Test GetPetById + /// [Test ()] public void TestGetPetById () { @@ -97,6 +102,9 @@ namespace SwaggerClient.TestPet } + /// + /// Test UpdatePetWithForm + /// [Test ()] public void TestUpdatePetWithForm () { @@ -115,6 +123,9 @@ namespace SwaggerClient.TestPet Assert.AreEqual (56, response.Category.Id); } + /// + /// Test UploadFile + /// [Test ()] public void TestUploadFile () { @@ -129,7 +140,9 @@ namespace SwaggerClient.TestPet } - + /// + /// Test FindPetByStatus + /// [Test ()] public void TestFindPetByStatus () { @@ -145,6 +158,9 @@ namespace SwaggerClient.TestPet } + /// + /// Test Equal + /// [Test ()] public void TestEqual() { diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index 924934c46233779ca4dd6c58049f0518ece993b2..cb328f9bb0767ff59711234a803eedb72bf52baf 100755 GIT binary patch delta 2800 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 Date: Sun, 22 Nov 2015 16:27:14 +0800 Subject: [PATCH 12/18] Use separate library to do base64 encoding in Java default and jersey2 clients to make it work in both JVM and Android --- .../src/main/resources/Java/auth/HttpBasicAuth.mustache | 5 +++-- .../src/main/resources/Java/libraries/jersey2/pom.mustache | 7 +++++++ .../swagger-codegen/src/main/resources/Java/pom.mustache | 7 +++++++ samples/client/petstore/java/default/pom.xml | 7 +++++++ .../main/java/io/swagger/client/auth/HttpBasicAuth.java | 7 ++++--- samples/client/petstore/java/jersey2/pom.xml | 7 +++++++ .../main/java/io/swagger/client/auth/HttpBasicAuth.java | 7 ++++--- 7 files changed, 39 insertions(+), 8 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache index 509f4742b61..febabe33d64 100644 --- a/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache @@ -2,11 +2,12 @@ package {{invokerPackage}}.auth; import {{invokerPackage}}.Pair; +import com.migcomponents.migbase64.Base64; + import java.util.Map; import java.util.List; import java.io.UnsupportedEncodingException; -import javax.xml.bind.DatatypeConverter; {{>generatedAnnotation}} public class HttpBasicAuth implements Authentication { @@ -36,7 +37,7 @@ public class HttpBasicAuth implements Authentication { } String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); try { - headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary(str.getBytes("UTF-8"))); + headerParams.put("Authorization", "Basic " + Base64.encodeToString(str.getBytes("UTF-8"), false)); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/pom.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/pom.mustache index c8d2145bc6e..dbe0138aa54 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/pom.mustache @@ -152,6 +152,13 @@ ${jodatime-version} + + + com.brsanthu + migbase64 + 2.2 + + junit diff --git a/modules/swagger-codegen/src/main/resources/Java/pom.mustache b/modules/swagger-codegen/src/main/resources/Java/pom.mustache index 3f4d9d9a55b..c5bfbc65b74 100644 --- a/modules/swagger-codegen/src/main/resources/Java/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/pom.mustache @@ -148,6 +148,13 @@ ${jodatime-version} + + + com.brsanthu + migbase64 + 2.2 + + junit diff --git a/samples/client/petstore/java/default/pom.xml b/samples/client/petstore/java/default/pom.xml index 894e318b5f3..8a939b9dc34 100644 --- a/samples/client/petstore/java/default/pom.xml +++ b/samples/client/petstore/java/default/pom.xml @@ -148,6 +148,13 @@ ${jodatime-version} + + + com.brsanthu + migbase64 + 2.2 + + junit diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index 074f1833542..8c2aa444678 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -2,13 +2,14 @@ package io.swagger.client.auth; import io.swagger.client.Pair; +import com.migcomponents.migbase64.Base64; + import java.util.Map; import java.util.List; import java.io.UnsupportedEncodingException; -import javax.xml.bind.DatatypeConverter; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-20T17:28:23.285+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-22T13:15:32.345+08:00") public class HttpBasicAuth implements Authentication { private String username; private String password; @@ -36,7 +37,7 @@ public class HttpBasicAuth implements Authentication { } String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); try { - headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary(str.getBytes("UTF-8"))); + headerParams.put("Authorization", "Basic " + Base64.encodeToString(str.getBytes("UTF-8"), false)); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } diff --git a/samples/client/petstore/java/jersey2/pom.xml b/samples/client/petstore/java/jersey2/pom.xml index e5353a66ea5..0881cc29374 100644 --- a/samples/client/petstore/java/jersey2/pom.xml +++ b/samples/client/petstore/java/jersey2/pom.xml @@ -152,6 +152,13 @@ ${jodatime-version} + + + com.brsanthu + migbase64 + 2.2 + + junit diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index 0abfc056e1d..071139d656a 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -2,13 +2,14 @@ package io.swagger.client.auth; import io.swagger.client.Pair; +import com.migcomponents.migbase64.Base64; + import java.util.Map; import java.util.List; import java.io.UnsupportedEncodingException; -import javax.xml.bind.DatatypeConverter; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-20T17:28:47.318+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-22T13:15:27.225+08:00") public class HttpBasicAuth implements Authentication { private String username; private String password; @@ -36,7 +37,7 @@ public class HttpBasicAuth implements Authentication { } String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); try { - headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary(str.getBytes("UTF-8"))); + headerParams.put("Authorization", "Basic " + Base64.encodeToString(str.getBytes("UTF-8"), false)); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } From e11a3d468e59749101e6cb0df71217869a40448d Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 22 Nov 2015 18:35:45 +0800 Subject: [PATCH 13/18] update auth for php to skip empty apikey/username,password --- .../src/main/resources/php/api.mustache | 12 +++-- .../php/SwaggerClient-php/lib/Api/PetApi.php | 46 ++++++++++++------- .../SwaggerClient-php/lib/Api/StoreApi.php | 4 +- .../php/SwaggerClient-php/lib/ApiClient.php | 2 +- .../lib/ObjectSerializer.php | 2 +- 5 files changed, 43 insertions(+), 23 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/api.mustache b/modules/swagger-codegen/src/main/resources/php/api.mustache index e3a9749c423..53a81030813 100644 --- a/modules/swagger-codegen/src/main/resources/php/api.mustache +++ b/modules/swagger-codegen/src/main/resources/php/api.mustache @@ -166,12 +166,18 @@ use \{{invokerPackage}}\ObjectSerializer; $httpBody = $formParams; // for HTTP post (form) } {{#authMethods}}{{#isApiKey}} + // this endpoint requires API key authentication $apiKey = $this->apiClient->getApiKeyWithPrefix('{{keyParamName}}'); - if (isset($apiKey)) { + if ($apiKey !== null) { {{#isKeyInHeader}}$headerParams['{{keyParamName}}'] = $apiKey;{{/isKeyInHeader}}{{#isKeyInQuery}}$queryParams['{{keyParamName}}'] = $apiKey;{{/isKeyInQuery}} }{{/isApiKey}} - {{#isBasic}}$headerParams['Authorization'] = 'Basic ' . base64_encode($this->apiClient->getConfig()->getUsername() . ":" . $this->apiClient->getConfig()->getPassword());{{/isBasic}} - {{#isOAuth}}$headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken();{{/isOAuth}} + {{#isBasic}}// this endpoint requires HTTP basic authentication + if ($this->apiClient->getConfig()->getUsername() !== null or $this->apiClient->getConfig()->getPassword() !== null) { + $headerParams['Authorization'] = 'Basic ' . base64_encode($this->apiClient->getConfig()->getUsername() . ":" . $this->apiClient->getConfig()->getPassword()); + }{{/isBasic}}{{#isOAuth}}// this endpoint requires OAuth (access token) + if ($this->apiClient->getConfig()->getAccessToken() !== null) { + $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + }{{/isOAuth}} {{/authMethods}} // make the API Call try diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php index a418ac90b43..bc03a7974d3 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php @@ -135,8 +135,10 @@ class PetApi $httpBody = $formParams; // for HTTP post (form) } - - $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + // this endpoint requires OAuth (access token) + if ($this->apiClient->getConfig()->getAccessToken() !== null) { + $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + } // make the API Call try @@ -200,8 +202,10 @@ class PetApi $httpBody = $formParams; // for HTTP post (form) } - - $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + // this endpoint requires OAuth (access token) + if ($this->apiClient->getConfig()->getAccessToken() !== null) { + $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + } // make the API Call try @@ -264,8 +268,10 @@ class PetApi $httpBody = $formParams; // for HTTP post (form) } - - $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + // this endpoint requires OAuth (access token) + if ($this->apiClient->getConfig()->getAccessToken() !== null) { + $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + } // make the API Call try @@ -340,8 +346,10 @@ class PetApi $httpBody = $formParams; // for HTTP post (form) } - - $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + // this endpoint requires OAuth (access token) + if ($this->apiClient->getConfig()->getAccessToken() !== null) { + $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + } // make the API Call try @@ -424,13 +432,13 @@ class PetApi $httpBody = $formParams; // for HTTP post (form) } + // this endpoint requires API key authentication $apiKey = $this->apiClient->getApiKeyWithPrefix('api_key'); - if (isset($apiKey)) { + if ($apiKey !== null) { $headerParams['api_key'] = $apiKey; } - // make the API Call try { @@ -526,8 +534,10 @@ class PetApi $httpBody = $formParams; // for HTTP post (form) } - - $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + // this endpoint requires OAuth (access token) + if ($this->apiClient->getConfig()->getAccessToken() !== null) { + $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + } // make the API Call try @@ -602,8 +612,10 @@ class PetApi $httpBody = $formParams; // for HTTP post (form) } - - $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + // this endpoint requires OAuth (access token) + if ($this->apiClient->getConfig()->getAccessToken() !== null) { + $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + } // make the API Call try @@ -694,8 +706,10 @@ class PetApi $httpBody = $formParams; // for HTTP post (form) } - - $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + // this endpoint requires OAuth (access token) + if ($this->apiClient->getConfig()->getAccessToken() !== null) { + $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + } // make the API Call try diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php index b64b52d2225..d709330b056 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php @@ -130,13 +130,13 @@ class StoreApi $httpBody = $formParams; // for HTTP post (form) } + // this endpoint requires API key authentication $apiKey = $this->apiClient->getApiKeyWithPrefix('api_key'); - if (isset($apiKey)) { + if ($apiKey !== null) { $headerParams['api_key'] = $apiKey; } - // make the API Call try { diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php b/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php index 982b8955a15..a0bb07273e4 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php @@ -69,7 +69,7 @@ class ApiClient * Constructor of the class * @param Configuration $config config for this ApiClient */ - function __construct(Configuration $config = null) + public function __construct(Configuration $config = null) { if ($config == null) { $config = Configuration::getDefaultConfiguration(); diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php index efdc1c896ab..0d281b9d1fa 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php @@ -193,7 +193,7 @@ class ObjectSerializer $deserialized = $values; } elseif ($class === '\DateTime') { $deserialized = new \DateTime($data); - } elseif (in_array($class, array('void', 'bool', 'string', 'double', 'byte', 'mixed', 'integer', 'float', 'int', 'DateTime', 'number', 'boolean', 'object'))) { + } elseif (in_array($class, array('integer', 'int', 'void', 'number', 'object', 'double', 'float', 'byte', 'DateTime', 'string', 'mixed', 'boolean', 'bool'))) { settype($data, $class); $deserialized = $data; } elseif ($class === '\SplFileObject') { From 2e51aa5076c0c4be8d1697c5d23e5988e06e0100 Mon Sep 17 00:00:00 2001 From: xhh Date: Mon, 23 Nov 2015 15:57:14 +0800 Subject: [PATCH 14/18] Add "equals" and "hashCode" methods to Java clients Added for the default, "jersey2" and "okhttp-gson" clients --- .../Java/libraries/okhttp-gson/model.mustache | 16 +++++++++++++ .../src/main/resources/Java/model.mustache | 16 +++++++++++++ .../io/swagger/client/model/Category.java | 17 +++++++++++++- .../java/io/swagger/client/model/Order.java | 21 ++++++++++++++++- .../java/io/swagger/client/model/Pet.java | 23 +++++++++++++++++-- .../java/io/swagger/client/model/Tag.java | 17 +++++++++++++- .../java/io/swagger/client/model/User.java | 23 ++++++++++++++++++- .../io/swagger/petstore/test/PetApiTest.java | 21 +++++++++++++++++ .../io/swagger/client/model/Category.java | 17 +++++++++++++- .../java/io/swagger/client/model/Order.java | 21 ++++++++++++++++- .../java/io/swagger/client/model/Pet.java | 21 ++++++++++++++++- .../java/io/swagger/client/model/Tag.java | 17 +++++++++++++- .../java/io/swagger/client/model/User.java | 23 ++++++++++++++++++- .../io/swagger/petstore/test/PetApiTest.java | 21 +++++++++++++++++ .../io/swagger/client/model/Category.java | 15 ++++++++++++ .../java/io/swagger/client/model/Order.java | 19 +++++++++++++++ .../java/io/swagger/client/model/Pet.java | 21 ++++++++++++++++- .../java/io/swagger/client/model/Tag.java | 15 ++++++++++++ .../java/io/swagger/client/model/User.java | 21 +++++++++++++++++ .../io/swagger/petstore/test/PetApiTest.java | 21 +++++++++++++++++ 20 files changed, 374 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache index 0987aa68f34..677b29762c3 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache @@ -8,6 +8,7 @@ import com.google.gson.annotations.SerializedName; {{#serializableModel}} import java.io.Serializable;{{/serializableModel}} +import java.util.Objects; import io.swagger.annotations.*; @@ -44,6 +45,21 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali {{/vars}} + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + {{classname}} {{classVarName}} = ({{classname}}) o;{{#hasVars}} + return {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} && + {{/hasMore}}{{^hasMore}};{{/hasMore}}{{/vars}}{{/hasVars}}{{^hasVars}} + return true;{{/hasVars}} + } + + @Override + public int hashCode() { + return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/modules/swagger-codegen/src/main/resources/Java/model.mustache b/modules/swagger-codegen/src/main/resources/Java/model.mustache index f5e48ba997f..a6973c649f7 100644 --- a/modules/swagger-codegen/src/main/resources/Java/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/model.mustache @@ -6,6 +6,7 @@ import {{invokerPackage}}.StringUtil; {{#serializableModel}} import java.io.Serializable;{{/serializableModel}} +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @@ -42,6 +43,21 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali {{/vars}} + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + {{classname}} {{classVarName}} = ({{classname}}) o;{{#hasVars}} + return {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} && + {{/hasMore}}{{^hasMore}};{{/hasMore}}{{/vars}}{{/hasVars}}{{^hasVars}} + return true;{{/hasVars}} + } + + @Override + public int hashCode() { + return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java index 1d1d9e1d1b5..1eaf71f9f71 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java @@ -3,13 +3,14 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-30T16:36:47.681+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:47:53.879+08:00") public class Category { private Long id = null; @@ -41,6 +42,20 @@ public class Category { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Category category = (Category) o; + return Objects.equals(id, category.id) && + Objects.equals(name, category.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java index 9c6094aefbf..4ef600ccf55 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java @@ -4,13 +4,14 @@ import io.swagger.client.StringUtil; import java.util.Date; +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-30T16:36:47.681+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:47:53.879+08:00") public class Order { private Long id = null; @@ -113,6 +114,24 @@ public enum StatusEnum { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Order order = (Order) o; + return Objects.equals(id, order.id) && + Objects.equals(petId, order.petId) && + Objects.equals(quantity, order.quantity) && + Objects.equals(shipDate, order.shipDate) && + Objects.equals(status, order.status) && + Objects.equals(complete, order.complete); + } + + @Override + public int hashCode() { + return Objects.hash(id, petId, quantity, shipDate, status, complete); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java index b842a7800de..c5101f0f7ec 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java @@ -2,17 +2,18 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; import io.swagger.client.model.Category; -import io.swagger.client.model.Tag; import java.util.*; +import io.swagger.client.model.Tag; +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-30T16:36:47.681+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:47:53.879+08:00") public class Pet { private Long id = null; @@ -115,6 +116,24 @@ public enum StatusEnum { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Pet pet = (Pet) o; + return Objects.equals(id, pet.id) && + Objects.equals(category, pet.category) && + Objects.equals(name, pet.name) && + Objects.equals(photoUrls, pet.photoUrls) && + Objects.equals(tags, pet.tags) && + Objects.equals(status, pet.status); + } + + @Override + public int hashCode() { + return Objects.hash(id, category, name, photoUrls, tags, status); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java index d52ef12d01c..be612525c65 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java @@ -3,13 +3,14 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-30T16:36:47.681+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:47:53.879+08:00") public class Tag { private Long id = null; @@ -41,6 +42,20 @@ public class Tag { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Tag tag = (Tag) o; + return Objects.equals(id, tag.id) && + Objects.equals(name, tag.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java index 8aa9e34283f..73e2686efb0 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java @@ -3,13 +3,14 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-10-30T16:36:47.681+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:47:53.879+08:00") public class User { private Long id = null; @@ -120,6 +121,26 @@ public class User { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + User user = (User) o; + return Objects.equals(id, user.id) && + Objects.equals(username, user.username) && + Objects.equals(firstName, user.firstName) && + Objects.equals(lastName, user.lastName) && + Objects.equals(email, user.email) && + Objects.equals(password, user.password) && + Objects.equals(phone, user.phone) && + Objects.equals(userStatus, user.userStatus); + } + + @Override + public int hashCode() { + return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java index 0a8f8a1665d..0dd8b310df9 100644 --- a/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -174,6 +174,27 @@ public class PetApiTest { api.uploadFile(pet.getId(), "a test file", new File(file.getAbsolutePath())); } + @Test + public void testEqualsAndHashCode() { + Pet pet1 = new Pet(); + Pet pet2 = new Pet(); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + + pet2.setName("really-happy"); + pet2.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertFalse(pet1.equals(pet2)); + assertFalse(pet1.equals(pet2)); + assertFalse(pet1.hashCode() == (pet2.hashCode())); + + pet1.setName("really-happy"); + pet1.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + } + private Pet createRandomPet() { Pet pet = new Pet(); pet.setId(System.currentTimeMillis()); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java index 26e1b89bba7..46ecec0daf5 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java @@ -3,13 +3,14 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-17T11:17:50.535-05:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:52:25.446+08:00") public class Category { private Long id = null; @@ -41,6 +42,20 @@ public class Category { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Category category = (Category) o; + return Objects.equals(id, category.id) && + Objects.equals(name, category.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java index 6efc0786703..9570fe22827 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java @@ -4,13 +4,14 @@ import io.swagger.client.StringUtil; import java.util.Date; +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-17T11:17:50.535-05:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:52:25.446+08:00") public class Order { private Long id = null; @@ -113,6 +114,24 @@ public enum StatusEnum { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Order order = (Order) o; + return Objects.equals(id, order.id) && + Objects.equals(petId, order.petId) && + Objects.equals(quantity, order.quantity) && + Objects.equals(shipDate, order.shipDate) && + Objects.equals(status, order.status) && + Objects.equals(complete, order.complete); + } + + @Override + public int hashCode() { + return Objects.hash(id, petId, quantity, shipDate, status, complete); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java index 02f0b88d6f5..a066ee8b251 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java @@ -6,13 +6,14 @@ import java.util.*; import io.swagger.client.model.Tag; +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-17T11:17:50.535-05:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:52:25.446+08:00") public class Pet { private Long id = null; @@ -115,6 +116,24 @@ public enum StatusEnum { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Pet pet = (Pet) o; + return Objects.equals(id, pet.id) && + Objects.equals(category, pet.category) && + Objects.equals(name, pet.name) && + Objects.equals(photoUrls, pet.photoUrls) && + Objects.equals(tags, pet.tags) && + Objects.equals(status, pet.status); + } + + @Override + public int hashCode() { + return Objects.hash(id, category, name, photoUrls, tags, status); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java index 9dc8e017f9f..2d64dbe4351 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java @@ -3,13 +3,14 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-17T11:17:50.535-05:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:52:25.446+08:00") public class Tag { private Long id = null; @@ -41,6 +42,20 @@ public class Tag { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Tag tag = (Tag) o; + return Objects.equals(id, tag.id) && + Objects.equals(name, tag.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java index 8ad399fcc6b..8712e66e386 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java @@ -3,13 +3,14 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; +import java.util.Objects; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-17T11:17:50.535-05:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:52:25.446+08:00") public class User { private Long id = null; @@ -120,6 +121,26 @@ public class User { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + User user = (User) o; + return Objects.equals(id, user.id) && + Objects.equals(username, user.username) && + Objects.equals(firstName, user.firstName) && + Objects.equals(lastName, user.lastName) && + Objects.equals(email, user.email) && + Objects.equals(password, user.password) && + Objects.equals(phone, user.phone) && + Objects.equals(userStatus, user.userStatus); + } + + @Override + public int hashCode() { + return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java index 0a8f8a1665d..0dd8b310df9 100644 --- a/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -174,6 +174,27 @@ public class PetApiTest { api.uploadFile(pet.getId(), "a test file", new File(file.getAbsolutePath())); } + @Test + public void testEqualsAndHashCode() { + Pet pet1 = new Pet(); + Pet pet2 = new Pet(); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + + pet2.setName("really-happy"); + pet2.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertFalse(pet1.equals(pet2)); + assertFalse(pet1.equals(pet2)); + assertFalse(pet1.hashCode() == (pet2.hashCode())); + + pet1.setName("really-happy"); + pet1.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + } + private Pet createRandomPet() { Pet pet = new Pet(); pet.setId(System.currentTimeMillis()); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java index 0a7023ac7a5..1edddf2d7ff 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java @@ -5,6 +5,7 @@ import io.swagger.client.StringUtil; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -44,6 +45,20 @@ public class Category { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Category category = (Category) o; + return Objects.equals(id, category.id) && + Objects.equals(name, category.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java index df8e77b6fb3..d6053ceb783 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java @@ -6,6 +6,7 @@ import java.util.Date; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -125,6 +126,24 @@ public enum StatusEnum { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Order order = (Order) o; + return Objects.equals(id, order.id) && + Objects.equals(petId, order.petId) && + Objects.equals(quantity, order.quantity) && + Objects.equals(shipDate, order.shipDate) && + Objects.equals(status, order.status) && + Objects.equals(complete, order.complete); + } + + @Override + public int hashCode() { + return Objects.hash(id, petId, quantity, shipDate, status, complete); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java index d1310e10ded..6cd9e1c7b77 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java @@ -2,12 +2,13 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; import io.swagger.client.model.Category; -import io.swagger.client.model.Tag; import java.util.*; +import io.swagger.client.model.Tag; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -127,6 +128,24 @@ public enum StatusEnum { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Pet pet = (Pet) o; + return Objects.equals(id, pet.id) && + Objects.equals(category, pet.category) && + Objects.equals(name, pet.name) && + Objects.equals(photoUrls, pet.photoUrls) && + Objects.equals(tags, pet.tags) && + Objects.equals(status, pet.status); + } + + @Override + public int hashCode() { + return Objects.hash(id, category, name, photoUrls, tags, status); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java index 9935b744f2d..d9240a03990 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java @@ -5,6 +5,7 @@ import io.swagger.client.StringUtil; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -44,6 +45,20 @@ public class Tag { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Tag tag = (Tag) o; + return Objects.equals(id, tag.id) && + Objects.equals(name, tag.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java index cba6abef8dd..9587082fd7d 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java @@ -5,6 +5,7 @@ import io.swagger.client.StringUtil; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -129,6 +130,26 @@ public class User { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + User user = (User) o; + return Objects.equals(id, user.id) && + Objects.equals(username, user.username) && + Objects.equals(firstName, user.firstName) && + Objects.equals(lastName, user.lastName) && + Objects.equals(email, user.email) && + Objects.equals(password, user.password) && + Objects.equals(phone, user.phone) && + Objects.equals(userStatus, user.userStatus); + } + + @Override + public int hashCode() { + return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java index c9586343025..c87defe6ae5 100644 --- a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -252,6 +252,27 @@ public class PetApiTest { api.uploadFile(pet.getId(), "a test file", new File(file.getAbsolutePath())); } + @Test + public void testEqualsAndHashCode() { + Pet pet1 = new Pet(); + Pet pet2 = new Pet(); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + + pet2.setName("really-happy"); + pet2.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertFalse(pet1.equals(pet2)); + assertFalse(pet1.equals(pet2)); + assertFalse(pet1.hashCode() == (pet2.hashCode())); + + pet1.setName("really-happy"); + pet1.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + } + private Pet createRandomPet() { Pet pet = new Pet(); pet.setId(System.currentTimeMillis()); From f2a8955926217bbabd64c7d76544bd2e5442b56c Mon Sep 17 00:00:00 2001 From: xhh Date: Mon, 23 Nov 2015 19:59:44 +0800 Subject: [PATCH 15/18] Add "equals" and "hashCode" methods to Java clients for the "retrofit" and "retrofit2" libraries --- .../Java/libraries/okhttp-gson/model.mustache | 8 ++++-- .../Java/libraries/retrofit/model.mustache | 20 +++++++++++++++ .../Java/libraries/retrofit2/model.mustache | 20 +++++++++++++++ .../src/main/resources/Java/model.mustache | 8 ++++-- .../io/swagger/client/model/Category.java | 10 +++++--- .../java/io/swagger/client/model/Order.java | 10 +++++--- .../java/io/swagger/client/model/Pet.java | 10 +++++--- .../java/io/swagger/client/model/Tag.java | 10 +++++--- .../java/io/swagger/client/model/User.java | 10 +++++--- .../io/swagger/client/model/Category.java | 8 ++++-- .../java/io/swagger/client/model/Order.java | 8 ++++-- .../java/io/swagger/client/model/Pet.java | 8 ++++-- .../java/io/swagger/client/model/Tag.java | 8 ++++-- .../java/io/swagger/client/model/User.java | 8 ++++-- .../io/swagger/client/model/Category.java | 19 ++++++++++++++ .../java/io/swagger/client/model/Order.java | 23 +++++++++++++++++ .../java/io/swagger/client/model/Pet.java | 25 ++++++++++++++++++- .../java/io/swagger/client/model/Tag.java | 19 ++++++++++++++ .../java/io/swagger/client/model/User.java | 25 +++++++++++++++++++ .../io/swagger/petstore/test/PetApiTest.java | 21 ++++++++++++++++ .../io/swagger/client/model/Category.java | 19 ++++++++++++++ .../java/io/swagger/client/model/Order.java | 23 +++++++++++++++++ .../java/io/swagger/client/model/Pet.java | 23 +++++++++++++++++ .../java/io/swagger/client/model/Tag.java | 19 ++++++++++++++ .../java/io/swagger/client/model/User.java | 25 +++++++++++++++++++ .../io/swagger/petstore/test/PetApiTest.java | 21 ++++++++++++++++ 26 files changed, 378 insertions(+), 30 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache index 677b29762c3..b7b4ea2cf3f 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache @@ -47,8 +47,12 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } {{classname}} {{classVarName}} = ({{classname}}) o;{{#hasVars}} return {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} && {{/hasMore}}{{^hasMore}};{{/hasMore}}{{/vars}}{{/hasVars}}{{^hasVars}} diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/model.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/model.mustache index 0987aa68f34..b7b4ea2cf3f 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/model.mustache @@ -8,6 +8,7 @@ import com.google.gson.annotations.SerializedName; {{#serializableModel}} import java.io.Serializable;{{/serializableModel}} +import java.util.Objects; import io.swagger.annotations.*; @@ -44,6 +45,25 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali {{/vars}} + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + {{classname}} {{classVarName}} = ({{classname}}) o;{{#hasVars}} + return {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} && + {{/hasMore}}{{^hasMore}};{{/hasMore}}{{/vars}}{{/hasVars}}{{^hasVars}} + return true;{{/hasVars}} + } + + @Override + public int hashCode() { + return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/model.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/model.mustache index 0987aa68f34..b7b4ea2cf3f 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/model.mustache @@ -8,6 +8,7 @@ import com.google.gson.annotations.SerializedName; {{#serializableModel}} import java.io.Serializable;{{/serializableModel}} +import java.util.Objects; import io.swagger.annotations.*; @@ -44,6 +45,25 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali {{/vars}} + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + {{classname}} {{classVarName}} = ({{classname}}) o;{{#hasVars}} + return {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} && + {{/hasMore}}{{^hasMore}};{{/hasMore}}{{/vars}}{{/hasVars}}{{^hasVars}} + return true;{{/hasVars}} + } + + @Override + public int hashCode() { + return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/modules/swagger-codegen/src/main/resources/Java/model.mustache b/modules/swagger-codegen/src/main/resources/Java/model.mustache index a6973c649f7..55aa77e30f0 100644 --- a/modules/swagger-codegen/src/main/resources/Java/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/model.mustache @@ -45,8 +45,12 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } {{classname}} {{classVarName}} = ({{classname}}) o;{{#hasVars}} return {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} && {{/hasMore}}{{^hasMore}};{{/hasMore}}{{/vars}}{{/hasVars}}{{^hasVars}} diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java index 1eaf71f9f71..07bd79cd8a3 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java @@ -10,7 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:47:53.879+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T19:53:03.542+08:00") public class Category { private Long id = null; @@ -44,8 +44,12 @@ public class Category { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Category category = (Category) o; return Objects.equals(id, category.id) && Objects.equals(name, category.name); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java index 4ef600ccf55..8cbcad11dc5 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java @@ -11,7 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:47:53.879+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T19:53:03.542+08:00") public class Order { private Long id = null; @@ -116,8 +116,12 @@ public enum StatusEnum { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Order order = (Order) o; return Objects.equals(id, order.id) && Objects.equals(petId, order.petId) && diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java index c5101f0f7ec..ec78248b840 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java @@ -13,7 +13,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:47:53.879+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T19:53:03.542+08:00") public class Pet { private Long id = null; @@ -118,8 +118,12 @@ public enum StatusEnum { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Pet pet = (Pet) o; return Objects.equals(id, pet.id) && Objects.equals(category, pet.category) && diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java index be612525c65..3c2278b5e4f 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java @@ -10,7 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:47:53.879+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T19:53:03.542+08:00") public class Tag { private Long id = null; @@ -44,8 +44,12 @@ public class Tag { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Tag tag = (Tag) o; return Objects.equals(id, tag.id) && Objects.equals(name, tag.name); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java index 73e2686efb0..ec20b37c378 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java @@ -10,7 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @ApiModel(description = "") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T15:47:53.879+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-11-23T19:53:03.542+08:00") public class User { private Long id = null; @@ -123,8 +123,12 @@ public class User { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } User user = (User) o; return Objects.equals(id, user.id) && Objects.equals(username, user.username) && diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java index 1edddf2d7ff..4f15da15c65 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java @@ -47,8 +47,12 @@ public class Category { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Category category = (Category) o; return Objects.equals(id, category.id) && Objects.equals(name, category.name); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java index d6053ceb783..18c51201ad4 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java @@ -128,8 +128,12 @@ public enum StatusEnum { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Order order = (Order) o; return Objects.equals(id, order.id) && Objects.equals(petId, order.petId) && diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java index 6cd9e1c7b77..7e771866b39 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java @@ -130,8 +130,12 @@ public enum StatusEnum { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Pet pet = (Pet) o; return Objects.equals(id, pet.id) && Objects.equals(category, pet.category) && diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java index d9240a03990..474904011f7 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java @@ -47,8 +47,12 @@ public class Tag { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Tag tag = (Tag) o; return Objects.equals(id, tag.id) && Objects.equals(name, tag.name); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java index 9587082fd7d..82f1a0822db 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java @@ -132,8 +132,12 @@ public class User { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } User user = (User) o; return Objects.equals(id, user.id) && Objects.equals(username, user.username) && diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Category.java index 0a7023ac7a5..4f15da15c65 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Category.java @@ -5,6 +5,7 @@ import io.swagger.client.StringUtil; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -44,6 +45,24 @@ public class Category { + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Category category = (Category) o; + return Objects.equals(id, category.id) && + Objects.equals(name, category.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Order.java index df8e77b6fb3..18c51201ad4 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Order.java @@ -6,6 +6,7 @@ import java.util.Date; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -125,6 +126,28 @@ public enum StatusEnum { + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Order order = (Order) o; + return Objects.equals(id, order.id) && + Objects.equals(petId, order.petId) && + Objects.equals(quantity, order.quantity) && + Objects.equals(shipDate, order.shipDate) && + Objects.equals(status, order.status) && + Objects.equals(complete, order.complete); + } + + @Override + public int hashCode() { + return Objects.hash(id, petId, quantity, shipDate, status, complete); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Pet.java index d1310e10ded..7e771866b39 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Pet.java @@ -2,12 +2,13 @@ package io.swagger.client.model; import io.swagger.client.StringUtil; import io.swagger.client.model.Category; -import io.swagger.client.model.Tag; import java.util.*; +import io.swagger.client.model.Tag; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -127,6 +128,28 @@ public enum StatusEnum { + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Pet pet = (Pet) o; + return Objects.equals(id, pet.id) && + Objects.equals(category, pet.category) && + Objects.equals(name, pet.name) && + Objects.equals(photoUrls, pet.photoUrls) && + Objects.equals(tags, pet.tags) && + Objects.equals(status, pet.status); + } + + @Override + public int hashCode() { + return Objects.hash(id, category, name, photoUrls, tags, status); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Tag.java index 9935b744f2d..474904011f7 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/Tag.java @@ -5,6 +5,7 @@ import io.swagger.client.StringUtil; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -44,6 +45,24 @@ public class Tag { + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Tag tag = (Tag) o; + return Objects.equals(id, tag.id) && + Objects.equals(name, tag.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/User.java index cba6abef8dd..82f1a0822db 100644 --- a/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/retrofit/src/main/java/io/swagger/client/model/User.java @@ -5,6 +5,7 @@ import io.swagger.client.StringUtil; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -129,6 +130,30 @@ public class User { + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + User user = (User) o; + return Objects.equals(id, user.id) && + Objects.equals(username, user.username) && + Objects.equals(firstName, user.firstName) && + Objects.equals(lastName, user.lastName) && + Objects.equals(email, user.email) && + Objects.equals(password, user.password) && + Objects.equals(phone, user.phone) && + Objects.equals(userStatus, user.userStatus); + } + + @Override + public int hashCode() { + return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/retrofit/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/retrofit/src/test/java/io/swagger/petstore/test/PetApiTest.java index ec93912b1f6..51d84c5cff4 100644 --- a/samples/client/petstore/java/retrofit/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/retrofit/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -143,6 +143,27 @@ public class PetApiTest { api.uploadFile(pet.getId(), "a test file", new TypedFile("text/plain", file)); } + @Test + public void testEqualsAndHashCode() { + Pet pet1 = new Pet(); + Pet pet2 = new Pet(); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + + pet2.setName("really-happy"); + pet2.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertFalse(pet1.equals(pet2)); + assertFalse(pet1.equals(pet2)); + assertFalse(pet1.hashCode() == (pet2.hashCode())); + + pet1.setName("really-happy"); + pet1.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + } + private Pet createRandomPet() { Pet pet = new Pet(); pet.setId(System.currentTimeMillis()); diff --git a/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Category.java index 0a7023ac7a5..4f15da15c65 100644 --- a/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Category.java @@ -5,6 +5,7 @@ import io.swagger.client.StringUtil; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -44,6 +45,24 @@ public class Category { + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Category category = (Category) o; + return Objects.equals(id, category.id) && + Objects.equals(name, category.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Order.java index df8e77b6fb3..18c51201ad4 100644 --- a/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Order.java @@ -6,6 +6,7 @@ import java.util.Date; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -125,6 +126,28 @@ public enum StatusEnum { + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Order order = (Order) o; + return Objects.equals(id, order.id) && + Objects.equals(petId, order.petId) && + Objects.equals(quantity, order.quantity) && + Objects.equals(shipDate, order.shipDate) && + Objects.equals(status, order.status) && + Objects.equals(complete, order.complete); + } + + @Override + public int hashCode() { + return Objects.hash(id, petId, quantity, shipDate, status, complete); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Pet.java index 9ab5457e26a..7e771866b39 100644 --- a/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Pet.java @@ -8,6 +8,7 @@ import io.swagger.client.model.Tag; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -127,6 +128,28 @@ public enum StatusEnum { + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Pet pet = (Pet) o; + return Objects.equals(id, pet.id) && + Objects.equals(category, pet.category) && + Objects.equals(name, pet.name) && + Objects.equals(photoUrls, pet.photoUrls) && + Objects.equals(tags, pet.tags) && + Objects.equals(status, pet.status); + } + + @Override + public int hashCode() { + return Objects.hash(id, category, name, photoUrls, tags, status); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Tag.java index 9935b744f2d..474904011f7 100644 --- a/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/Tag.java @@ -5,6 +5,7 @@ import io.swagger.client.StringUtil; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -44,6 +45,24 @@ public class Tag { + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Tag tag = (Tag) o; + return Objects.equals(id, tag.id) && + Objects.equals(name, tag.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/User.java index cba6abef8dd..82f1a0822db 100644 --- a/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/model/User.java @@ -5,6 +5,7 @@ import io.swagger.client.StringUtil; import com.google.gson.annotations.SerializedName; +import java.util.Objects; import io.swagger.annotations.*; @@ -129,6 +130,30 @@ public class User { + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + User user = (User) o; + return Objects.equals(id, user.id) && + Objects.equals(username, user.username) && + Objects.equals(firstName, user.firstName) && + Objects.equals(lastName, user.lastName) && + Objects.equals(email, user.email) && + Objects.equals(password, user.password) && + Objects.equals(phone, user.phone) && + Objects.equals(userStatus, user.userStatus); + } + + @Override + public int hashCode() { + return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/samples/client/petstore/java/retrofit2/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/retrofit2/src/test/java/io/swagger/petstore/test/PetApiTest.java index 8522c4f30ad..309914b434e 100644 --- a/samples/client/petstore/java/retrofit2/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/retrofit2/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -142,6 +142,27 @@ public class PetApiTest { api.uploadFile(pet.getId(), "a test file", RequestBody.create(MediaType.parse("text/plain"), file)).execute(); } + @Test + public void testEqualsAndHashCode() { + Pet pet1 = new Pet(); + Pet pet2 = new Pet(); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + + pet2.setName("really-happy"); + pet2.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertFalse(pet1.equals(pet2)); + assertFalse(pet1.equals(pet2)); + assertFalse(pet1.hashCode() == (pet2.hashCode())); + + pet1.setName("really-happy"); + pet1.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.equals(pet2)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + } + private Pet createRandomPet() { Pet pet = new Pet(); pet.setId(System.currentTimeMillis()); From bbb7fb5abc8cf1393e9561120dae0856d1795248 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 23 Nov 2015 14:27:22 -1000 Subject: [PATCH 16/18] updated readme, base path --- .../codegen/languages/JaxRSServerCodegen.java | 15 +++------------ .../src/main/resources/JavaJaxRS/README.mustache | 9 +++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java index 375f5d72bff..6bc1a392414 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java @@ -33,18 +33,6 @@ public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConf additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId); additionalProperties.put(CodegenConstants.ARTIFACT_VERSION, artifactVersion); additionalProperties.put("title", title); - - - languageSpecificPrimitives = new HashSet( - Arrays.asList( - "String", - "boolean", - "Boolean", - "Double", - "Integer", - "Long", - "Float") - ); } public CodegenType getTag() { @@ -109,6 +97,9 @@ public class JaxRSServerCodegen extends JavaClientCodegen implements CodegenConf @Override public void preprocessSwagger(Swagger swagger) { + if("/".equals(swagger.getBasePath())) { + swagger.setBasePath(""); + } if(swagger != null && swagger.getPaths() != null) { for(String pathname : swagger.getPaths().keySet()) { Path path = swagger.getPath(pathname); diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache index 00431f63dbc..f240464851d 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/README.mustache @@ -12,3 +12,12 @@ To run the server, please execute the following: ``` mvn clean package jetty:run ``` + +You can then view the swagger listing here: + +``` +http://localhost:8080{{contextPath}}/swagger.json +``` + +Note that if you have configured the `host` to be something other than localhost, the calls through +swagger-ui will be directed to that host and not localhost! \ No newline at end of file From b592819e3bbe4e121faeb35922f64dcec50a495b Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 24 Nov 2015 17:36:38 +0800 Subject: [PATCH 17/18] add eq for python, update test case --- .../src/main/resources/python/model.mustache | 13 +++++++ samples/client/petstore/python/.coverage | 2 +- .../petstore/python/dev-requirements.txt.log | 35 +++++++++++++++++++ .../python/swagger_client/models/category.py | 13 +++++++ .../python/swagger_client/models/order.py | 13 +++++++ .../python/swagger_client/models/pet.py | 13 +++++++ .../python/swagger_client/models/tag.py | 13 +++++++ .../python/swagger_client/models/user.py | 13 +++++++ .../petstore/python/tests/test_pet_model.py | 33 +++++++++++++++++ 9 files changed, 147 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/python/model.mustache b/modules/swagger-codegen/src/main/resources/python/model.mustache index 81e0b05849a..0dbe29add4f 100644 --- a/modules/swagger-codegen/src/main/resources/python/model.mustache +++ b/modules/swagger-codegen/src/main/resources/python/model.mustache @@ -113,5 +113,18 @@ class {{classname}}(object): For `print` and `pprint` """ return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other + {{/model}} {{/models}} diff --git a/samples/client/petstore/python/.coverage b/samples/client/petstore/python/.coverage index ddd00f77a03..98dd5627b87 100644 --- a/samples/client/petstore/python/.coverage +++ b/samples/client/petstore/python/.coverage @@ -1 +1 @@ -!coverage.py: This is a private format, don't read it directly!{"lines": {"/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/pet_api.py": [512, 513, 514, 516, 86, 18, 20, 22, 23, 26, 539, 28, 29, 542, 543, 32, 548, 37, 39, 40, 41, 42, 555, 556, 45, 558, 559, 560, 562, 564, 565, 566, 568, 569, 571, 574, 575, 576, 580, 581, 70, 584, 73, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 598, 88, 90, 92, 93, 95, 96, 97, 100, 101, 102, 106, 107, 621, 622, 624, 625, 626, 79, 116, 117, 118, 631, 632, 121, 122, 635, 124, 638, 639, 641, 642, 643, 645, 647, 649, 650, 651, 652, 653, 654, 656, 145, 146, 659, 148, 661, 150, 665, 666, 155, 156, 538, 159, 160, 673, 162, 675, 164, 677, 166, 679, 168, 169, 171, 172, 173, 541, 176, 177, 178, 115, 182, 183, 186, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 552, 200, 119, 120, 377, 221, 222, 549, 224, 225, 226, 231, 232, 431, 235, 236, 110, 238, 240, 241, 242, 244, 246, 247, 249, 383, 252, 253, 254, 258, 259, 262, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 46, 48, 297, 298, 300, 301, 302, 44, 307, 308, 311, 312, 314, 316, 317, 318, 320, 322, 323, 325, 113, 328, 329, 330, 334, 335, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 485, 352, 84, 114, 373, 374, 376, 660, 378, 149, 384, 387, 390, 391, 393, 394, 395, 397, 399, 401, 402, 404, 407, 408, 409, 413, 414, 69, 417, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 669, 72, 671, 74, 672, 83, 454, 455, 457, 458, 459, 674, 112, 464, 465, 468, 471, 472, 676, 474, 475, 476, 478, 480, 80, 482, 483, 484, 678, 486, 487, 489, 492, 493, 494, 680, 498, 499, 502, 681, 504, 505, 506, 507, 508, 509, 510, 511], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/user_api.py": [32, 355, 37, 39, 200, 124, 428, 589, 48, 18, 20, 22, 23, 276, 26, 507, 28, 29], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/api_client.py": [518, 525, 526, 527, 19, 21, 22, 23, 24, 537, 26, 27, 28, 29, 30, 31, 32, 33, 34, 547, 36, 37, 40, 42, 44, 558, 49, 52, 566, 568, 569, 570, 571, 572, 573, 575, 68, 69, 70, 75, 76, 77, 79, 80, 82, 84, 91, 96, 98, 102, 103, 104, 107, 108, 109, 111, 112, 115, 116, 117, 118, 119, 120, 123, 124, 125, 126, 129, 130, 131, 134, 137, 138, 141, 144, 145, 146, 147, 149, 152, 153, 155, 157, 158, 160, 162, 171, 172, 174, 176, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201, 202, 204, 205, 212, 213, 214, 216, 217, 219, 231, 235, 236, 240, 242, 251, 252, 254, 255, 256, 257, 258, 260, 261, 262, 263, 267, 268, 269, 272, 274, 275, 276, 278, 279, 280, 281, 283, 286, 287, 288, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 337, 338, 339, 340, 341, 345, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 369, 370, 371, 372, 379, 387, 389, 390, 392, 393, 394, 395, 548, 397, 398, 399, 400, 401, 402, 404, 406, 413, 414, 416, 418, 419, 421, 423, 430, 431, 433, 435, 436, 438, 440, 448, 450, 453, 454, 455, 456, 458, 459, 467, 546, 493, 502, 503, 508, 510], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/category.py": [72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/rest.py": [20, 21, 23, 24, 25, 26, 27, 28, 31, 33, 35, 36, 40, 42, 48, 51, 53, 54, 55, 56, 57, 59, 63, 65, 72, 74, 82, 83, 88, 92, 95, 98, 101, 102, 103, 104, 105, 106, 109, 110, 121, 122, 124, 129, 130, 132, 135, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 159, 160, 161, 166, 170, 171, 174, 176, 177, 179, 181, 182, 183, 184, 186, 191, 198, 199, 200, 201, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 225, 227, 228, 229, 230, 231, 232, 239, 243, 244, 245, 246, 248, 249, 251], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/__init__.py": [1, 4, 5, 6, 7, 8], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/store_api.py": [18, 276, 22, 23, 26, 28, 29, 197, 32, 37, 39, 40, 41, 44, 46, 48, 20, 68, 69, 71, 72, 79, 82, 83, 85, 87, 89, 91, 92, 94, 97, 98, 99, 103, 104, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/configuration.py": [135, 136, 137, 138, 139, 142, 19, 149, 22, 23, 25, 26, 27, 29, 158, 31, 32, 34, 36, 37, 39, 40, 41, 170, 43, 172, 46, 47, 189, 179, 52, 54, 59, 61, 190, 63, 192, 224, 67, 69, 71, 200, 73, 204, 80, 81, 82, 84, 213, 86, 199, 88, 90, 219, 92, 221, 222, 223, 96, 225, 98, 100, 102, 230, 104, 167, 111, 76, 168, 157, 122, 123, 42, 21], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/__init__.py": [1, 4, 5, 6, 7, 8, 11, 12, 13, 16, 18, 20], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/pet.py": [128, 130, 150, 172, 139, 141, 19, 215, 21, 22, 152, 25, 29, 30, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 48, 49, 50, 51, 52, 53, 54, 183, 57, 58, 59, 60, 61, 62, 64, 194, 195, 200, 73, 202, 75, 206, 208, 209, 210, 211, 84, 213, 86, 185, 216, 218, 220, 222, 95, 97, 226, 228, 106, 108, 117, 119, 212], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/user.py": [70, 136, 202, 272, 81, 147, 213, 22, 25, 92, 29, 158, 224, 103, 169, 235, 114, 19, 180, 30, 246, 266, 191, 125, 21], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/__init__.py": [1, 4, 5, 6], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/order.py": [130, 44, 141, 45, 19, 21, 22, 152, 25, 29, 30, 52, 161, 163, 39, 40, 41, 42, 43, 172, 173, 174, 175, 48, 49, 50, 51, 180, 53, 54, 57, 58, 59, 60, 61, 62, 191, 64, 202, 75, 86, 176, 222, 97, 228, 178, 108, 119], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/tag.py": [72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63]}} \ No newline at end of file +!coverage.py: This is a private format, don't read it directly!{"lines": {"/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/order.py": [130, 172, 141, 173, 19, 21, 22, 152, 25, 29, 30, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 175, 48, 49, 50, 51, 180, 53, 54, 52, 58, 59, 60, 61, 62, 191, 64, 202, 75, 86, 57, 176, 222, 97, 228, 178, 234, 108, 240, 119], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/tag.py": [128, 132, 134, 19, 21, 22, 25, 29, 30, 39, 40, 41, 44, 45, 46, 49, 50, 52, 61, 63, 72, 74, 83, 85, 94, 96, 100, 102, 103, 104, 109, 112, 114, 116, 122], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/__init__.py": [1, 4, 5, 6, 7, 8], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/__init__.py": [1, 4, 5, 6], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/pet.py": [128, 130, 150, 172, 139, 141, 19, 215, 21, 22, 152, 25, 29, 30, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 48, 49, 50, 51, 52, 53, 54, 183, 185, 58, 59, 60, 61, 62, 64, 194, 195, 200, 73, 202, 75, 206, 208, 209, 210, 211, 84, 213, 86, 57, 216, 218, 220, 222, 95, 97, 226, 228, 234, 108, 238, 240, 117, 119, 212, 106], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/configuration.py": [135, 136, 137, 138, 139, 142, 19, 149, 22, 23, 25, 26, 157, 158, 31, 32, 34, 36, 37, 39, 40, 41, 170, 43, 172, 46, 47, 189, 179, 52, 54, 59, 61, 190, 63, 192, 224, 67, 69, 71, 200, 73, 204, 80, 81, 82, 84, 213, 86, 199, 88, 90, 219, 92, 221, 222, 223, 96, 225, 98, 100, 102, 230, 104, 167, 111, 76, 168, 122, 123, 42, 21], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/store_api.py": [87, 18, 276, 22, 23, 26, 28, 29, 197, 32, 37, 39, 40, 41, 44, 46, 48, 68, 69, 71, 72, 79, 82, 83, 85, 121, 89, 91, 92, 94, 97, 98, 99, 103, 104, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 20], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/category.py": [128, 134, 19, 21, 22, 25, 29, 30, 39, 40, 41, 44, 45, 46, 49, 50, 52, 61, 63, 72, 74, 83, 85, 94, 96, 100, 102, 103, 104, 109, 112, 114, 116, 122], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/api_client.py": [518, 525, 526, 527, 19, 21, 22, 23, 24, 537, 26, 27, 28, 29, 30, 31, 32, 33, 34, 547, 36, 37, 40, 42, 44, 45, 558, 47, 49, 52, 566, 568, 569, 570, 571, 572, 573, 575, 68, 69, 70, 75, 76, 77, 79, 80, 82, 84, 91, 96, 98, 102, 103, 104, 107, 108, 109, 111, 112, 115, 116, 117, 118, 119, 120, 123, 124, 125, 126, 129, 130, 131, 134, 137, 138, 141, 144, 145, 146, 147, 149, 152, 153, 155, 157, 158, 160, 162, 171, 172, 174, 176, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 204, 205, 212, 213, 214, 216, 217, 219, 231, 235, 236, 240, 242, 251, 252, 254, 255, 256, 257, 258, 260, 261, 262, 263, 267, 268, 269, 272, 274, 275, 276, 278, 279, 280, 281, 283, 286, 287, 288, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 337, 338, 339, 340, 341, 345, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 369, 370, 371, 372, 379, 387, 389, 390, 392, 393, 394, 395, 548, 397, 398, 399, 400, 401, 402, 404, 406, 413, 414, 416, 418, 419, 421, 423, 430, 431, 433, 435, 436, 438, 440, 448, 450, 453, 454, 455, 456, 458, 459, 467, 546, 493, 502, 503, 508, 510], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/pet_api.py": [512, 513, 514, 516, 86, 18, 20, 22, 23, 26, 539, 28, 29, 542, 543, 32, 548, 37, 39, 40, 41, 42, 555, 556, 45, 558, 559, 48, 562, 564, 565, 566, 568, 569, 345, 571, 574, 575, 576, 580, 581, 70, 584, 73, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 598, 88, 90, 92, 93, 95, 96, 97, 100, 101, 102, 106, 107, 621, 622, 624, 625, 626, 79, 116, 117, 118, 631, 632, 121, 122, 635, 124, 638, 639, 641, 642, 643, 645, 647, 649, 650, 651, 652, 653, 654, 656, 145, 146, 659, 660, 149, 150, 665, 666, 155, 156, 669, 671, 160, 673, 162, 675, 164, 677, 166, 679, 168, 169, 171, 172, 173, 541, 176, 177, 178, 115, 182, 183, 186, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 200, 119, 120, 377, 221, 222, 549, 224, 225, 226, 231, 232, 235, 236, 110, 238, 240, 552, 242, 244, 246, 247, 249, 383, 252, 253, 254, 258, 259, 262, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 46, 560, 538, 297, 298, 300, 301, 302, 44, 307, 308, 311, 312, 314, 316, 317, 318, 320, 322, 323, 325, 113, 328, 329, 330, 334, 335, 338, 340, 341, 342, 343, 344, 241, 346, 347, 348, 349, 350, 485, 352, 84, 114, 373, 374, 376, 148, 378, 661, 384, 387, 390, 391, 393, 394, 395, 397, 399, 401, 402, 404, 407, 408, 409, 413, 414, 69, 417, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 431, 72, 159, 74, 672, 83, 454, 455, 457, 458, 459, 674, 112, 464, 465, 468, 471, 472, 676, 474, 475, 476, 478, 480, 80, 482, 483, 484, 678, 486, 487, 489, 492, 493, 494, 680, 498, 499, 502, 681, 504, 505, 506, 507, 508, 509, 510, 511], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/apis/user_api.py": [32, 355, 37, 39, 200, 124, 428, 589, 48, 18, 20, 22, 23, 276, 26, 507, 28, 29], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/models/user.py": [278, 136, 266, 272, 147, 21, 22, 25, 284, 29, 158, 169, 180, 30, 191, 70, 202, 81, 213, 92, 224, 103, 235, 114, 19, 246, 125], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/__init__.py": [1, 4, 5, 6, 7, 8, 11, 12, 13, 16, 18, 20], "/Users/williamcheng/Code/wing328/swagger-codegen/samples/client/petstore/python/swagger_client/rest.py": [20, 21, 23, 24, 25, 26, 27, 28, 31, 33, 35, 36, 40, 42, 43, 45, 48, 51, 53, 54, 55, 56, 57, 59, 63, 65, 72, 74, 82, 83, 88, 92, 95, 98, 101, 102, 103, 104, 105, 106, 109, 110, 121, 122, 124, 129, 130, 132, 135, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 159, 160, 161, 166, 170, 174, 176, 177, 179, 181, 182, 183, 184, 186, 191, 198, 199, 200, 201, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 225, 227, 228, 229, 230, 231, 232, 239, 243, 244, 245, 246, 248, 249, 251]}} \ No newline at end of file diff --git a/samples/client/petstore/python/dev-requirements.txt.log b/samples/client/petstore/python/dev-requirements.txt.log index 316a9394b50..382d1cf081d 100644 --- a/samples/client/petstore/python/dev-requirements.txt.log +++ b/samples/client/petstore/python/dev-requirements.txt.log @@ -34,3 +34,38 @@ Requirement already satisfied (use --upgrade to upgrade): randomize in ./venv/li Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): nose in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 1)) +Requirement already satisfied (use --upgrade to upgrade): tox in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): coverage in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 3)) +Requirement already satisfied (use --upgrade to upgrade): randomize in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 4)) +Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): nose in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 1)) +Requirement already satisfied (use --upgrade to upgrade): tox in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): coverage in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 3)) +Requirement already satisfied (use --upgrade to upgrade): randomize in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 4)) +Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): nose in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 1)) +Requirement already satisfied (use --upgrade to upgrade): tox in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): coverage in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 3)) +Requirement already satisfied (use --upgrade to upgrade): randomize in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 4)) +Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): nose in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 1)) +Requirement already satisfied (use --upgrade to upgrade): tox in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): coverage in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 3)) +Requirement already satisfied (use --upgrade to upgrade): randomize in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 4)) +Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): nose in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 1)) +Requirement already satisfied (use --upgrade to upgrade): tox in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): coverage in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 3)) +Requirement already satisfied (use --upgrade to upgrade): randomize in ./venv/lib/python2.7/site-packages (from -r dev-requirements.txt (line 4)) +Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in ./venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) diff --git a/samples/client/petstore/python/swagger_client/models/category.py b/samples/client/petstore/python/swagger_client/models/category.py index 06ad3b8421f..7c36ea3ec47 100644 --- a/samples/client/petstore/python/swagger_client/models/category.py +++ b/samples/client/petstore/python/swagger_client/models/category.py @@ -124,3 +124,16 @@ class Category(object): For `print` and `pprint` """ return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other + diff --git a/samples/client/petstore/python/swagger_client/models/order.py b/samples/client/petstore/python/swagger_client/models/order.py index 40e4504de87..39081233b11 100644 --- a/samples/client/petstore/python/swagger_client/models/order.py +++ b/samples/client/petstore/python/swagger_client/models/order.py @@ -230,3 +230,16 @@ class Order(object): For `print` and `pprint` """ return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other + diff --git a/samples/client/petstore/python/swagger_client/models/pet.py b/samples/client/petstore/python/swagger_client/models/pet.py index d8700908eb7..eafb352f2d0 100644 --- a/samples/client/petstore/python/swagger_client/models/pet.py +++ b/samples/client/petstore/python/swagger_client/models/pet.py @@ -230,3 +230,16 @@ class Pet(object): For `print` and `pprint` """ return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other + diff --git a/samples/client/petstore/python/swagger_client/models/tag.py b/samples/client/petstore/python/swagger_client/models/tag.py index 262fc10f338..2041940dadf 100644 --- a/samples/client/petstore/python/swagger_client/models/tag.py +++ b/samples/client/petstore/python/swagger_client/models/tag.py @@ -124,3 +124,16 @@ class Tag(object): For `print` and `pprint` """ return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other + diff --git a/samples/client/petstore/python/swagger_client/models/user.py b/samples/client/petstore/python/swagger_client/models/user.py index 7f74d20f3d3..a3ad99fa4c5 100644 --- a/samples/client/petstore/python/swagger_client/models/user.py +++ b/samples/client/petstore/python/swagger_client/models/user.py @@ -274,3 +274,16 @@ class User(object): For `print` and `pprint` """ return self.to_str() + + def __eq__(self, other): + """ + Returns true if both objects are equal + """ + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """ + Returns true if both objects are not equal + """ + return not self == other + diff --git a/samples/client/petstore/python/tests/test_pet_model.py b/samples/client/petstore/python/tests/test_pet_model.py index 0b0df18a8d0..d2bd3c9ca3d 100644 --- a/samples/client/petstore/python/tests/test_pet_model.py +++ b/samples/client/petstore/python/tests/test_pet_model.py @@ -38,3 +38,36 @@ class PetModelTests(unittest.TestCase): " 'status': 'available',\n" " 'tags': [{'id': 1, 'name': None}]}") self.assertEqual(data, self.pet.to_str()) + + def test_equal(self): + self.pet1 = swagger_client.Pet() + self.pet1.name = "test name" + self.pet1.id = 1 + self.pet1.photo_urls = ["string"] + self.pet1.status = "available" + cate1 = swagger_client.Category() + cate1.id = 1 + cate1.name = "dog" + self.pet.category = cate1 + tag1 = swagger_client.Tag() + tag1.id = 1 + self.pet1.tags = [tag1] + + self.pet2 = swagger_client.Pet() + self.pet2.name = "test name" + self.pet2.id = 1 + self.pet2.photo_urls = ["string"] + self.pet2.status = "available" + cate2 = swagger_client.Category() + cate2.id = 1 + cate2.name = "dog" + self.pet.category = cate2 + tag2 = swagger_client.Tag() + tag2.id = 1 + self.pet2.tags = [tag2] + + self.assertTrue(self.pet1 == self.pet2) + + # reset pet1 tags to empty array so that object comparison returns false + self.pet1.tags = [] + self.assertFalse(self.pet1 == self.pet2) From ddc4d8460d504d271b02d061c3319fd2950f5891 Mon Sep 17 00:00:00 2001 From: wing328 Date: Wed, 25 Nov 2015 00:00:26 +0800 Subject: [PATCH 18/18] fix php access token setter --- .../src/main/resources/php/configuration.mustache | 2 +- .../petstore/php/SwaggerClient-php/lib/Configuration.php | 2 +- .../petstore/php/SwaggerClient-php/tests/PetApiTest.php | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/configuration.mustache b/modules/swagger-codegen/src/main/resources/php/configuration.mustache index 14d7957fe54..28082851c00 100644 --- a/modules/swagger-codegen/src/main/resources/php/configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/php/configuration.mustache @@ -211,7 +211,7 @@ class Configuration */ public function setAccessToken($accessToken) { - $this->$accessToken = $accessToken; + $this->accessToken = $accessToken; return $this; } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php b/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php index 1fdac785bfd..033f2da7a22 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Configuration.php @@ -211,7 +211,7 @@ class Configuration */ public function setAccessToken($accessToken) { - $this->$accessToken = $accessToken; + $this->accessToken = $accessToken; return $this; } diff --git a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php index fe818069dac..58d5cd661f4 100644 --- a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php @@ -82,6 +82,10 @@ class PetApiTest extends \PHPUnit_Framework_TestCase $this->assertNotEquals($apiClient3, $apiClient4); // customied pet api not using the old pet api's api client $this->assertNotEquals($pet_api2->getApiClient(), $pet_api3->getApiClient()); + + // test access token + $api_client->getConfig()->setAccessToken("testing_only"); + $this->assertSame('testing_only', $api_client->getConfig()->getAccessToken()); } // test getPetById with a Pet object (id 10005)