Skip to content

Commit 5f63385

Browse files
wing328robert-lore
andauthored
Provide " as member" where needed (#21304)
* 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 * remove 3.8 tests * use localhost * update tests * update test --------- Co-authored-by: Robert Plummer <rplummer@sequel.ae>
1 parent 13c95f1 commit 5f63385

File tree

19 files changed

+697
-618
lines changed

19 files changed

+697
-618
lines changed

.github/workflows/samples-python-pydantic-v1-petstore.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ jobs:
1515
fail-fast: false
1616
matrix:
1717
python-version:
18-
- "3.8"
1918
- "3.9"
2019
- "3.10"
2120
- "3.11"

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
@@ -24,26 +24,26 @@ __all__ = [
2424
]
2525

2626
# import apis into sdk package
27-
{{#apiInfo}}{{#apis}}from {{apiPackage}}.{{classFilename}} import {{classname}}
27+
{{#apiInfo}}{{#apis}}from {{apiPackage}}.{{classFilename}} import {{classname}} as {{classname}}
2828
{{/apis}}{{/apiInfo}}
2929
# import ApiClient
30-
from {{packageName}}.api_response import ApiResponse
31-
from {{packageName}}.api_client import ApiClient
32-
from {{packageName}}.configuration import Configuration
33-
from {{packageName}}.exceptions import OpenApiException
34-
from {{packageName}}.exceptions import ApiTypeError
35-
from {{packageName}}.exceptions import ApiValueError
36-
from {{packageName}}.exceptions import ApiKeyError
37-
from {{packageName}}.exceptions import ApiAttributeError
38-
from {{packageName}}.exceptions import ApiException
30+
from {{packageName}}.api_response import ApiResponse as ApiResponse
31+
from {{packageName}}.api_client import ApiClient as ApiClient
32+
from {{packageName}}.configuration import Configuration as Configuration
33+
from {{packageName}}.exceptions import OpenApiException as OpenApiException
34+
from {{packageName}}.exceptions import ApiTypeError as ApiTypeError
35+
from {{packageName}}.exceptions import ApiValueError as ApiValueError
36+
from {{packageName}}.exceptions import ApiKeyError as ApiKeyError
37+
from {{packageName}}.exceptions import ApiAttributeError as ApiAttributeError
38+
from {{packageName}}.exceptions import ApiException as ApiException
3939
{{#hasHttpSignatureMethods}}
40-
from {{packageName}}.signing import HttpSigningConfiguration
40+
from {{packageName}}.signing import HttpSigningConfiguration as HttpSigningConfiguration
4141
{{/hasHttpSignatureMethods}}
4242

4343
# import models into sdk package
4444
{{#models}}
4545
{{#model}}
46-
from {{modelPackage}}.{{classFilename}} import {{classname}}
46+
from {{modelPackage}}.{{classFilename}} import {{classname}} as {{classname}}
4747
{{/model}}
4848
{{/models}}
4949
{{#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
@@ -24,26 +24,26 @@ __all__ = [
2424
]
2525

2626
# import apis into sdk package
27-
{{#apiInfo}}{{#apis}}from {{apiPackage}}.{{classFilename}} import {{classname}}
27+
{{#apiInfo}}{{#apis}}from {{apiPackage}}.{{classFilename}} import {{classname}} as {{classname}}
2828
{{/apis}}{{/apiInfo}}
2929
# import ApiClient
30-
from {{packageName}}.api_response import ApiResponse
31-
from {{packageName}}.api_client import ApiClient
32-
from {{packageName}}.configuration import Configuration
33-
from {{packageName}}.exceptions import OpenApiException
34-
from {{packageName}}.exceptions import ApiTypeError
35-
from {{packageName}}.exceptions import ApiValueError
36-
from {{packageName}}.exceptions import ApiKeyError
37-
from {{packageName}}.exceptions import ApiAttributeError
38-
from {{packageName}}.exceptions import ApiException
30+
from {{packageName}}.api_response import ApiResponse as ApiResponse
31+
from {{packageName}}.api_client import ApiClient as ApiClient
32+
from {{packageName}}.configuration import Configuration as Configuration
33+
from {{packageName}}.exceptions import OpenApiException as OpenApiException
34+
from {{packageName}}.exceptions import ApiTypeError as ApiTypeError
35+
from {{packageName}}.exceptions import ApiValueError as ApiValueError
36+
from {{packageName}}.exceptions import ApiKeyError as ApiKeyError
37+
from {{packageName}}.exceptions import ApiAttributeError as ApiAttributeError
38+
from {{packageName}}.exceptions import ApiException as ApiException
3939
{{#hasHttpSignatureMethods}}
40-
from {{packageName}}.signing import HttpSigningConfiguration
40+
from {{packageName}}.signing import HttpSigningConfiguration as HttpSigningConfiguration
4141
{{/hasHttpSignatureMethods}}
4242

4343
# import models into sdk package
4444
{{#models}}
4545
{{#model}}
46-
from {{modelPackage}}.{{classFilename}} import {{classname}}
46+
from {{modelPackage}}.{{classFilename}} import {{classname}} as {{classname}}
4747
{{/model}}
4848
{{/models}}
4949
{{#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
}

modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ paths:
397397
description: Order not found
398398
/user:
399399
servers:
400+
- url: 'http://localhost/v2'
400401
- url: 'http://petstore.swagger.io/v2'
401402
- url: 'http://path-server-test.petstore.local/v2'
402403
- url: 'http://{server}.swagger.io:{port}/v2'

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

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -49,34 +49,34 @@
4949
]
5050

5151
# import apis into sdk package
52-
from openapi_client.api.auth_api import AuthApi
53-
from openapi_client.api.body_api import BodyApi
54-
from openapi_client.api.form_api import FormApi
55-
from openapi_client.api.header_api import HeaderApi
56-
from openapi_client.api.path_api import PathApi
57-
from openapi_client.api.query_api import QueryApi
52+
from openapi_client.api.auth_api import AuthApi as AuthApi
53+
from openapi_client.api.body_api import BodyApi as BodyApi
54+
from openapi_client.api.form_api import FormApi as FormApi
55+
from openapi_client.api.header_api import HeaderApi as HeaderApi
56+
from openapi_client.api.path_api import PathApi as PathApi
57+
from openapi_client.api.query_api import QueryApi as QueryApi
5858

5959
# import ApiClient
60-
from openapi_client.api_response import ApiResponse
61-
from openapi_client.api_client import ApiClient
62-
from openapi_client.configuration import Configuration
63-
from openapi_client.exceptions import OpenApiException
64-
from openapi_client.exceptions import ApiTypeError
65-
from openapi_client.exceptions import ApiValueError
66-
from openapi_client.exceptions import ApiKeyError
67-
from openapi_client.exceptions import ApiAttributeError
68-
from openapi_client.exceptions import ApiException
60+
from openapi_client.api_response import ApiResponse as ApiResponse
61+
from openapi_client.api_client import ApiClient as ApiClient
62+
from openapi_client.configuration import Configuration as Configuration
63+
from openapi_client.exceptions import OpenApiException as OpenApiException
64+
from openapi_client.exceptions import ApiTypeError as ApiTypeError
65+
from openapi_client.exceptions import ApiValueError as ApiValueError
66+
from openapi_client.exceptions import ApiKeyError as ApiKeyError
67+
from openapi_client.exceptions import ApiAttributeError as ApiAttributeError
68+
from openapi_client.exceptions import ApiException as ApiException
6969

7070
# import models into sdk package
71-
from openapi_client.models.bird import Bird
72-
from openapi_client.models.category import Category
73-
from openapi_client.models.data_query import DataQuery
74-
from openapi_client.models.default_value import DefaultValue
75-
from openapi_client.models.number_properties_only import NumberPropertiesOnly
76-
from openapi_client.models.pet import Pet
77-
from openapi_client.models.query import Query
78-
from openapi_client.models.string_enum_ref import StringEnumRef
79-
from openapi_client.models.tag import Tag
80-
from openapi_client.models.test_form_object_multipart_request_marker import TestFormObjectMultipartRequestMarker
81-
from openapi_client.models.test_query_style_deep_object_explode_true_object_all_of_query_object_parameter import TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
82-
from openapi_client.models.test_query_style_form_explode_true_array_string_query_object_parameter import TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter
71+
from openapi_client.models.bird import Bird as Bird
72+
from openapi_client.models.category import Category as Category
73+
from openapi_client.models.data_query import DataQuery as DataQuery
74+
from openapi_client.models.default_value import DefaultValue as DefaultValue
75+
from openapi_client.models.number_properties_only import NumberPropertiesOnly as NumberPropertiesOnly
76+
from openapi_client.models.pet import Pet as Pet
77+
from openapi_client.models.query import Query as Query
78+
from openapi_client.models.string_enum_ref import StringEnumRef as StringEnumRef
79+
from openapi_client.models.tag import Tag as Tag
80+
from openapi_client.models.test_form_object_multipart_request_marker import TestFormObjectMultipartRequestMarker as TestFormObjectMultipartRequestMarker
81+
from openapi_client.models.test_query_style_deep_object_explode_true_object_all_of_query_object_parameter import TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter as TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
82+
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
@@ -49,34 +49,34 @@
4949
]
5050

5151
# import apis into sdk package
52-
from openapi_client.api.auth_api import AuthApi
53-
from openapi_client.api.body_api import BodyApi
54-
from openapi_client.api.form_api import FormApi
55-
from openapi_client.api.header_api import HeaderApi
56-
from openapi_client.api.path_api import PathApi
57-
from openapi_client.api.query_api import QueryApi
52+
from openapi_client.api.auth_api import AuthApi as AuthApi
53+
from openapi_client.api.body_api import BodyApi as BodyApi
54+
from openapi_client.api.form_api import FormApi as FormApi
55+
from openapi_client.api.header_api import HeaderApi as HeaderApi
56+
from openapi_client.api.path_api import PathApi as PathApi
57+
from openapi_client.api.query_api import QueryApi as QueryApi
5858

5959
# import ApiClient
60-
from openapi_client.api_response import ApiResponse
61-
from openapi_client.api_client import ApiClient
62-
from openapi_client.configuration import Configuration
63-
from openapi_client.exceptions import OpenApiException
64-
from openapi_client.exceptions import ApiTypeError
65-
from openapi_client.exceptions import ApiValueError
66-
from openapi_client.exceptions import ApiKeyError
67-
from openapi_client.exceptions import ApiAttributeError
68-
from openapi_client.exceptions import ApiException
60+
from openapi_client.api_response import ApiResponse as ApiResponse
61+
from openapi_client.api_client import ApiClient as ApiClient
62+
from openapi_client.configuration import Configuration as Configuration
63+
from openapi_client.exceptions import OpenApiException as OpenApiException
64+
from openapi_client.exceptions import ApiTypeError as ApiTypeError
65+
from openapi_client.exceptions import ApiValueError as ApiValueError
66+
from openapi_client.exceptions import ApiKeyError as ApiKeyError
67+
from openapi_client.exceptions import ApiAttributeError as ApiAttributeError
68+
from openapi_client.exceptions import ApiException as ApiException
6969

7070
# import models into sdk package
71-
from openapi_client.models.bird import Bird
72-
from openapi_client.models.category import Category
73-
from openapi_client.models.data_query import DataQuery
74-
from openapi_client.models.default_value import DefaultValue
75-
from openapi_client.models.number_properties_only import NumberPropertiesOnly
76-
from openapi_client.models.pet import Pet
77-
from openapi_client.models.query import Query
78-
from openapi_client.models.string_enum_ref import StringEnumRef
79-
from openapi_client.models.tag import Tag
80-
from openapi_client.models.test_form_object_multipart_request_marker import TestFormObjectMultipartRequestMarker
81-
from openapi_client.models.test_query_style_deep_object_explode_true_object_all_of_query_object_parameter import TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
82-
from openapi_client.models.test_query_style_form_explode_true_array_string_query_object_parameter import TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter
71+
from openapi_client.models.bird import Bird as Bird
72+
from openapi_client.models.category import Category as Category
73+
from openapi_client.models.data_query import DataQuery as DataQuery
74+
from openapi_client.models.default_value import DefaultValue as DefaultValue
75+
from openapi_client.models.number_properties_only import NumberPropertiesOnly as NumberPropertiesOnly
76+
from openapi_client.models.pet import Pet as Pet
77+
from openapi_client.models.query import Query as Query
78+
from openapi_client.models.string_enum_ref import StringEnumRef as StringEnumRef
79+
from openapi_client.models.tag import Tag as Tag
80+
from openapi_client.models.test_form_object_multipart_request_marker import TestFormObjectMultipartRequestMarker as TestFormObjectMultipartRequestMarker
81+
from openapi_client.models.test_query_style_deep_object_explode_true_object_all_of_query_object_parameter import TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter as TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
82+
from openapi_client.models.test_query_style_form_explode_true_array_string_query_object_parameter import TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter as TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter

0 commit comments

Comments
 (0)