Skip to content

Commit b17a76e

Browse files
committed
fix: #20878 Provide " as member" where needed
- Generate new samples - Add tests for all effected python versions - Ran tests with success Commands used to verify: ./bin/generate-samples.sh ./bin/configs/python* mvn verify -Psamples mvn integration-test -f modules/openapi-generator/pom.xml -Dtest=org.openapitools.codegen.python.PythonPydanticV1ClientCodegenTest -e mvn integration-test -f modules/openapi-generator/pom.xml -Dtest=org.openapitools.codegen.python.PythonClientCodegenTest -e
1 parent 1c13655 commit b17a76e

File tree

11 files changed

+676
-601
lines changed

11 files changed

+676
-601
lines changed

modules/openapi-generator/src/main/resources/python-pydantic-v1/__init__package.mustache

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,26 @@
77
__version__ = "{{packageVersion}}"
88

99
# import apis into sdk package
10-
{{#apiInfo}}{{#apis}}from {{apiPackage}}.{{classFilename}} import {{classname}}
10+
{{#apiInfo}}{{#apis}}from {{apiPackage}}.{{classFilename}} import {{classname}} as {{classname}}
1111
{{/apis}}{{/apiInfo}}
1212
# import ApiClient
13-
from {{packageName}}.api_response import ApiResponse
14-
from {{packageName}}.api_client import ApiClient
15-
from {{packageName}}.configuration import Configuration
16-
from {{packageName}}.exceptions import OpenApiException
17-
from {{packageName}}.exceptions import ApiTypeError
18-
from {{packageName}}.exceptions import ApiValueError
19-
from {{packageName}}.exceptions import ApiKeyError
20-
from {{packageName}}.exceptions import ApiAttributeError
21-
from {{packageName}}.exceptions import ApiException
13+
from {{packageName}}.api_response import ApiResponse as ApiResponse
14+
from {{packageName}}.api_client import ApiClient as ApiClient
15+
from {{packageName}}.configuration import Configuration as Configuration
16+
from {{packageName}}.exceptions import OpenApiException as OpenApiException
17+
from {{packageName}}.exceptions import ApiTypeError as ApiTypeError
18+
from {{packageName}}.exceptions import ApiValueError as ApiValueError
19+
from {{packageName}}.exceptions import ApiKeyError as ApiKeyError
20+
from {{packageName}}.exceptions import ApiAttributeError as ApiAttributeError
21+
from {{packageName}}.exceptions import ApiException as ApiException
2222
{{#hasHttpSignatureMethods}}
23-
from {{packageName}}.signing import HttpSigningConfiguration
23+
from {{packageName}}.signing import HttpSigningConfiguration as HttpSigningConfiguration
2424
{{/hasHttpSignatureMethods}}
2525

2626
# import models into sdk package
2727
{{#models}}
2828
{{#model}}
29-
from {{modelPackage}}.{{classFilename}} import {{classname}}
29+
from {{modelPackage}}.{{classFilename}} import {{classname}} as {{classname}}
3030
{{/model}}
3131
{{/models}}
3232
{{#recursionLimit}}

modules/openapi-generator/src/main/resources/python/__init__package.mustache

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,26 @@
77
__version__ = "{{packageVersion}}"
88

99
# import apis into sdk package
10-
{{#apiInfo}}{{#apis}}from {{apiPackage}}.{{classFilename}} import {{classname}}
10+
{{#apiInfo}}{{#apis}}from {{apiPackage}}.{{classFilename}} import {{classname}} as {{classname}}
1111
{{/apis}}{{/apiInfo}}
1212
# import ApiClient
13-
from {{packageName}}.api_response import ApiResponse
14-
from {{packageName}}.api_client import ApiClient
15-
from {{packageName}}.configuration import Configuration
16-
from {{packageName}}.exceptions import OpenApiException
17-
from {{packageName}}.exceptions import ApiTypeError
18-
from {{packageName}}.exceptions import ApiValueError
19-
from {{packageName}}.exceptions import ApiKeyError
20-
from {{packageName}}.exceptions import ApiAttributeError
21-
from {{packageName}}.exceptions import ApiException
13+
from {{packageName}}.api_response import ApiResponse as ApiResponse
14+
from {{packageName}}.api_client import ApiClient as ApiClient
15+
from {{packageName}}.configuration import Configuration as Configuration
16+
from {{packageName}}.exceptions import OpenApiException as OpenApiException
17+
from {{packageName}}.exceptions import ApiTypeError as ApiTypeError
18+
from {{packageName}}.exceptions import ApiValueError as ApiValueError
19+
from {{packageName}}.exceptions import ApiKeyError as ApiKeyError
20+
from {{packageName}}.exceptions import ApiAttributeError as ApiAttributeError
21+
from {{packageName}}.exceptions import ApiException as ApiException
2222
{{#hasHttpSignatureMethods}}
23-
from {{packageName}}.signing import HttpSigningConfiguration
23+
from {{packageName}}.signing import HttpSigningConfiguration as HttpSigningConfiguration
2424
{{/hasHttpSignatureMethods}}
2525

2626
# import models into sdk package
2727
{{#models}}
2828
{{#model}}
29-
from {{modelPackage}}.{{classFilename}} import {{classname}}
29+
from {{modelPackage}}.{{classFilename}} import {{classname}} as {{classname}}
3030
{{/model}}
3131
{{/models}}
3232
{{#recursionLimit}}

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,4 +567,48 @@ public void testHandleNoApis() throws IOException {
567567
assertNotNull(setupFile);
568568
assertFileContains(setupFile.toPath(), "setup(");
569569
}
570+
571+
@Test(description = "outputs __init__.py with imports for exports")
572+
public void testInitFileImportsExports() throws IOException {
573+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
574+
output.deleteOnExit();
575+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/petstore.yaml");
576+
final DefaultGenerator defaultGenerator = new DefaultGenerator();
577+
final ClientOptInput clientOptInput = new ClientOptInput();
578+
clientOptInput.openAPI(openAPI);
579+
PythonClientCodegen pythonClientCodegen = new PythonClientCodegen();
580+
pythonClientCodegen.setOutputDir(output.getAbsolutePath());
581+
clientOptInput.config(pythonClientCodegen);
582+
defaultGenerator.opts(clientOptInput);
583+
584+
Map<String, File> files = defaultGenerator.generate().stream().collect(Collectors.toMap(File::getPath, Function.identity()));
585+
586+
File initFile = files.get(Paths.get(output.getAbsolutePath(), "openapi_client", "__init__.py").toString());
587+
assertNotNull(initFile);
588+
Path initFilePath = initFile.toPath();
589+
590+
// import apis into sdk package
591+
assertFileContains(initFilePath, "from openapi_client.api.pet_api import PetApi as PetApi");
592+
assertFileContains(initFilePath, "from openapi_client.api.store_api import StoreApi as StoreApi");
593+
assertFileContains(initFilePath, "from openapi_client.api.user_api import UserApi as UserApi");
594+
595+
// import ApiClient
596+
assertFileContains(initFilePath, "from openapi_client.api_response import ApiResponse as ApiResponse");
597+
assertFileContains(initFilePath, "from openapi_client.api_client import ApiClient as ApiClient");
598+
assertFileContains(initFilePath, "from openapi_client.configuration import Configuration as Configuration");
599+
assertFileContains(initFilePath, "from openapi_client.exceptions import OpenApiException as OpenApiException");
600+
assertFileContains(initFilePath, "from openapi_client.exceptions import ApiTypeError as ApiTypeError");
601+
assertFileContains(initFilePath, "from openapi_client.exceptions import ApiValueError as ApiValueError");
602+
assertFileContains(initFilePath, "from openapi_client.exceptions import ApiKeyError as ApiKeyError");
603+
assertFileContains(initFilePath, "from openapi_client.exceptions import ApiAttributeError as ApiAttributeError");
604+
assertFileContains(initFilePath, "from openapi_client.exceptions import ApiException as ApiException");
605+
606+
// import models into sdk package
607+
assertFileContains(initFilePath, "from openapi_client.models.api_response import ApiResponse as ApiResponse");
608+
assertFileContains(initFilePath, "from openapi_client.models.category import Category as Category");
609+
assertFileContains(initFilePath, "from openapi_client.models.order import Order as Order");
610+
assertFileContains(initFilePath, "from openapi_client.models.pet import Pet as Pet");
611+
assertFileContains(initFilePath, "from openapi_client.models.tag import Tag as Tag");
612+
assertFileContains(initFilePath, "from openapi_client.models.user import User as User");
613+
}
570614
}

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,4 +503,35 @@ public void modelTestDollarSign() {
503503
CodegenProperty property = vars.get(0);
504504
Assert.assertEquals(property.name, "dollar_value");
505505
}
506+
507+
@Test(description = "outputs __init__.py with imports for exports")
508+
public void testInitFileImportsExports() throws Exception {
509+
final PythonPydanticV1ClientCodegen codegen = new PythonPydanticV1ClientCodegen();
510+
final String outputPath = generateFiles(codegen, "src/test/resources/3_0/petstore.yaml");
511+
final Path initFilePath = Paths.get(outputPath + "openapi_client/__init__.py");
512+
513+
// import apis into sdk package
514+
assertFileContains(initFilePath, "from openapi_client.api.pet_api import PetApi as PetApi");
515+
assertFileContains(initFilePath, "from openapi_client.api.store_api import StoreApi as StoreApi");
516+
assertFileContains(initFilePath, "from openapi_client.api.user_api import UserApi as UserApi");
517+
518+
// import ApiClient
519+
assertFileContains(initFilePath, "from openapi_client.api_response import ApiResponse as ApiResponse");
520+
assertFileContains(initFilePath, "from openapi_client.api_client import ApiClient as ApiClient");
521+
assertFileContains(initFilePath, "from openapi_client.configuration import Configuration as Configuration");
522+
assertFileContains(initFilePath, "from openapi_client.exceptions import OpenApiException as OpenApiException");
523+
assertFileContains(initFilePath, "from openapi_client.exceptions import ApiTypeError as ApiTypeError");
524+
assertFileContains(initFilePath, "from openapi_client.exceptions import ApiValueError as ApiValueError");
525+
assertFileContains(initFilePath, "from openapi_client.exceptions import ApiKeyError as ApiKeyError");
526+
assertFileContains(initFilePath, "from openapi_client.exceptions import ApiAttributeError as ApiAttributeError");
527+
assertFileContains(initFilePath, "from openapi_client.exceptions import ApiException as ApiException");
528+
529+
// import models into sdk package
530+
assertFileContains(initFilePath, "from openapi_client.models.api_response import ApiResponse as ApiResponse");
531+
assertFileContains(initFilePath, "from openapi_client.models.category import Category as Category");
532+
assertFileContains(initFilePath, "from openapi_client.models.order import Order as Order");
533+
assertFileContains(initFilePath, "from openapi_client.models.pet import Pet as Pet");
534+
assertFileContains(initFilePath, "from openapi_client.models.tag import Tag as Tag");
535+
assertFileContains(initFilePath, "from openapi_client.models.user import User as User");
536+
}
506537
}

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/__init__.py

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,34 +18,34 @@
1818
__version__ = "1.0.0"
1919

2020
# import apis into sdk package
21-
from openapi_client.api.auth_api import AuthApi
22-
from openapi_client.api.body_api import BodyApi
23-
from openapi_client.api.form_api import FormApi
24-
from openapi_client.api.header_api import HeaderApi
25-
from openapi_client.api.path_api import PathApi
26-
from openapi_client.api.query_api import QueryApi
21+
from openapi_client.api.auth_api import AuthApi as AuthApi
22+
from openapi_client.api.body_api import BodyApi as BodyApi
23+
from openapi_client.api.form_api import FormApi as FormApi
24+
from openapi_client.api.header_api import HeaderApi as HeaderApi
25+
from openapi_client.api.path_api import PathApi as PathApi
26+
from openapi_client.api.query_api import QueryApi as QueryApi
2727

2828
# import ApiClient
29-
from openapi_client.api_response import ApiResponse
30-
from openapi_client.api_client import ApiClient
31-
from openapi_client.configuration import Configuration
32-
from openapi_client.exceptions import OpenApiException
33-
from openapi_client.exceptions import ApiTypeError
34-
from openapi_client.exceptions import ApiValueError
35-
from openapi_client.exceptions import ApiKeyError
36-
from openapi_client.exceptions import ApiAttributeError
37-
from openapi_client.exceptions import ApiException
29+
from openapi_client.api_response import ApiResponse as ApiResponse
30+
from openapi_client.api_client import ApiClient as ApiClient
31+
from openapi_client.configuration import Configuration as Configuration
32+
from openapi_client.exceptions import OpenApiException as OpenApiException
33+
from openapi_client.exceptions import ApiTypeError as ApiTypeError
34+
from openapi_client.exceptions import ApiValueError as ApiValueError
35+
from openapi_client.exceptions import ApiKeyError as ApiKeyError
36+
from openapi_client.exceptions import ApiAttributeError as ApiAttributeError
37+
from openapi_client.exceptions import ApiException as ApiException
3838

3939
# import models into sdk package
40-
from openapi_client.models.bird import Bird
41-
from openapi_client.models.category import Category
42-
from openapi_client.models.data_query import DataQuery
43-
from openapi_client.models.default_value import DefaultValue
44-
from openapi_client.models.number_properties_only import NumberPropertiesOnly
45-
from openapi_client.models.pet import Pet
46-
from openapi_client.models.query import Query
47-
from openapi_client.models.string_enum_ref import StringEnumRef
48-
from openapi_client.models.tag import Tag
49-
from openapi_client.models.test_form_object_multipart_request_marker import TestFormObjectMultipartRequestMarker
50-
from openapi_client.models.test_query_style_deep_object_explode_true_object_all_of_query_object_parameter import TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
51-
from openapi_client.models.test_query_style_form_explode_true_array_string_query_object_parameter import TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter
40+
from openapi_client.models.bird import Bird as Bird
41+
from openapi_client.models.category import Category as Category
42+
from openapi_client.models.data_query import DataQuery as DataQuery
43+
from openapi_client.models.default_value import DefaultValue as DefaultValue
44+
from openapi_client.models.number_properties_only import NumberPropertiesOnly as NumberPropertiesOnly
45+
from openapi_client.models.pet import Pet as Pet
46+
from openapi_client.models.query import Query as Query
47+
from openapi_client.models.string_enum_ref import StringEnumRef as StringEnumRef
48+
from openapi_client.models.tag import Tag as Tag
49+
from openapi_client.models.test_form_object_multipart_request_marker import TestFormObjectMultipartRequestMarker as TestFormObjectMultipartRequestMarker
50+
from openapi_client.models.test_query_style_deep_object_explode_true_object_all_of_query_object_parameter import TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter as TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
51+
from openapi_client.models.test_query_style_form_explode_true_array_string_query_object_parameter import TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter as TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter

samples/client/echo_api/python-pydantic-v1/openapi_client/__init__.py

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,34 +18,34 @@
1818
__version__ = "1.0.0"
1919

2020
# import apis into sdk package
21-
from openapi_client.api.auth_api import AuthApi
22-
from openapi_client.api.body_api import BodyApi
23-
from openapi_client.api.form_api import FormApi
24-
from openapi_client.api.header_api import HeaderApi
25-
from openapi_client.api.path_api import PathApi
26-
from openapi_client.api.query_api import QueryApi
21+
from openapi_client.api.auth_api import AuthApi as AuthApi
22+
from openapi_client.api.body_api import BodyApi as BodyApi
23+
from openapi_client.api.form_api import FormApi as FormApi
24+
from openapi_client.api.header_api import HeaderApi as HeaderApi
25+
from openapi_client.api.path_api import PathApi as PathApi
26+
from openapi_client.api.query_api import QueryApi as QueryApi
2727

2828
# import ApiClient
29-
from openapi_client.api_response import ApiResponse
30-
from openapi_client.api_client import ApiClient
31-
from openapi_client.configuration import Configuration
32-
from openapi_client.exceptions import OpenApiException
33-
from openapi_client.exceptions import ApiTypeError
34-
from openapi_client.exceptions import ApiValueError
35-
from openapi_client.exceptions import ApiKeyError
36-
from openapi_client.exceptions import ApiAttributeError
37-
from openapi_client.exceptions import ApiException
29+
from openapi_client.api_response import ApiResponse as ApiResponse
30+
from openapi_client.api_client import ApiClient as ApiClient
31+
from openapi_client.configuration import Configuration as Configuration
32+
from openapi_client.exceptions import OpenApiException as OpenApiException
33+
from openapi_client.exceptions import ApiTypeError as ApiTypeError
34+
from openapi_client.exceptions import ApiValueError as ApiValueError
35+
from openapi_client.exceptions import ApiKeyError as ApiKeyError
36+
from openapi_client.exceptions import ApiAttributeError as ApiAttributeError
37+
from openapi_client.exceptions import ApiException as ApiException
3838

3939
# import models into sdk package
40-
from openapi_client.models.bird import Bird
41-
from openapi_client.models.category import Category
42-
from openapi_client.models.data_query import DataQuery
43-
from openapi_client.models.default_value import DefaultValue
44-
from openapi_client.models.number_properties_only import NumberPropertiesOnly
45-
from openapi_client.models.pet import Pet
46-
from openapi_client.models.query import Query
47-
from openapi_client.models.string_enum_ref import StringEnumRef
48-
from openapi_client.models.tag import Tag
49-
from openapi_client.models.test_form_object_multipart_request_marker import TestFormObjectMultipartRequestMarker
50-
from openapi_client.models.test_query_style_deep_object_explode_true_object_all_of_query_object_parameter import TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
51-
from openapi_client.models.test_query_style_form_explode_true_array_string_query_object_parameter import TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter
40+
from openapi_client.models.bird import Bird as Bird
41+
from openapi_client.models.category import Category as Category
42+
from openapi_client.models.data_query import DataQuery as DataQuery
43+
from openapi_client.models.default_value import DefaultValue as DefaultValue
44+
from openapi_client.models.number_properties_only import NumberPropertiesOnly as NumberPropertiesOnly
45+
from openapi_client.models.pet import Pet as Pet
46+
from openapi_client.models.query import Query as Query
47+
from openapi_client.models.string_enum_ref import StringEnumRef as StringEnumRef
48+
from openapi_client.models.tag import Tag as Tag
49+
from openapi_client.models.test_form_object_multipart_request_marker import TestFormObjectMultipartRequestMarker as TestFormObjectMultipartRequestMarker
50+
from openapi_client.models.test_query_style_deep_object_explode_true_object_all_of_query_object_parameter import TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter as TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
51+
from openapi_client.models.test_query_style_form_explode_true_array_string_query_object_parameter import TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter as TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter

0 commit comments

Comments
 (0)