diff --git a/bin/openapi3/python-experimental-petstore.sh b/bin/openapi3/python-experimental-petstore.sh
new file mode 100755
index 00000000000..7b4007372b2
--- /dev/null
+++ b/bin/openapi3/python-experimental-petstore.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+SCRIPT="$0"
+echo "# START SCRIPT: $SCRIPT"
+
+while [ -h "$SCRIPT" ] ; do
+ ls=`ls -ld "$SCRIPT"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ SCRIPT="$link"
+ else
+ SCRIPT=`dirname "$SCRIPT"`/"$link"
+ fi
+done
+
+if [ ! -d "${APP_DIR}" ]; then
+ APP_DIR=`dirname "$SCRIPT"`/..
+ APP_DIR=`cd "${APP_DIR}"; pwd`
+fi
+
+executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar"
+
+if [ ! -f "$executable" ]
+then
+ mvn clean package
+fi
+
+# if you've executed sbt assembly previously it will use that instead.
+export JAVA_OPTS="${JAVA_OPTS} -Xmx1024M -DloggerPath=conf/log4j.properties"
+ags="generate -t modules/openapi-generator/src/main/resources/python -i modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml -g python-experimental -o samples/openapi3/client/petstore/python-experimental/ --additional-properties packageName=petstore_api $@"
+
+java $JAVA_OPTS -jar $executable $ags
diff --git a/bin/openapi3/windows/python-experimental-petstore.bat b/bin/openapi3/windows/python-experimental-petstore.bat
new file mode 100644
index 00000000000..73c433de278
--- /dev/null
+++ b/bin/openapi3/windows/python-experimental-petstore.bat
@@ -0,0 +1,10 @@
+set executable=.\modules\openapi-generator-cli\target\openapi-generator-cli.jar
+
+If Not Exist %executable% (
+ mvn clean package
+)
+
+REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M
+set ags=generate -i modules\openapi-generator\src\test\resources\3_0\petstore-with-fake-endpoints-models-for-testing.yaml -g python-experimental -o samples\openapi3\client\petstore\python-experimental --additional-properties packageName=petstore_api
+
+java %JAVA_OPTS% -jar %executable% %ags%
diff --git a/bin/utils/ensure-up-to-date b/bin/utils/ensure-up-to-date
index 397b6975a1a..4bb9ee79b4f 100755
--- a/bin/utils/ensure-up-to-date
+++ b/bin/utils/ensure-up-to-date
@@ -41,6 +41,7 @@ declare -a samples=(
"${root}/bin/python-petstore-all.sh"
"${root}/bin/python-server-all.sh"
"${root}/bin/openapi3/python-petstore.sh"
+"${root}/bin/openapi3/python-experimental-petstore.sh"
"${root}/bin/php-petstore.sh"
"${root}/bin/php-silex-petstore-server.sh"
"${root}/bin/php-symfony-petstore.sh"
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientExperimentalCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientExperimentalCodegen.java
index 6a18abea015..7e31e615773 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientExperimentalCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientExperimentalCodegen.java
@@ -277,7 +277,9 @@ public class PythonClientExperimentalCodegen extends PythonClientCodegen {
// name looks like cat.Cat
String moduleName = name.split("\\.")[0];
// https://exceptionshub.com/circular-or-cyclic-imports-in-python.html
- String modelImport = "try:\n from " + modelPackage() + " import "+ moduleName+ "\nexcept ImportError:\n "+moduleName+" = sys.modules['"+modelPackage() + "."+ moduleName+"']";
+ String modelImport = "try:\n from " + modelPackage() +
+ " import " + moduleName+ "\nexcept ImportError:\n " +
+ moduleName + " = sys.modules[\n '" + modelPackage() + "." + moduleName + "']";
return modelImport;
}
diff --git a/modules/openapi-generator/src/main/resources/python/python-experimental/api.mustache b/modules/openapi-generator/src/main/resources/python/python-experimental/api.mustache
index 734c490caba..2182d7362d0 100644
--- a/modules/openapi-generator/src/main/resources/python/python-experimental/api.mustache
+++ b/modules/openapi-generator/src/main/resources/python/python-experimental/api.mustache
@@ -108,7 +108,8 @@ class {{classname}}(object):
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
{{#requiredParams}}
- kwargs['{{paramName}}'] = {{paramName}}
+ kwargs['{{paramName}}'] = \
+ {{paramName}}
{{/requiredParams}}
return self.call_with_http_info(**kwargs)
@@ -216,7 +217,8 @@ class {{classname}}(object):
},
'openapi_types': {
{{#allParams}}
- '{{paramName}}': ({{{dataType}}},),
+ '{{paramName}}':
+ ({{{dataType}}},),
{{/allParams}}
},
'attribute_map': {
diff --git a/pom.xml b/pom.xml
index e01e715039a..64d0efc5fbe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1060,6 +1060,7 @@
samples/client/petstore/python-asyncio
samples/client/petstore/python-tornado
samples/openapi3/client/petstore/python
+ samples/openapi3/client/petstore/python-experimental
samples/client/petstore/typescript-fetch/builds/default
samples/client/petstore/typescript-fetch/builds/es6-target
samples/client/petstore/typescript-fetch/builds/with-npm-version
diff --git a/samples/client/petstore/python-experimental/petstore_api/api/another_fake_api.py b/samples/client/petstore/python-experimental/petstore_api/api/another_fake_api.py
index c8e87491d52..7a8e081050d 100644
--- a/samples/client/petstore/python-experimental/petstore_api/api/another_fake_api.py
+++ b/samples/client/petstore/python-experimental/petstore_api/api/another_fake_api.py
@@ -102,7 +102,8 @@ class AnotherFakeApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['body'] = body
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.call_123_test_special_tags = Endpoint(
@@ -134,7 +135,8 @@ class AnotherFakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (client.Client,),
+ 'body':
+ (client.Client,),
},
'attribute_map': {
},
diff --git a/samples/client/petstore/python-experimental/petstore_api/api/fake_api.py b/samples/client/petstore/python-experimental/petstore_api/api/fake_api.py
index be569e05cbd..13b39417a25 100644
--- a/samples/client/petstore/python-experimental/petstore_api/api/fake_api.py
+++ b/samples/client/petstore/python-experimental/petstore_api/api/fake_api.py
@@ -108,7 +108,8 @@ class FakeApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['xml_item'] = xml_item
+ kwargs['xml_item'] = \
+ xml_item
return self.call_with_http_info(**kwargs)
self.create_xml_item = Endpoint(
@@ -140,7 +141,8 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'xml_item': (xml_item.XmlItem,),
+ 'xml_item':
+ (xml_item.XmlItem,),
},
'attribute_map': {
},
@@ -247,7 +249,8 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (bool,),
+ 'body':
+ (bool,),
},
'attribute_map': {
},
@@ -349,7 +352,8 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (outer_composite.OuterComposite,),
+ 'body':
+ (outer_composite.OuterComposite,),
},
'attribute_map': {
},
@@ -451,7 +455,8 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (outer_enum.OuterEnum,),
+ 'body':
+ (outer_enum.OuterEnum,),
},
'attribute_map': {
},
@@ -553,7 +558,8 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (outer_number.OuterNumber,),
+ 'body':
+ (outer_number.OuterNumber,),
},
'attribute_map': {
},
@@ -655,7 +661,8 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (str,),
+ 'body':
+ (str,),
},
'attribute_map': {
},
@@ -728,7 +735,8 @@ class FakeApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['body'] = body
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.test_body_with_file_schema = Endpoint(
@@ -760,7 +768,8 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (file_schema_test_class.FileSchemaTestClass,),
+ 'body':
+ (file_schema_test_class.FileSchemaTestClass,),
},
'attribute_map': {
},
@@ -833,8 +842,10 @@ class FakeApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['query'] = query
- kwargs['body'] = body
+ kwargs['query'] = \
+ query
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.test_body_with_query_params = Endpoint(
@@ -868,8 +879,10 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'query': (str,),
- 'body': (user.User,),
+ 'query':
+ (str,),
+ 'body':
+ (user.User,),
},
'attribute_map': {
'query': 'query',
@@ -944,7 +957,8 @@ class FakeApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['body'] = body
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.test_client_model = Endpoint(
@@ -976,7 +990,8 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (client.Client,),
+ 'body':
+ (client.Client,),
},
'attribute_map': {
},
@@ -1055,11 +1070,16 @@ class FakeApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['query_integer'] = query_integer
- kwargs['query_string'] = query_string
- kwargs['path_string'] = path_string
- kwargs['path_integer'] = path_integer
- kwargs['header_number'] = header_number
+ kwargs['query_integer'] = \
+ query_integer
+ kwargs['query_string'] = \
+ query_string
+ kwargs['path_string'] = \
+ path_string
+ kwargs['path_integer'] = \
+ path_integer
+ kwargs['header_number'] = \
+ header_number
return self.call_with_http_info(**kwargs)
self.test_endpoint_enums_length_one = Endpoint(
@@ -1124,11 +1144,16 @@ class FakeApi(object):
},
},
'openapi_types': {
- 'query_integer': (int,),
- 'query_string': (str,),
- 'path_string': (str,),
- 'path_integer': (int,),
- 'header_number': (float,),
+ 'query_integer':
+ (int,),
+ 'query_string':
+ (str,),
+ 'path_string':
+ (str,),
+ 'path_integer':
+ (int,),
+ 'header_number':
+ (float,),
},
'attribute_map': {
'query_integer': 'query_integer',
@@ -1221,10 +1246,14 @@ class FakeApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['number'] = number
- kwargs['double'] = double
- kwargs['pattern_without_delimiter'] = pattern_without_delimiter
- kwargs['byte'] = byte
+ kwargs['number'] = \
+ number
+ kwargs['double'] = \
+ double
+ kwargs['pattern_without_delimiter'] = \
+ pattern_without_delimiter
+ kwargs['byte'] = \
+ byte
return self.call_with_http_info(**kwargs)
self.test_endpoint_parameters = Endpoint(
@@ -1323,20 +1352,34 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'number': (float,),
- 'double': (float,),
- 'pattern_without_delimiter': (str,),
- 'byte': (str,),
- 'integer': (int,),
- 'int32': (int,),
- 'int64': (int,),
- 'float': (float,),
- 'string': (str,),
- 'binary': (file_type,),
- 'date': (date,),
- 'date_time': (datetime,),
- 'password': (str,),
- 'param_callback': (str,),
+ 'number':
+ (float,),
+ 'double':
+ (float,),
+ 'pattern_without_delimiter':
+ (str,),
+ 'byte':
+ (str,),
+ 'integer':
+ (int,),
+ 'int32':
+ (int,),
+ 'int64':
+ (int,),
+ 'float':
+ (float,),
+ 'string':
+ (str,),
+ 'binary':
+ (file_type,),
+ 'date':
+ (date,),
+ 'date_time':
+ (datetime,),
+ 'password':
+ (str,),
+ 'param_callback':
+ (str,),
},
'attribute_map': {
'number': 'number',
@@ -1530,14 +1573,22 @@ class FakeApi(object):
},
},
'openapi_types': {
- 'enum_header_string_array': ([str],),
- 'enum_header_string': (str,),
- 'enum_query_string_array': ([str],),
- 'enum_query_string': (str,),
- 'enum_query_integer': (int,),
- 'enum_query_double': (float,),
- 'enum_form_string_array': ([str],),
- 'enum_form_string': (str,),
+ 'enum_header_string_array':
+ ([str],),
+ 'enum_header_string':
+ (str,),
+ 'enum_query_string_array':
+ ([str],),
+ 'enum_query_string':
+ (str,),
+ 'enum_query_integer':
+ (int,),
+ 'enum_query_double':
+ (float,),
+ 'enum_form_string_array':
+ ([str],),
+ 'enum_form_string':
+ (str,),
},
'attribute_map': {
'enum_header_string_array': 'enum_header_string_array',
@@ -1633,9 +1684,12 @@ class FakeApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['required_string_group'] = required_string_group
- kwargs['required_boolean_group'] = required_boolean_group
- kwargs['required_int64_group'] = required_int64_group
+ kwargs['required_string_group'] = \
+ required_string_group
+ kwargs['required_boolean_group'] = \
+ required_boolean_group
+ kwargs['required_int64_group'] = \
+ required_int64_group
return self.call_with_http_info(**kwargs)
self.test_group_parameters = Endpoint(
@@ -1674,12 +1728,18 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'required_string_group': (int,),
- 'required_boolean_group': (bool,),
- 'required_int64_group': (int,),
- 'string_group': (int,),
- 'boolean_group': (bool,),
- 'int64_group': (int,),
+ 'required_string_group':
+ (int,),
+ 'required_boolean_group':
+ (bool,),
+ 'required_int64_group':
+ (int,),
+ 'string_group':
+ (int,),
+ 'boolean_group':
+ (bool,),
+ 'int64_group':
+ (int,),
},
'attribute_map': {
'required_string_group': 'required_string_group',
@@ -1760,7 +1820,8 @@ class FakeApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['param'] = param
+ kwargs['param'] = \
+ param
return self.call_with_http_info(**kwargs)
self.test_inline_additional_properties = Endpoint(
@@ -1792,7 +1853,8 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'param': ({str: (str,)},),
+ 'param':
+ ({str: (str,)},),
},
'attribute_map': {
},
@@ -1865,8 +1927,10 @@ class FakeApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['param'] = param
- kwargs['param2'] = param2
+ kwargs['param'] = \
+ param
+ kwargs['param2'] = \
+ param2
return self.call_with_http_info(**kwargs)
self.test_json_form_data = Endpoint(
@@ -1900,8 +1964,10 @@ class FakeApi(object):
'allowed_values': {
},
'openapi_types': {
- 'param': (str,),
- 'param2': (str,),
+ 'param':
+ (str,),
+ 'param2':
+ (str,),
},
'attribute_map': {
'param': 'param',
diff --git a/samples/client/petstore/python-experimental/petstore_api/api/fake_classname_tags_123_api.py b/samples/client/petstore/python-experimental/petstore_api/api/fake_classname_tags_123_api.py
index b10c7cd3915..ba0386f633a 100644
--- a/samples/client/petstore/python-experimental/petstore_api/api/fake_classname_tags_123_api.py
+++ b/samples/client/petstore/python-experimental/petstore_api/api/fake_classname_tags_123_api.py
@@ -102,7 +102,8 @@ class FakeClassnameTags123Api(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['body'] = body
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.test_classname = Endpoint(
@@ -136,7 +137,8 @@ class FakeClassnameTags123Api(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (client.Client,),
+ 'body':
+ (client.Client,),
},
'attribute_map': {
},
diff --git a/samples/client/petstore/python-experimental/petstore_api/api/pet_api.py b/samples/client/petstore/python-experimental/petstore_api/api/pet_api.py
index e7e1cf19c00..3eeae195e0a 100644
--- a/samples/client/petstore/python-experimental/petstore_api/api/pet_api.py
+++ b/samples/client/petstore/python-experimental/petstore_api/api/pet_api.py
@@ -102,7 +102,8 @@ class PetApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['body'] = body
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.add_pet = Endpoint(
@@ -136,7 +137,8 @@ class PetApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (pet.Pet,),
+ 'body':
+ (pet.Pet,),
},
'attribute_map': {
},
@@ -210,7 +212,8 @@ class PetApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['pet_id'] = pet_id
+ kwargs['pet_id'] = \
+ pet_id
return self.call_with_http_info(**kwargs)
self.delete_pet = Endpoint(
@@ -245,8 +248,10 @@ class PetApi(object):
'allowed_values': {
},
'openapi_types': {
- 'pet_id': (int,),
- 'api_key': (str,),
+ 'pet_id':
+ (int,),
+ 'api_key':
+ (str,),
},
'attribute_map': {
'pet_id': 'petId',
@@ -320,7 +325,8 @@ class PetApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['status'] = status
+ kwargs['status'] = \
+ status
return self.call_with_http_info(**kwargs)
self.find_pets_by_status = Endpoint(
@@ -361,7 +367,8 @@ class PetApi(object):
},
},
'openapi_types': {
- 'status': ([str],),
+ 'status':
+ ([str],),
},
'attribute_map': {
'status': 'status',
@@ -437,7 +444,8 @@ class PetApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['tags'] = tags
+ kwargs['tags'] = \
+ tags
return self.call_with_http_info(**kwargs)
self.find_pets_by_tags = Endpoint(
@@ -471,7 +479,8 @@ class PetApi(object):
'allowed_values': {
},
'openapi_types': {
- 'tags': ([str],),
+ 'tags':
+ ([str],),
},
'attribute_map': {
'tags': 'tags',
@@ -547,7 +556,8 @@ class PetApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['pet_id'] = pet_id
+ kwargs['pet_id'] = \
+ pet_id
return self.call_with_http_info(**kwargs)
self.get_pet_by_id = Endpoint(
@@ -581,7 +591,8 @@ class PetApi(object):
'allowed_values': {
},
'openapi_types': {
- 'pet_id': (int,),
+ 'pet_id':
+ (int,),
},
'attribute_map': {
'pet_id': 'petId',
@@ -655,7 +666,8 @@ class PetApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['body'] = body
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.update_pet = Endpoint(
@@ -689,7 +701,8 @@ class PetApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (pet.Pet,),
+ 'body':
+ (pet.Pet,),
},
'attribute_map': {
},
@@ -764,7 +777,8 @@ class PetApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['pet_id'] = pet_id
+ kwargs['pet_id'] = \
+ pet_id
return self.call_with_http_info(**kwargs)
self.update_pet_with_form = Endpoint(
@@ -800,9 +814,12 @@ class PetApi(object):
'allowed_values': {
},
'openapi_types': {
- 'pet_id': (int,),
- 'name': (str,),
- 'status': (str,),
+ 'pet_id':
+ (int,),
+ 'name':
+ (str,),
+ 'status':
+ (str,),
},
'attribute_map': {
'pet_id': 'petId',
@@ -882,7 +899,8 @@ class PetApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['pet_id'] = pet_id
+ kwargs['pet_id'] = \
+ pet_id
return self.call_with_http_info(**kwargs)
self.upload_file = Endpoint(
@@ -919,10 +937,14 @@ class PetApi(object):
'allowed_values': {
},
'openapi_types': {
- 'pet_id': (int,),
- 'additional_metadata': (str,),
- 'file': (file_type,),
- 'files': ([file_type],),
+ 'pet_id':
+ (int,),
+ 'additional_metadata':
+ (str,),
+ 'file':
+ (file_type,),
+ 'files':
+ ([file_type],),
},
'attribute_map': {
'pet_id': 'petId',
@@ -1006,8 +1028,10 @@ class PetApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['pet_id'] = pet_id
- kwargs['required_file'] = required_file
+ kwargs['pet_id'] = \
+ pet_id
+ kwargs['required_file'] = \
+ required_file
return self.call_with_http_info(**kwargs)
self.upload_file_with_required_file = Endpoint(
@@ -1044,9 +1068,12 @@ class PetApi(object):
'allowed_values': {
},
'openapi_types': {
- 'pet_id': (int,),
- 'required_file': (file_type,),
- 'additional_metadata': (str,),
+ 'pet_id':
+ (int,),
+ 'required_file':
+ (file_type,),
+ 'additional_metadata':
+ (str,),
},
'attribute_map': {
'pet_id': 'petId',
diff --git a/samples/client/petstore/python-experimental/petstore_api/api/store_api.py b/samples/client/petstore/python-experimental/petstore_api/api/store_api.py
index bb1367b167e..e429d348e67 100644
--- a/samples/client/petstore/python-experimental/petstore_api/api/store_api.py
+++ b/samples/client/petstore/python-experimental/petstore_api/api/store_api.py
@@ -102,7 +102,8 @@ class StoreApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['order_id'] = order_id
+ kwargs['order_id'] = \
+ order_id
return self.call_with_http_info(**kwargs)
self.delete_order = Endpoint(
@@ -134,7 +135,8 @@ class StoreApi(object):
'allowed_values': {
},
'openapi_types': {
- 'order_id': (str,),
+ 'order_id':
+ (str,),
},
'attribute_map': {
'order_id': 'order_id',
@@ -306,7 +308,8 @@ class StoreApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['order_id'] = order_id
+ kwargs['order_id'] = \
+ order_id
return self.call_with_http_info(**kwargs)
self.get_order_by_id = Endpoint(
@@ -344,7 +347,8 @@ class StoreApi(object):
'allowed_values': {
},
'openapi_types': {
- 'order_id': (int,),
+ 'order_id':
+ (int,),
},
'attribute_map': {
'order_id': 'order_id',
@@ -418,7 +422,8 @@ class StoreApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['body'] = body
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.place_order = Endpoint(
@@ -450,7 +455,8 @@ class StoreApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (order.Order,),
+ 'body':
+ (order.Order,),
},
'attribute_map': {
},
diff --git a/samples/client/petstore/python-experimental/petstore_api/api/user_api.py b/samples/client/petstore/python-experimental/petstore_api/api/user_api.py
index 17e2428b84c..9f754bb50a6 100644
--- a/samples/client/petstore/python-experimental/petstore_api/api/user_api.py
+++ b/samples/client/petstore/python-experimental/petstore_api/api/user_api.py
@@ -102,7 +102,8 @@ class UserApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['body'] = body
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.create_user = Endpoint(
@@ -134,7 +135,8 @@ class UserApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': (user.User,),
+ 'body':
+ (user.User,),
},
'attribute_map': {
},
@@ -204,7 +206,8 @@ class UserApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['body'] = body
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.create_users_with_array_input = Endpoint(
@@ -236,7 +239,8 @@ class UserApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': ([user.User],),
+ 'body':
+ ([user.User],),
},
'attribute_map': {
},
@@ -306,7 +310,8 @@ class UserApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['body'] = body
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.create_users_with_list_input = Endpoint(
@@ -338,7 +343,8 @@ class UserApi(object):
'allowed_values': {
},
'openapi_types': {
- 'body': ([user.User],),
+ 'body':
+ ([user.User],),
},
'attribute_map': {
},
@@ -409,7 +415,8 @@ class UserApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['username'] = username
+ kwargs['username'] = \
+ username
return self.call_with_http_info(**kwargs)
self.delete_user = Endpoint(
@@ -441,7 +448,8 @@ class UserApi(object):
'allowed_values': {
},
'openapi_types': {
- 'username': (str,),
+ 'username':
+ (str,),
},
'attribute_map': {
'username': 'username',
@@ -512,7 +520,8 @@ class UserApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['username'] = username
+ kwargs['username'] = \
+ username
return self.call_with_http_info(**kwargs)
self.get_user_by_name = Endpoint(
@@ -544,7 +553,8 @@ class UserApi(object):
'allowed_values': {
},
'openapi_types': {
- 'username': (str,),
+ 'username':
+ (str,),
},
'attribute_map': {
'username': 'username',
@@ -619,8 +629,10 @@ class UserApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['username'] = username
- kwargs['password'] = password
+ kwargs['username'] = \
+ username
+ kwargs['password'] = \
+ password
return self.call_with_http_info(**kwargs)
self.login_user = Endpoint(
@@ -654,8 +666,10 @@ class UserApi(object):
'allowed_values': {
},
'openapi_types': {
- 'username': (str,),
- 'password': (str,),
+ 'username':
+ (str,),
+ 'password':
+ (str,),
},
'attribute_map': {
'username': 'username',
@@ -828,8 +842,10 @@ class UserApi(object):
'_check_return_type', True
)
kwargs['_host_index'] = kwargs.get('_host_index', 0)
- kwargs['username'] = username
- kwargs['body'] = body
+ kwargs['username'] = \
+ username
+ kwargs['body'] = \
+ body
return self.call_with_http_info(**kwargs)
self.update_user = Endpoint(
@@ -863,8 +879,10 @@ class UserApi(object):
'allowed_values': {
},
'openapi_types': {
- 'username': (str,),
- 'body': (user.User,),
+ 'username':
+ (str,),
+ 'body':
+ (user.User,),
},
'attribute_map': {
'username': 'username',
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/animal.py b/samples/client/petstore/python-experimental/petstore_api/models/animal.py
index 2da7a5923a5..abb0d49e74c 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/animal.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/animal.py
@@ -31,11 +31,13 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import cat
except ImportError:
- cat = sys.modules['petstore_api.models.cat']
+ cat = sys.modules[
+ 'petstore_api.models.cat']
try:
from petstore_api.models import dog
except ImportError:
- dog = sys.modules['petstore_api.models.dog']
+ dog = sys.modules[
+ 'petstore_api.models.dog']
class Animal(ModelNormal):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/array_test.py b/samples/client/petstore/python-experimental/petstore_api/models/array_test.py
index 3c15d79a3d0..c99bc985cab 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/array_test.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/array_test.py
@@ -31,7 +31,8 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import read_only_first
except ImportError:
- read_only_first = sys.modules['petstore_api.models.read_only_first']
+ read_only_first = sys.modules[
+ 'petstore_api.models.read_only_first']
class ArrayTest(ModelNormal):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/cat.py b/samples/client/petstore/python-experimental/petstore_api/models/cat.py
index 6b4985dc4a9..229d0445554 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/cat.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/cat.py
@@ -31,11 +31,13 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import animal
except ImportError:
- animal = sys.modules['petstore_api.models.animal']
+ animal = sys.modules[
+ 'petstore_api.models.animal']
try:
from petstore_api.models import cat_all_of
except ImportError:
- cat_all_of = sys.modules['petstore_api.models.cat_all_of']
+ cat_all_of = sys.modules[
+ 'petstore_api.models.cat_all_of']
class Cat(ModelComposed):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/child.py b/samples/client/petstore/python-experimental/petstore_api/models/child.py
index 8a61f35ba14..9721a0b684f 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/child.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/child.py
@@ -31,11 +31,13 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import child_all_of
except ImportError:
- child_all_of = sys.modules['petstore_api.models.child_all_of']
+ child_all_of = sys.modules[
+ 'petstore_api.models.child_all_of']
try:
from petstore_api.models import parent
except ImportError:
- parent = sys.modules['petstore_api.models.parent']
+ parent = sys.modules[
+ 'petstore_api.models.parent']
class Child(ModelComposed):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/child_cat.py b/samples/client/petstore/python-experimental/petstore_api/models/child_cat.py
index b329281e9c2..7828dba8cb8 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/child_cat.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/child_cat.py
@@ -31,11 +31,13 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import child_cat_all_of
except ImportError:
- child_cat_all_of = sys.modules['petstore_api.models.child_cat_all_of']
+ child_cat_all_of = sys.modules[
+ 'petstore_api.models.child_cat_all_of']
try:
from petstore_api.models import parent_pet
except ImportError:
- parent_pet = sys.modules['petstore_api.models.parent_pet']
+ parent_pet = sys.modules[
+ 'petstore_api.models.parent_pet']
class ChildCat(ModelComposed):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/child_dog.py b/samples/client/petstore/python-experimental/petstore_api/models/child_dog.py
index eaea5cba93c..36180f15713 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/child_dog.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/child_dog.py
@@ -31,11 +31,13 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import child_dog_all_of
except ImportError:
- child_dog_all_of = sys.modules['petstore_api.models.child_dog_all_of']
+ child_dog_all_of = sys.modules[
+ 'petstore_api.models.child_dog_all_of']
try:
from petstore_api.models import parent_pet
except ImportError:
- parent_pet = sys.modules['petstore_api.models.parent_pet']
+ parent_pet = sys.modules[
+ 'petstore_api.models.parent_pet']
class ChildDog(ModelComposed):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/child_lizard.py b/samples/client/petstore/python-experimental/petstore_api/models/child_lizard.py
index a038974bb54..cb79d4ad604 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/child_lizard.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/child_lizard.py
@@ -31,11 +31,13 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import child_lizard_all_of
except ImportError:
- child_lizard_all_of = sys.modules['petstore_api.models.child_lizard_all_of']
+ child_lizard_all_of = sys.modules[
+ 'petstore_api.models.child_lizard_all_of']
try:
from petstore_api.models import parent_pet
except ImportError:
- parent_pet = sys.modules['petstore_api.models.parent_pet']
+ parent_pet = sys.modules[
+ 'petstore_api.models.parent_pet']
class ChildLizard(ModelComposed):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/dog.py b/samples/client/petstore/python-experimental/petstore_api/models/dog.py
index 54ccf0e390a..b29e31d4e5d 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/dog.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/dog.py
@@ -31,11 +31,13 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import animal
except ImportError:
- animal = sys.modules['petstore_api.models.animal']
+ animal = sys.modules[
+ 'petstore_api.models.animal']
try:
from petstore_api.models import dog_all_of
except ImportError:
- dog_all_of = sys.modules['petstore_api.models.dog_all_of']
+ dog_all_of = sys.modules[
+ 'petstore_api.models.dog_all_of']
class Dog(ModelComposed):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/enum_test.py b/samples/client/petstore/python-experimental/petstore_api/models/enum_test.py
index 5df1bcbc2e7..42a4c562150 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/enum_test.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/enum_test.py
@@ -31,7 +31,8 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import outer_enum
except ImportError:
- outer_enum = sys.modules['petstore_api.models.outer_enum']
+ outer_enum = sys.modules[
+ 'petstore_api.models.outer_enum']
class EnumTest(ModelNormal):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/file_schema_test_class.py b/samples/client/petstore/python-experimental/petstore_api/models/file_schema_test_class.py
index 62a9a4194a1..f1abb16cbc3 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/file_schema_test_class.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/file_schema_test_class.py
@@ -31,7 +31,8 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import file
except ImportError:
- file = sys.modules['petstore_api.models.file']
+ file = sys.modules[
+ 'petstore_api.models.file']
class FileSchemaTestClass(ModelNormal):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/map_test.py b/samples/client/petstore/python-experimental/petstore_api/models/map_test.py
index e6680cc7349..e996e27991c 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/map_test.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/map_test.py
@@ -31,7 +31,8 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import string_boolean_map
except ImportError:
- string_boolean_map = sys.modules['petstore_api.models.string_boolean_map']
+ string_boolean_map = sys.modules[
+ 'petstore_api.models.string_boolean_map']
class MapTest(ModelNormal):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/mixed_properties_and_additional_properties_class.py b/samples/client/petstore/python-experimental/petstore_api/models/mixed_properties_and_additional_properties_class.py
index 52969b942bf..60b89762456 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/mixed_properties_and_additional_properties_class.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/mixed_properties_and_additional_properties_class.py
@@ -31,7 +31,8 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import animal
except ImportError:
- animal = sys.modules['petstore_api.models.animal']
+ animal = sys.modules[
+ 'petstore_api.models.animal']
class MixedPropertiesAndAdditionalPropertiesClass(ModelNormal):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/outer_composite.py b/samples/client/petstore/python-experimental/petstore_api/models/outer_composite.py
index 013e386adff..067ac6a1400 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/outer_composite.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/outer_composite.py
@@ -31,7 +31,8 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import outer_number
except ImportError:
- outer_number = sys.modules['petstore_api.models.outer_number']
+ outer_number = sys.modules[
+ 'petstore_api.models.outer_number']
class OuterComposite(ModelNormal):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/parent.py b/samples/client/petstore/python-experimental/petstore_api/models/parent.py
index 4175d7792f6..70534d8026e 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/parent.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/parent.py
@@ -31,11 +31,13 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import grandparent
except ImportError:
- grandparent = sys.modules['petstore_api.models.grandparent']
+ grandparent = sys.modules[
+ 'petstore_api.models.grandparent']
try:
from petstore_api.models import parent_all_of
except ImportError:
- parent_all_of = sys.modules['petstore_api.models.parent_all_of']
+ parent_all_of = sys.modules[
+ 'petstore_api.models.parent_all_of']
class Parent(ModelComposed):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/parent_pet.py b/samples/client/petstore/python-experimental/petstore_api/models/parent_pet.py
index d98bdc6f657..16d00f42da5 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/parent_pet.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/parent_pet.py
@@ -31,19 +31,23 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import child_cat
except ImportError:
- child_cat = sys.modules['petstore_api.models.child_cat']
+ child_cat = sys.modules[
+ 'petstore_api.models.child_cat']
try:
from petstore_api.models import child_dog
except ImportError:
- child_dog = sys.modules['petstore_api.models.child_dog']
+ child_dog = sys.modules[
+ 'petstore_api.models.child_dog']
try:
from petstore_api.models import child_lizard
except ImportError:
- child_lizard = sys.modules['petstore_api.models.child_lizard']
+ child_lizard = sys.modules[
+ 'petstore_api.models.child_lizard']
try:
from petstore_api.models import grandparent_animal
except ImportError:
- grandparent_animal = sys.modules['petstore_api.models.grandparent_animal']
+ grandparent_animal = sys.modules[
+ 'petstore_api.models.grandparent_animal']
class ParentPet(ModelComposed):
diff --git a/samples/client/petstore/python-experimental/petstore_api/models/pet.py b/samples/client/petstore/python-experimental/petstore_api/models/pet.py
index 83b4679eb7a..11ffa6ff44f 100644
--- a/samples/client/petstore/python-experimental/petstore_api/models/pet.py
+++ b/samples/client/petstore/python-experimental/petstore_api/models/pet.py
@@ -31,11 +31,13 @@ from petstore_api.model_utils import ( # noqa: F401
try:
from petstore_api.models import category
except ImportError:
- category = sys.modules['petstore_api.models.category']
+ category = sys.modules[
+ 'petstore_api.models.category']
try:
from petstore_api.models import tag
except ImportError:
- tag = sys.modules['petstore_api.models.tag']
+ tag = sys.modules[
+ 'petstore_api.models.tag']
class Pet(ModelNormal):
diff --git a/samples/openapi3/client/petstore/python-experimental/.gitignore b/samples/openapi3/client/petstore/python-experimental/.gitignore
new file mode 100644
index 00000000000..43995bd42fa
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/.gitignore
@@ -0,0 +1,66 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*,cover
+.hypothesis/
+venv/
+.venv/
+.python-version
+.pytest_cache
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+#Ipython Notebook
+.ipynb_checkpoints
diff --git a/samples/openapi3/client/petstore/python-experimental/.openapi-generator-ignore b/samples/openapi3/client/petstore/python-experimental/.openapi-generator-ignore
new file mode 100644
index 00000000000..7484ee590a3
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/samples/openapi3/client/petstore/python-experimental/.openapi-generator/VERSION b/samples/openapi3/client/petstore/python-experimental/.openapi-generator/VERSION
new file mode 100644
index 00000000000..58592f031f6
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/.openapi-generator/VERSION
@@ -0,0 +1 @@
+4.2.3-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/python-experimental/.travis.yml b/samples/openapi3/client/petstore/python-experimental/.travis.yml
new file mode 100644
index 00000000000..388de83128f
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/.travis.yml
@@ -0,0 +1,15 @@
+# ref: https://docs.travis-ci.com/user/languages/python
+language: python
+python:
+ - "2.7"
+ - "3.2"
+ - "3.3"
+ - "3.4"
+ - "3.5"
+ - "3.6"
+ - "3.7"
+ - "3.8"
+# command to install dependencies
+install: "pip install -r requirements.txt"
+# command to run tests
+script: nosetests
diff --git a/samples/openapi3/client/petstore/python-experimental/Makefile b/samples/openapi3/client/petstore/python-experimental/Makefile
new file mode 100644
index 00000000000..9354f43d509
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/Makefile
@@ -0,0 +1,19 @@
+REQUIREMENTS_FILE=dev-requirements.txt
+REQUIREMENTS_OUT=dev-requirements.txt.log
+SETUP_OUT=*.egg-info
+VENV=.venv
+
+clean:
+ rm -rf $(REQUIREMENTS_OUT)
+ rm -rf $(SETUP_OUT)
+ rm -rf $(VENV)
+ rm -rf .tox
+ rm -rf .coverage
+ find . -name "*.py[oc]" -delete
+ find . -name "__pycache__" -delete
+
+test: clean
+ bash ./test_python2.sh
+
+test-all: clean
+ bash ./test_python2_and_3.sh
diff --git a/samples/openapi3/client/petstore/python-experimental/README.md b/samples/openapi3/client/petstore/python-experimental/README.md
new file mode 100644
index 00000000000..8e82b0a81f3
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/README.md
@@ -0,0 +1,210 @@
+# petstore-api
+This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+
+This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
+
+- API version: 1.0.0
+- Package version: 1.0.0
+- Build package: org.openapitools.codegen.languages.PythonClientExperimentalCodegen
+
+## Requirements.
+
+Python 2.7 and 3.4+
+
+## Installation & Usage
+### pip install
+
+If the python package is hosted on a repository, you can install directly using:
+
+```sh
+pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git
+```
+(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git`)
+
+Then import the package:
+```python
+import petstore_api
+```
+
+### Setuptools
+
+Install via [Setuptools](http://pypi.python.org/pypi/setuptools).
+
+```sh
+python setup.py install --user
+```
+(or `sudo python setup.py install` to install the package for all users)
+
+Then import the package:
+```python
+import petstore_api
+```
+
+## Getting Started
+
+Please follow the [installation procedure](#installation--usage) and then run the following:
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.AnotherFakeApi(petstore_api.ApiClient(configuration))
+client_client = petstore_api.Client() # client.Client | client model
+
+try:
+ # To test special tags
+ api_response = api_instance.call_123_test_special_tags(client_client)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling AnotherFakeApi->call_123_test_special_tags: %s\n" % e)
+
+```
+
+## Documentation for API Endpoints
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+*AnotherFakeApi* | [**call_123_test_special_tags**](docs/AnotherFakeApi.md#call_123_test_special_tags) | **PATCH** /another-fake/dummy | To test special tags
+*DefaultApi* | [**foo_get**](docs/DefaultApi.md#foo_get) | **GET** /foo |
+*FakeApi* | [**fake_health_get**](docs/FakeApi.md#fake_health_get) | **GET** /fake/health | Health check endpoint
+*FakeApi* | [**fake_outer_boolean_serialize**](docs/FakeApi.md#fake_outer_boolean_serialize) | **POST** /fake/outer/boolean |
+*FakeApi* | [**fake_outer_composite_serialize**](docs/FakeApi.md#fake_outer_composite_serialize) | **POST** /fake/outer/composite |
+*FakeApi* | [**fake_outer_number_serialize**](docs/FakeApi.md#fake_outer_number_serialize) | **POST** /fake/outer/number |
+*FakeApi* | [**fake_outer_string_serialize**](docs/FakeApi.md#fake_outer_string_serialize) | **POST** /fake/outer/string |
+*FakeApi* | [**test_body_with_file_schema**](docs/FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema |
+*FakeApi* | [**test_body_with_query_params**](docs/FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params |
+*FakeApi* | [**test_client_model**](docs/FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model
+*FakeApi* | [**test_endpoint_parameters**](docs/FakeApi.md#test_endpoint_parameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+*FakeApi* | [**test_enum_parameters**](docs/FakeApi.md#test_enum_parameters) | **GET** /fake | To test enum parameters
+*FakeApi* | [**test_group_parameters**](docs/FakeApi.md#test_group_parameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional)
+*FakeApi* | [**test_inline_additional_properties**](docs/FakeApi.md#test_inline_additional_properties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties
+*FakeApi* | [**test_json_form_data**](docs/FakeApi.md#test_json_form_data) | **GET** /fake/jsonFormData | test json serialization of form data
+*FakeApi* | [**test_query_parameter_collection_format**](docs/FakeApi.md#test_query_parameter_collection_format) | **PUT** /fake/test-query-paramters |
+*FakeClassnameTags123Api* | [**test_classname**](docs/FakeClassnameTags123Api.md#test_classname) | **PATCH** /fake_classname_test | To test class name in snake case
+*PetApi* | [**add_pet**](docs/PetApi.md#add_pet) | **POST** /pet | Add a new pet to the store
+*PetApi* | [**delete_pet**](docs/PetApi.md#delete_pet) | **DELETE** /pet/{petId} | Deletes a pet
+*PetApi* | [**find_pets_by_status**](docs/PetApi.md#find_pets_by_status) | **GET** /pet/findByStatus | Finds Pets by status
+*PetApi* | [**find_pets_by_tags**](docs/PetApi.md#find_pets_by_tags) | **GET** /pet/findByTags | Finds Pets by tags
+*PetApi* | [**get_pet_by_id**](docs/PetApi.md#get_pet_by_id) | **GET** /pet/{petId} | Find pet by ID
+*PetApi* | [**update_pet**](docs/PetApi.md#update_pet) | **PUT** /pet | Update an existing pet
+*PetApi* | [**update_pet_with_form**](docs/PetApi.md#update_pet_with_form) | **POST** /pet/{petId} | Updates a pet in the store with form data
+*PetApi* | [**upload_file**](docs/PetApi.md#upload_file) | **POST** /pet/{petId}/uploadImage | uploads an image
+*PetApi* | [**upload_file_with_required_file**](docs/PetApi.md#upload_file_with_required_file) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required)
+*StoreApi* | [**delete_order**](docs/StoreApi.md#delete_order) | **DELETE** /store/order/{order_id} | Delete purchase order by ID
+*StoreApi* | [**get_inventory**](docs/StoreApi.md#get_inventory) | **GET** /store/inventory | Returns pet inventories by status
+*StoreApi* | [**get_order_by_id**](docs/StoreApi.md#get_order_by_id) | **GET** /store/order/{order_id} | Find purchase order by ID
+*StoreApi* | [**place_order**](docs/StoreApi.md#place_order) | **POST** /store/order | Place an order for a pet
+*UserApi* | [**create_user**](docs/UserApi.md#create_user) | **POST** /user | Create user
+*UserApi* | [**create_users_with_array_input**](docs/UserApi.md#create_users_with_array_input) | **POST** /user/createWithArray | Creates list of users with given input array
+*UserApi* | [**create_users_with_list_input**](docs/UserApi.md#create_users_with_list_input) | **POST** /user/createWithList | Creates list of users with given input array
+*UserApi* | [**delete_user**](docs/UserApi.md#delete_user) | **DELETE** /user/{username} | Delete user
+*UserApi* | [**get_user_by_name**](docs/UserApi.md#get_user_by_name) | **GET** /user/{username} | Get user by user name
+*UserApi* | [**login_user**](docs/UserApi.md#login_user) | **GET** /user/login | Logs user into the system
+*UserApi* | [**logout_user**](docs/UserApi.md#logout_user) | **GET** /user/logout | Logs out current logged in user session
+*UserApi* | [**update_user**](docs/UserApi.md#update_user) | **PUT** /user/{username} | Updated user
+
+
+## Documentation For Models
+
+ - [additional_properties_class.AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md)
+ - [animal.Animal](docs/Animal.md)
+ - [api_response.ApiResponse](docs/ApiResponse.md)
+ - [array_of_array_of_number_only.ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md)
+ - [array_of_number_only.ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md)
+ - [array_test.ArrayTest](docs/ArrayTest.md)
+ - [capitalization.Capitalization](docs/Capitalization.md)
+ - [cat.Cat](docs/Cat.md)
+ - [cat_all_of.CatAllOf](docs/CatAllOf.md)
+ - [category.Category](docs/Category.md)
+ - [class_model.ClassModel](docs/ClassModel.md)
+ - [client.Client](docs/Client.md)
+ - [dog.Dog](docs/Dog.md)
+ - [dog_all_of.DogAllOf](docs/DogAllOf.md)
+ - [enum_arrays.EnumArrays](docs/EnumArrays.md)
+ - [enum_class.EnumClass](docs/EnumClass.md)
+ - [enum_test.EnumTest](docs/EnumTest.md)
+ - [file.File](docs/File.md)
+ - [file_schema_test_class.FileSchemaTestClass](docs/FileSchemaTestClass.md)
+ - [foo.Foo](docs/Foo.md)
+ - [format_test.FormatTest](docs/FormatTest.md)
+ - [has_only_read_only.HasOnlyReadOnly](docs/HasOnlyReadOnly.md)
+ - [health_check_result.HealthCheckResult](docs/HealthCheckResult.md)
+ - [inline_object.InlineObject](docs/InlineObject.md)
+ - [inline_object1.InlineObject1](docs/InlineObject1.md)
+ - [inline_object2.InlineObject2](docs/InlineObject2.md)
+ - [inline_object3.InlineObject3](docs/InlineObject3.md)
+ - [inline_object4.InlineObject4](docs/InlineObject4.md)
+ - [inline_object5.InlineObject5](docs/InlineObject5.md)
+ - [inline_response_default.InlineResponseDefault](docs/InlineResponseDefault.md)
+ - [list.List](docs/List.md)
+ - [map_test.MapTest](docs/MapTest.md)
+ - [mixed_properties_and_additional_properties_class.MixedPropertiesAndAdditionalPropertiesClass](docs/MixedPropertiesAndAdditionalPropertiesClass.md)
+ - [model200_response.Model200Response](docs/Model200Response.md)
+ - [model_return.ModelReturn](docs/ModelReturn.md)
+ - [name.Name](docs/Name.md)
+ - [nullable_class.NullableClass](docs/NullableClass.md)
+ - [number_only.NumberOnly](docs/NumberOnly.md)
+ - [order.Order](docs/Order.md)
+ - [outer_composite.OuterComposite](docs/OuterComposite.md)
+ - [outer_enum.OuterEnum](docs/OuterEnum.md)
+ - [outer_enum_default_value.OuterEnumDefaultValue](docs/OuterEnumDefaultValue.md)
+ - [outer_enum_integer.OuterEnumInteger](docs/OuterEnumInteger.md)
+ - [outer_enum_integer_default_value.OuterEnumIntegerDefaultValue](docs/OuterEnumIntegerDefaultValue.md)
+ - [pet.Pet](docs/Pet.md)
+ - [read_only_first.ReadOnlyFirst](docs/ReadOnlyFirst.md)
+ - [special_model_name.SpecialModelName](docs/SpecialModelName.md)
+ - [string_boolean_map.StringBooleanMap](docs/StringBooleanMap.md)
+ - [tag.Tag](docs/Tag.md)
+ - [user.User](docs/User.md)
+
+
+## Documentation For Authorization
+
+
+## api_key
+
+- **Type**: API key
+- **API key parameter name**: api_key
+- **Location**: HTTP header
+
+
+## api_key_query
+
+- **Type**: API key
+- **API key parameter name**: api_key_query
+- **Location**: URL query string
+
+
+## bearer_test
+
+- **Type**: Bearer authentication (JWT)
+
+
+## http_basic_test
+
+- **Type**: HTTP basic authentication
+
+
+## petstore_auth
+
+- **Type**: OAuth
+- **Flow**: implicit
+- **Authorization URL**: http://petstore.swagger.io/api/oauth/dialog
+- **Scopes**:
+ - **write:pets**: modify pets in your account
+ - **read:pets**: read your pets
+
+
+## Author
+
+
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/dev-requirements.txt b/samples/openapi3/client/petstore/python-experimental/dev-requirements.txt
new file mode 100644
index 00000000000..ccdfca62949
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/dev-requirements.txt
@@ -0,0 +1,2 @@
+tox
+flake8
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/AdditionalPropertiesClass.md b/samples/openapi3/client/petstore/python-experimental/docs/AdditionalPropertiesClass.md
new file mode 100644
index 00000000000..4df80090d8e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/AdditionalPropertiesClass.md
@@ -0,0 +1,11 @@
+# additional_properties_class.AdditionalPropertiesClass
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**map_property** | **{str: (str,)}** | | [optional]
+**map_of_map_property** | **{str: ({str: (str,)},)}** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Animal.md b/samples/openapi3/client/petstore/python-experimental/docs/Animal.md
new file mode 100644
index 00000000000..fda84ee28ee
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Animal.md
@@ -0,0 +1,11 @@
+# animal.Animal
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**class_name** | **str** | |
+**color** | **str** | | [optional] if omitted the server will use the default value of 'red'
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/AnotherFakeApi.md b/samples/openapi3/client/petstore/python-experimental/docs/AnotherFakeApi.md
new file mode 100644
index 00000000000..b9a70253492
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/AnotherFakeApi.md
@@ -0,0 +1,63 @@
+# petstore_api.AnotherFakeApi
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**call_123_test_special_tags**](AnotherFakeApi.md#call_123_test_special_tags) | **PATCH** /another-fake/dummy | To test special tags
+
+
+# **call_123_test_special_tags**
+> client.Client call_123_test_special_tags(client_client)
+
+To test special tags
+
+To test special tags and operation ID starting with number
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.AnotherFakeApi()
+client_client = petstore_api.Client() # client.Client | client model
+
+# example passing only required values which don't have defaults set
+try:
+ # To test special tags
+ api_response = api_instance.call_123_test_special_tags(client_client)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling AnotherFakeApi->call_123_test_special_tags: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **client_client** | [**client.Client**](Client.md)| client model |
+
+### Return type
+
+[**client.Client**](Client.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/ApiResponse.md b/samples/openapi3/client/petstore/python-experimental/docs/ApiResponse.md
new file mode 100644
index 00000000000..8f7ffa46134
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/ApiResponse.md
@@ -0,0 +1,12 @@
+# api_response.ApiResponse
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**code** | **int** | | [optional]
+**type** | **str** | | [optional]
+**message** | **str** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/ArrayOfArrayOfNumberOnly.md b/samples/openapi3/client/petstore/python-experimental/docs/ArrayOfArrayOfNumberOnly.md
new file mode 100644
index 00000000000..ab82c8c556d
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/ArrayOfArrayOfNumberOnly.md
@@ -0,0 +1,10 @@
+# array_of_array_of_number_only.ArrayOfArrayOfNumberOnly
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**array_array_number** | **[[float]]** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/ArrayOfNumberOnly.md b/samples/openapi3/client/petstore/python-experimental/docs/ArrayOfNumberOnly.md
new file mode 100644
index 00000000000..b8ffd843c8d
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/ArrayOfNumberOnly.md
@@ -0,0 +1,10 @@
+# array_of_number_only.ArrayOfNumberOnly
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**array_number** | **[float]** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/ArrayTest.md b/samples/openapi3/client/petstore/python-experimental/docs/ArrayTest.md
new file mode 100644
index 00000000000..22f198440e7
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/ArrayTest.md
@@ -0,0 +1,12 @@
+# array_test.ArrayTest
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**array_of_string** | **[str]** | | [optional]
+**array_array_of_integer** | **[[int]]** | | [optional]
+**array_array_of_model** | [**[[read_only_first.ReadOnlyFirst]]**](ReadOnlyFirst.md) | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Capitalization.md b/samples/openapi3/client/petstore/python-experimental/docs/Capitalization.md
new file mode 100644
index 00000000000..d402f2a571a
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Capitalization.md
@@ -0,0 +1,15 @@
+# capitalization.Capitalization
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**small_camel** | **str** | | [optional]
+**capital_camel** | **str** | | [optional]
+**small_snake** | **str** | | [optional]
+**capital_snake** | **str** | | [optional]
+**sca_eth_flow_points** | **str** | | [optional]
+**att_name** | **str** | Name of the pet | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Cat.md b/samples/openapi3/client/petstore/python-experimental/docs/Cat.md
new file mode 100644
index 00000000000..1d7b5b26d71
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Cat.md
@@ -0,0 +1,12 @@
+# cat.Cat
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**class_name** | **str** | |
+**declawed** | **bool** | | [optional]
+**color** | **str** | | [optional] if omitted the server will use the default value of 'red'
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/CatAllOf.md b/samples/openapi3/client/petstore/python-experimental/docs/CatAllOf.md
new file mode 100644
index 00000000000..653bb0aa353
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/CatAllOf.md
@@ -0,0 +1,10 @@
+# cat_all_of.CatAllOf
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**declawed** | **bool** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Category.md b/samples/openapi3/client/petstore/python-experimental/docs/Category.md
new file mode 100644
index 00000000000..bb122d910fc
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Category.md
@@ -0,0 +1,11 @@
+# category.Category
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **str** | | defaults to 'default-name'
+**id** | **int** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/ClassModel.md b/samples/openapi3/client/petstore/python-experimental/docs/ClassModel.md
new file mode 100644
index 00000000000..3f5d0075c1b
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/ClassModel.md
@@ -0,0 +1,11 @@
+# class_model.ClassModel
+
+Model for testing model with \"_class\" property
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**_class** | **str** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Client.md b/samples/openapi3/client/petstore/python-experimental/docs/Client.md
new file mode 100644
index 00000000000..4c7ce57f750
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Client.md
@@ -0,0 +1,10 @@
+# client.Client
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**client** | **str** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/DefaultApi.md b/samples/openapi3/client/petstore/python-experimental/docs/DefaultApi.md
new file mode 100644
index 00000000000..cf6c28c597c
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/DefaultApi.md
@@ -0,0 +1,56 @@
+# petstore_api.DefaultApi
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**foo_get**](DefaultApi.md#foo_get) | **GET** /foo |
+
+
+# **foo_get**
+> inline_response_default.InlineResponseDefault foo_get()
+
+
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.DefaultApi()
+
+# example, this endpoint has no required or optional parameters
+try:
+ api_response = api_instance.foo_get()
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling DefaultApi->foo_get: %s\n" % e)
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**inline_response_default.InlineResponseDefault**](InlineResponseDefault.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**0** | response | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Dog.md b/samples/openapi3/client/petstore/python-experimental/docs/Dog.md
new file mode 100644
index 00000000000..ec98b99dcec
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Dog.md
@@ -0,0 +1,12 @@
+# dog.Dog
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**class_name** | **str** | |
+**breed** | **str** | | [optional]
+**color** | **str** | | [optional] if omitted the server will use the default value of 'red'
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/DogAllOf.md b/samples/openapi3/client/petstore/python-experimental/docs/DogAllOf.md
new file mode 100644
index 00000000000..da3c29557df
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/DogAllOf.md
@@ -0,0 +1,10 @@
+# dog_all_of.DogAllOf
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**breed** | **str** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/EnumArrays.md b/samples/openapi3/client/petstore/python-experimental/docs/EnumArrays.md
new file mode 100644
index 00000000000..c2f22d45047
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/EnumArrays.md
@@ -0,0 +1,11 @@
+# enum_arrays.EnumArrays
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**just_symbol** | **str** | | [optional]
+**array_enum** | **[str]** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/EnumClass.md b/samples/openapi3/client/petstore/python-experimental/docs/EnumClass.md
new file mode 100644
index 00000000000..333307fde46
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/EnumClass.md
@@ -0,0 +1,10 @@
+# enum_class.EnumClass
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**value** | **str** | | defaults to '-efg'
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/EnumTest.md b/samples/openapi3/client/petstore/python-experimental/docs/EnumTest.md
new file mode 100644
index 00000000000..aee196204f9
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/EnumTest.md
@@ -0,0 +1,17 @@
+# enum_test.EnumTest
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**enum_string_required** | **str** | |
+**enum_string** | **str** | | [optional]
+**enum_integer** | **int** | | [optional]
+**enum_number** | **float** | | [optional]
+**outer_enum** | [**outer_enum.OuterEnum**](OuterEnum.md) | | [optional]
+**outer_enum_integer** | [**outer_enum_integer.OuterEnumInteger**](OuterEnumInteger.md) | | [optional]
+**outer_enum_default_value** | [**outer_enum_default_value.OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional]
+**outer_enum_integer_default_value** | [**outer_enum_integer_default_value.OuterEnumIntegerDefaultValue**](OuterEnumIntegerDefaultValue.md) | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/FakeApi.md b/samples/openapi3/client/petstore/python-experimental/docs/FakeApi.md
new file mode 100644
index 00000000000..63cbd5d1842
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/FakeApi.md
@@ -0,0 +1,849 @@
+# petstore_api.FakeApi
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**fake_health_get**](FakeApi.md#fake_health_get) | **GET** /fake/health | Health check endpoint
+[**fake_outer_boolean_serialize**](FakeApi.md#fake_outer_boolean_serialize) | **POST** /fake/outer/boolean |
+[**fake_outer_composite_serialize**](FakeApi.md#fake_outer_composite_serialize) | **POST** /fake/outer/composite |
+[**fake_outer_number_serialize**](FakeApi.md#fake_outer_number_serialize) | **POST** /fake/outer/number |
+[**fake_outer_string_serialize**](FakeApi.md#fake_outer_string_serialize) | **POST** /fake/outer/string |
+[**test_body_with_file_schema**](FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema |
+[**test_body_with_query_params**](FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params |
+[**test_client_model**](FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model
+[**test_endpoint_parameters**](FakeApi.md#test_endpoint_parameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+[**test_enum_parameters**](FakeApi.md#test_enum_parameters) | **GET** /fake | To test enum parameters
+[**test_group_parameters**](FakeApi.md#test_group_parameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional)
+[**test_inline_additional_properties**](FakeApi.md#test_inline_additional_properties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties
+[**test_json_form_data**](FakeApi.md#test_json_form_data) | **GET** /fake/jsonFormData | test json serialization of form data
+[**test_query_parameter_collection_format**](FakeApi.md#test_query_parameter_collection_format) | **PUT** /fake/test-query-paramters |
+
+
+# **fake_health_get**
+> health_check_result.HealthCheckResult fake_health_get()
+
+Health check endpoint
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+
+# example, this endpoint has no required or optional parameters
+try:
+ # Health check endpoint
+ api_response = api_instance.fake_health_get()
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->fake_health_get: %s\n" % e)
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**health_check_result.HealthCheckResult**](HealthCheckResult.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | The instance started successfully | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **fake_outer_boolean_serialize**
+> bool fake_outer_boolean_serialize()
+
+
+
+Test serialization of outer boolean types
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+body = True # bool | Input boolean as post body (optional)
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ api_response = api_instance.fake_outer_boolean_serialize(body=body)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->fake_outer_boolean_serialize: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | **bool**| Input boolean as post body | [optional]
+
+### Return type
+
+**bool**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: */*
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Output boolean | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **fake_outer_composite_serialize**
+> outer_composite.OuterComposite fake_outer_composite_serialize()
+
+
+
+Test serialization of object with outer number type
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+outer_composite_outer_composite = petstore_api.OuterComposite() # outer_composite.OuterComposite | Input composite as post body (optional)
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ api_response = api_instance.fake_outer_composite_serialize(outer_composite_outer_composite=outer_composite_outer_composite)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->fake_outer_composite_serialize: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **outer_composite_outer_composite** | [**outer_composite.OuterComposite**](OuterComposite.md)| Input composite as post body | [optional]
+
+### Return type
+
+[**outer_composite.OuterComposite**](OuterComposite.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: */*
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Output composite | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **fake_outer_number_serialize**
+> float fake_outer_number_serialize()
+
+
+
+Test serialization of outer number types
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+body = 3.4 # float | Input number as post body (optional)
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ api_response = api_instance.fake_outer_number_serialize(body=body)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->fake_outer_number_serialize: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | **float**| Input number as post body | [optional]
+
+### Return type
+
+**float**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: */*
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Output number | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **fake_outer_string_serialize**
+> str fake_outer_string_serialize()
+
+
+
+Test serialization of outer string types
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+body = 'body_example' # str | Input string as post body (optional)
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ api_response = api_instance.fake_outer_string_serialize(body=body)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->fake_outer_string_serialize: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | **str**| Input string as post body | [optional]
+
+### Return type
+
+**str**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: */*
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Output string | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **test_body_with_file_schema**
+> test_body_with_file_schema(file_schema_test_class_file_schema_test_class)
+
+
+
+For this test, the body for this request much reference a schema named `File`.
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+file_schema_test_class_file_schema_test_class = petstore_api.FileSchemaTestClass() # file_schema_test_class.FileSchemaTestClass |
+
+# example passing only required values which don't have defaults set
+try:
+ api_instance.test_body_with_file_schema(file_schema_test_class_file_schema_test_class)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_body_with_file_schema: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **file_schema_test_class_file_schema_test_class** | [**file_schema_test_class.FileSchemaTestClass**](FileSchemaTestClass.md)| |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Success | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **test_body_with_query_params**
+> test_body_with_query_params(query, user_user)
+
+
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+query = 'query_example' # str |
+user_user = petstore_api.User() # user.User |
+
+# example passing only required values which don't have defaults set
+try:
+ api_instance.test_body_with_query_params(query, user_user)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_body_with_query_params: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **query** | **str**| |
+ **user_user** | [**user.User**](User.md)| |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Success | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **test_client_model**
+> client.Client test_client_model(client_client)
+
+To test \"client\" model
+
+To test \"client\" model
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+client_client = petstore_api.Client() # client.Client | client model
+
+# example passing only required values which don't have defaults set
+try:
+ # To test \"client\" model
+ api_response = api_instance.test_client_model(client_client)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_client_model: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **client_client** | [**client.Client**](Client.md)| client model |
+
+### Return type
+
+[**client.Client**](Client.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **test_endpoint_parameters**
+> test_endpoint_parameters(number, double, pattern_without_delimiter, byte)
+
+Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+
+Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+
+### Example
+
+* Basic Authentication (http_basic_test):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure HTTP basic authorization: http_basic_test
+configuration.username = 'YOUR_USERNAME'
+configuration.password = 'YOUR_PASSWORD'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi(petstore_api.ApiClient(configuration))
+number = 3.4 # float | None
+double = 3.4 # float | None
+pattern_without_delimiter = 'pattern_without_delimiter_example' # str | None
+byte = 'byte_example' # str | None
+integer = 56 # int | None (optional)
+int32 = 56 # int | None (optional)
+int64 = 56 # int | None (optional)
+float = 3.4 # float | None (optional)
+string = 'string_example' # str | None (optional)
+binary = open('/path/to/file', 'rb') # file_type | None (optional)
+date = '2013-10-20' # date | None (optional)
+date_time = '2013-10-20T19:20:30+01:00' # datetime | None (optional)
+password = 'password_example' # str | None (optional)
+param_callback = 'param_callback_example' # str | None (optional)
+
+# example passing only required values which don't have defaults set
+try:
+ # Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+ api_instance.test_endpoint_parameters(number, double, pattern_without_delimiter, byte)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_endpoint_parameters: %s\n" % e)
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ # Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+ api_instance.test_endpoint_parameters(number, double, pattern_without_delimiter, byte, integer=integer, int32=int32, int64=int64, float=float, string=string, binary=binary, date=date, date_time=date_time, password=password, param_callback=param_callback)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_endpoint_parameters: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **number** | **float**| None |
+ **double** | **float**| None |
+ **pattern_without_delimiter** | **str**| None |
+ **byte** | **str**| None |
+ **integer** | **int**| None | [optional]
+ **int32** | **int**| None | [optional]
+ **int64** | **int**| None | [optional]
+ **float** | **float**| None | [optional]
+ **string** | **str**| None | [optional]
+ **binary** | **file_type**| None | [optional]
+ **date** | **date**| None | [optional]
+ **date_time** | **datetime**| None | [optional]
+ **password** | **str**| None | [optional]
+ **param_callback** | **str**| None | [optional]
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+[http_basic_test](../README.md#http_basic_test)
+
+### HTTP request headers
+
+ - **Content-Type**: application/x-www-form-urlencoded
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**400** | Invalid username supplied | - |
+**404** | User not found | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **test_enum_parameters**
+> test_enum_parameters()
+
+To test enum parameters
+
+To test enum parameters
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+enum_header_string_array = ['enum_header_string_array_example'] # [str] | Header parameter enum test (string array) (optional)
+enum_header_string = '-efg' # str | Header parameter enum test (string) (optional) if omitted the server will use the default value of '-efg'
+enum_query_string_array = ['enum_query_string_array_example'] # [str] | Query parameter enum test (string array) (optional)
+enum_query_string = '-efg' # str | Query parameter enum test (string) (optional) if omitted the server will use the default value of '-efg'
+enum_query_integer = 56 # int | Query parameter enum test (double) (optional)
+enum_query_double = 3.4 # float | Query parameter enum test (double) (optional)
+enum_form_string_array = '$' # [str] | Form parameter enum test (string array) (optional) if omitted the server will use the default value of '$'
+enum_form_string = '-efg' # str | Form parameter enum test (string) (optional) if omitted the server will use the default value of '-efg'
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ # To test enum parameters
+ api_instance.test_enum_parameters(enum_header_string_array=enum_header_string_array, enum_header_string=enum_header_string, enum_query_string_array=enum_query_string_array, enum_query_string=enum_query_string, enum_query_integer=enum_query_integer, enum_query_double=enum_query_double, enum_form_string_array=enum_form_string_array, enum_form_string=enum_form_string)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_enum_parameters: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **enum_header_string_array** | **[str]**| Header parameter enum test (string array) | [optional]
+ **enum_header_string** | **str**| Header parameter enum test (string) | [optional] if omitted the server will use the default value of '-efg'
+ **enum_query_string_array** | **[str]**| Query parameter enum test (string array) | [optional]
+ **enum_query_string** | **str**| Query parameter enum test (string) | [optional] if omitted the server will use the default value of '-efg'
+ **enum_query_integer** | **int**| Query parameter enum test (double) | [optional]
+ **enum_query_double** | **float**| Query parameter enum test (double) | [optional]
+ **enum_form_string_array** | **[str]**| Form parameter enum test (string array) | [optional] if omitted the server will use the default value of '$'
+ **enum_form_string** | **str**| Form parameter enum test (string) | [optional] if omitted the server will use the default value of '-efg'
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/x-www-form-urlencoded
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**400** | Invalid request | - |
+**404** | Not found | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **test_group_parameters**
+> test_group_parameters(required_string_group, required_boolean_group, required_int64_group)
+
+Fake endpoint to test group parameters (optional)
+
+Fake endpoint to test group parameters (optional)
+
+### Example
+
+* Bearer (JWT) Authentication (bearer_test):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure Bearer authorization (JWT): bearer_test
+configuration.access_token = 'YOUR_BEARER_TOKEN'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi(petstore_api.ApiClient(configuration))
+required_string_group = 56 # int | Required String in group parameters
+required_boolean_group = True # bool | Required Boolean in group parameters
+required_int64_group = 56 # int | Required Integer in group parameters
+string_group = 56 # int | String in group parameters (optional)
+boolean_group = True # bool | Boolean in group parameters (optional)
+int64_group = 56 # int | Integer in group parameters (optional)
+
+# example passing only required values which don't have defaults set
+try:
+ # Fake endpoint to test group parameters (optional)
+ api_instance.test_group_parameters(required_string_group, required_boolean_group, required_int64_group)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_group_parameters: %s\n" % e)
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ # Fake endpoint to test group parameters (optional)
+ api_instance.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_group_parameters: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **required_string_group** | **int**| Required String in group parameters |
+ **required_boolean_group** | **bool**| Required Boolean in group parameters |
+ **required_int64_group** | **int**| Required Integer in group parameters |
+ **string_group** | **int**| String in group parameters | [optional]
+ **boolean_group** | **bool**| Boolean in group parameters | [optional]
+ **int64_group** | **int**| Integer in group parameters | [optional]
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+[bearer_test](../README.md#bearer_test)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**400** | Someting wrong | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **test_inline_additional_properties**
+> test_inline_additional_properties(request_body)
+
+test inline additionalProperties
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+request_body = {'key': 'request_body_example'} # {str: (str,)} | request body
+
+# example passing only required values which don't have defaults set
+try:
+ # test inline additionalProperties
+ api_instance.test_inline_additional_properties(request_body)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_inline_additional_properties: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **request_body** | **{str: (str,)}**| request body |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **test_json_form_data**
+> test_json_form_data(param, param2)
+
+test json serialization of form data
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+param = 'param_example' # str | field1
+param2 = 'param2_example' # str | field2
+
+# example passing only required values which don't have defaults set
+try:
+ # test json serialization of form data
+ api_instance.test_json_form_data(param, param2)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_json_form_data: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **param** | **str**| field1 |
+ **param2** | **str**| field2 |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/x-www-form-urlencoded
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **test_query_parameter_collection_format**
+> test_query_parameter_collection_format(pipe, ioutil, http, url, context)
+
+
+
+To test the collection format in query parameters
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.FakeApi()
+pipe = ['pipe_example'] # [str] |
+ioutil = ['ioutil_example'] # [str] |
+http = ['http_example'] # [str] |
+url = ['url_example'] # [str] |
+context = ['context_example'] # [str] |
+
+# example passing only required values which don't have defaults set
+try:
+ api_instance.test_query_parameter_collection_format(pipe, ioutil, http, url, context)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeApi->test_query_parameter_collection_format: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **pipe** | **[str]**| |
+ **ioutil** | **[str]**| |
+ **http** | **[str]**| |
+ **url** | **[str]**| |
+ **context** | **[str]**| |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Success | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/FakeClassnameTags123Api.md b/samples/openapi3/client/petstore/python-experimental/docs/FakeClassnameTags123Api.md
new file mode 100644
index 00000000000..4f78b1bd4cb
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/FakeClassnameTags123Api.md
@@ -0,0 +1,71 @@
+# petstore_api.FakeClassnameTags123Api
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**test_classname**](FakeClassnameTags123Api.md#test_classname) | **PATCH** /fake_classname_test | To test class name in snake case
+
+
+# **test_classname**
+> client.Client test_classname(client_client)
+
+To test class name in snake case
+
+To test class name in snake case
+
+### Example
+
+* Api Key Authentication (api_key_query):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure API key authorization: api_key_query
+configuration.api_key['api_key_query'] = 'YOUR_API_KEY'
+# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
+# configuration.api_key_prefix['api_key_query'] = 'Bearer'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.FakeClassnameTags123Api(petstore_api.ApiClient(configuration))
+client_client = petstore_api.Client() # client.Client | client model
+
+# example passing only required values which don't have defaults set
+try:
+ # To test class name in snake case
+ api_response = api_instance.test_classname(client_client)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling FakeClassnameTags123Api->test_classname: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **client_client** | [**client.Client**](Client.md)| client model |
+
+### Return type
+
+[**client.Client**](Client.md)
+
+### Authorization
+
+[api_key_query](../README.md#api_key_query)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/File.md b/samples/openapi3/client/petstore/python-experimental/docs/File.md
new file mode 100644
index 00000000000..2847323a098
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/File.md
@@ -0,0 +1,11 @@
+# file.File
+
+Must be named `File` for test.
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**source_uri** | **str** | Test capitalization | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/FileSchemaTestClass.md b/samples/openapi3/client/petstore/python-experimental/docs/FileSchemaTestClass.md
new file mode 100644
index 00000000000..807350c62f2
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/FileSchemaTestClass.md
@@ -0,0 +1,11 @@
+# file_schema_test_class.FileSchemaTestClass
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**file** | [**file.File**](File.md) | | [optional]
+**files** | [**[file.File]**](File.md) | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Foo.md b/samples/openapi3/client/petstore/python-experimental/docs/Foo.md
new file mode 100644
index 00000000000..570d1dac093
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Foo.md
@@ -0,0 +1,10 @@
+# foo.Foo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bar** | **str** | | [optional] if omitted the server will use the default value of 'bar'
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/FormatTest.md b/samples/openapi3/client/petstore/python-experimental/docs/FormatTest.md
new file mode 100644
index 00000000000..cb7e31877a7
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/FormatTest.md
@@ -0,0 +1,24 @@
+# format_test.FormatTest
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**number** | **float** | |
+**byte** | **str** | |
+**date** | **date** | |
+**password** | **str** | |
+**integer** | **int** | | [optional]
+**int32** | **int** | | [optional]
+**int64** | **int** | | [optional]
+**float** | **float** | | [optional]
+**double** | **float** | | [optional]
+**string** | **str** | | [optional]
+**binary** | **file_type** | | [optional]
+**date_time** | **datetime** | | [optional]
+**uuid** | **str** | | [optional]
+**pattern_with_digits** | **str** | A string that is a 10 digit number. Can have leading zeros. | [optional]
+**pattern_with_digits_and_delimiter** | **str** | A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01. | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/HasOnlyReadOnly.md b/samples/openapi3/client/petstore/python-experimental/docs/HasOnlyReadOnly.md
new file mode 100644
index 00000000000..f2194e269ed
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/HasOnlyReadOnly.md
@@ -0,0 +1,11 @@
+# has_only_read_only.HasOnlyReadOnly
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bar** | **str** | | [optional] [readonly]
+**foo** | **str** | | [optional] [readonly]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/HealthCheckResult.md b/samples/openapi3/client/petstore/python-experimental/docs/HealthCheckResult.md
new file mode 100644
index 00000000000..280ddc2eaf3
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/HealthCheckResult.md
@@ -0,0 +1,11 @@
+# health_check_result.HealthCheckResult
+
+Just a string to inform instance is up and running. Make it nullable in hope to get it as pointer in generated model.
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**nullable_message** | **str, none_type** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/InlineObject.md b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject.md
new file mode 100644
index 00000000000..362cc36d1f0
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject.md
@@ -0,0 +1,11 @@
+# inline_object.InlineObject
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **str** | Updated name of the pet | [optional]
+**status** | **str** | Updated status of the pet | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/InlineObject1.md b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject1.md
new file mode 100644
index 00000000000..3090ff26994
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject1.md
@@ -0,0 +1,11 @@
+# inline_object1.InlineObject1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**additional_metadata** | **str** | Additional data to pass to server | [optional]
+**file** | **file_type** | file to upload | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/InlineObject2.md b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject2.md
new file mode 100644
index 00000000000..f8ea923f4e0
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject2.md
@@ -0,0 +1,11 @@
+# inline_object2.InlineObject2
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**enum_form_string_array** | **[str]** | Form parameter enum test (string array) | [optional]
+**enum_form_string** | **str** | Form parameter enum test (string) | [optional] if omitted the server will use the default value of '-efg'
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/InlineObject3.md b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject3.md
new file mode 100644
index 00000000000..050d635dd25
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject3.md
@@ -0,0 +1,23 @@
+# inline_object3.InlineObject3
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**number** | **float** | None |
+**double** | **float** | None |
+**pattern_without_delimiter** | **str** | None |
+**byte** | **str** | None |
+**integer** | **int** | None | [optional]
+**int32** | **int** | None | [optional]
+**int64** | **int** | None | [optional]
+**float** | **float** | None | [optional]
+**string** | **str** | None | [optional]
+**binary** | **file_type** | None | [optional]
+**date** | **date** | None | [optional]
+**date_time** | **datetime** | None | [optional]
+**password** | **str** | None | [optional]
+**callback** | **str** | None | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/InlineObject4.md b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject4.md
new file mode 100644
index 00000000000..30ee0475e79
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject4.md
@@ -0,0 +1,11 @@
+# inline_object4.InlineObject4
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**param** | **str** | field1 |
+**param2** | **str** | field2 |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/InlineObject5.md b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject5.md
new file mode 100644
index 00000000000..56d245f1683
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/InlineObject5.md
@@ -0,0 +1,11 @@
+# inline_object5.InlineObject5
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**required_file** | **file_type** | file to upload |
+**additional_metadata** | **str** | Additional data to pass to server | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/InlineResponseDefault.md b/samples/openapi3/client/petstore/python-experimental/docs/InlineResponseDefault.md
new file mode 100644
index 00000000000..295326496d7
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/InlineResponseDefault.md
@@ -0,0 +1,10 @@
+# inline_response_default.InlineResponseDefault
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**string** | [**foo.Foo**](Foo.md) | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/List.md b/samples/openapi3/client/petstore/python-experimental/docs/List.md
new file mode 100644
index 00000000000..28e2ec05968
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/List.md
@@ -0,0 +1,10 @@
+# list.List
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**_123_list** | **str** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/MapTest.md b/samples/openapi3/client/petstore/python-experimental/docs/MapTest.md
new file mode 100644
index 00000000000..9fc13abebdc
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/MapTest.md
@@ -0,0 +1,13 @@
+# map_test.MapTest
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**map_map_of_string** | **{str: ({str: (str,)},)}** | | [optional]
+**map_of_enum_string** | **{str: (str,)}** | | [optional]
+**direct_map** | **{str: (bool,)}** | | [optional]
+**indirect_map** | [**string_boolean_map.StringBooleanMap**](StringBooleanMap.md) | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/MixedPropertiesAndAdditionalPropertiesClass.md b/samples/openapi3/client/petstore/python-experimental/docs/MixedPropertiesAndAdditionalPropertiesClass.md
new file mode 100644
index 00000000000..87cda996e76
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/MixedPropertiesAndAdditionalPropertiesClass.md
@@ -0,0 +1,12 @@
+# mixed_properties_and_additional_properties_class.MixedPropertiesAndAdditionalPropertiesClass
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uuid** | **str** | | [optional]
+**date_time** | **datetime** | | [optional]
+**map** | [**{str: (animal.Animal,)}**](Animal.md) | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Model200Response.md b/samples/openapi3/client/petstore/python-experimental/docs/Model200Response.md
new file mode 100644
index 00000000000..90f5c2c025d
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Model200Response.md
@@ -0,0 +1,12 @@
+# model200_response.Model200Response
+
+Model for testing model name starting with number
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **int** | | [optional]
+**_class** | **str** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/ModelReturn.md b/samples/openapi3/client/petstore/python-experimental/docs/ModelReturn.md
new file mode 100644
index 00000000000..3be9912b753
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/ModelReturn.md
@@ -0,0 +1,11 @@
+# model_return.ModelReturn
+
+Model for testing reserved words
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**_return** | **int** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Name.md b/samples/openapi3/client/petstore/python-experimental/docs/Name.md
new file mode 100644
index 00000000000..777b79a3d8b
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Name.md
@@ -0,0 +1,14 @@
+# name.Name
+
+Model for testing model name same as property name
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **int** | |
+**snake_case** | **int** | | [optional] [readonly]
+**_property** | **str** | | [optional]
+**_123_number** | **int** | | [optional] [readonly]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/NullableClass.md b/samples/openapi3/client/petstore/python-experimental/docs/NullableClass.md
new file mode 100644
index 00000000000..7b1fe8506a6
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/NullableClass.md
@@ -0,0 +1,22 @@
+# nullable_class.NullableClass
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**integer_prop** | **int, none_type** | | [optional]
+**number_prop** | **float, none_type** | | [optional]
+**boolean_prop** | **bool, none_type** | | [optional]
+**string_prop** | **str, none_type** | | [optional]
+**date_prop** | **date, none_type** | | [optional]
+**datetime_prop** | **datetime, none_type** | | [optional]
+**array_nullable_prop** | **[bool, date, datetime, dict, float, int, list, str], none_type** | | [optional]
+**array_and_items_nullable_prop** | **[bool, date, datetime, dict, float, int, list, str, none_type], none_type** | | [optional]
+**array_items_nullable** | **[bool, date, datetime, dict, float, int, list, str, none_type]** | | [optional]
+**object_nullable_prop** | **{str: (bool, date, datetime, dict, float, int, list, str,)}, none_type** | | [optional]
+**object_and_items_nullable_prop** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type** | | [optional]
+**object_items_nullable** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}** | | [optional]
+**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/NumberOnly.md b/samples/openapi3/client/petstore/python-experimental/docs/NumberOnly.md
new file mode 100644
index 00000000000..ea1a09d2934
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/NumberOnly.md
@@ -0,0 +1,10 @@
+# number_only.NumberOnly
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**just_number** | **float** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Order.md b/samples/openapi3/client/petstore/python-experimental/docs/Order.md
new file mode 100644
index 00000000000..9569ea55e55
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Order.md
@@ -0,0 +1,15 @@
+# order.Order
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **int** | | [optional]
+**pet_id** | **int** | | [optional]
+**quantity** | **int** | | [optional]
+**ship_date** | **datetime** | | [optional]
+**status** | **str** | Order Status | [optional]
+**complete** | **bool** | | [optional] if omitted the server will use the default value of False
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/OuterComposite.md b/samples/openapi3/client/petstore/python-experimental/docs/OuterComposite.md
new file mode 100644
index 00000000000..a389115ee5a
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/OuterComposite.md
@@ -0,0 +1,12 @@
+# outer_composite.OuterComposite
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**my_number** | **float** | | [optional]
+**my_string** | **str** | | [optional]
+**my_boolean** | **bool** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/OuterEnum.md b/samples/openapi3/client/petstore/python-experimental/docs/OuterEnum.md
new file mode 100644
index 00000000000..d1414ba4e61
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/OuterEnum.md
@@ -0,0 +1,10 @@
+# outer_enum.OuterEnum
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**value** | **str, none_type** | |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/OuterEnumDefaultValue.md b/samples/openapi3/client/petstore/python-experimental/docs/OuterEnumDefaultValue.md
new file mode 100644
index 00000000000..648f964b6b0
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/OuterEnumDefaultValue.md
@@ -0,0 +1,10 @@
+# outer_enum_default_value.OuterEnumDefaultValue
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**value** | **str** | | defaults to 'placed'
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/OuterEnumInteger.md b/samples/openapi3/client/petstore/python-experimental/docs/OuterEnumInteger.md
new file mode 100644
index 00000000000..de77d44d702
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/OuterEnumInteger.md
@@ -0,0 +1,10 @@
+# outer_enum_integer.OuterEnumInteger
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**value** | **int** | |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/OuterEnumIntegerDefaultValue.md b/samples/openapi3/client/petstore/python-experimental/docs/OuterEnumIntegerDefaultValue.md
new file mode 100644
index 00000000000..b8d9b9c0b01
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/OuterEnumIntegerDefaultValue.md
@@ -0,0 +1,10 @@
+# outer_enum_integer_default_value.OuterEnumIntegerDefaultValue
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**value** | **int** | | defaults to 0
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Pet.md b/samples/openapi3/client/petstore/python-experimental/docs/Pet.md
new file mode 100644
index 00000000000..a1ea5598e86
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Pet.md
@@ -0,0 +1,15 @@
+# pet.Pet
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **str** | |
+**photo_urls** | **[str]** | |
+**id** | **int** | | [optional]
+**category** | [**category.Category**](Category.md) | | [optional]
+**tags** | [**[tag.Tag]**](Tag.md) | | [optional]
+**status** | **str** | pet status in the store | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/PetApi.md b/samples/openapi3/client/petstore/python-experimental/docs/PetApi.md
new file mode 100644
index 00000000000..90b5647d5f3
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/PetApi.md
@@ -0,0 +1,597 @@
+# petstore_api.PetApi
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**add_pet**](PetApi.md#add_pet) | **POST** /pet | Add a new pet to the store
+[**delete_pet**](PetApi.md#delete_pet) | **DELETE** /pet/{petId} | Deletes a pet
+[**find_pets_by_status**](PetApi.md#find_pets_by_status) | **GET** /pet/findByStatus | Finds Pets by status
+[**find_pets_by_tags**](PetApi.md#find_pets_by_tags) | **GET** /pet/findByTags | Finds Pets by tags
+[**get_pet_by_id**](PetApi.md#get_pet_by_id) | **GET** /pet/{petId} | Find pet by ID
+[**update_pet**](PetApi.md#update_pet) | **PUT** /pet | Update an existing pet
+[**update_pet_with_form**](PetApi.md#update_pet_with_form) | **POST** /pet/{petId} | Updates a pet in the store with form data
+[**upload_file**](PetApi.md#upload_file) | **POST** /pet/{petId}/uploadImage | uploads an image
+[**upload_file_with_required_file**](PetApi.md#upload_file_with_required_file) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required)
+
+
+# **add_pet**
+> add_pet(pet_pet)
+
+Add a new pet to the store
+
+### Example
+
+* OAuth Authentication (petstore_auth):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure OAuth2 access token for authorization: petstore_auth
+configuration.access_token = 'YOUR_ACCESS_TOKEN'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
+pet_pet = petstore_api.Pet() # pet.Pet | Pet object that needs to be added to the store
+
+# example passing only required values which don't have defaults set
+try:
+ # Add a new pet to the store
+ api_instance.add_pet(pet_pet)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->add_pet: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **pet_pet** | [**pet.Pet**](Pet.md)| Pet object that needs to be added to the store |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json, application/xml
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**405** | Invalid input | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **delete_pet**
+> delete_pet(pet_id)
+
+Deletes a pet
+
+### Example
+
+* OAuth Authentication (petstore_auth):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure OAuth2 access token for authorization: petstore_auth
+configuration.access_token = 'YOUR_ACCESS_TOKEN'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
+pet_id = 56 # int | Pet id to delete
+api_key = 'api_key_example' # str | (optional)
+
+# example passing only required values which don't have defaults set
+try:
+ # Deletes a pet
+ api_instance.delete_pet(pet_id)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->delete_pet: %s\n" % e)
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ # Deletes a pet
+ api_instance.delete_pet(pet_id, api_key=api_key)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->delete_pet: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **pet_id** | **int**| Pet id to delete |
+ **api_key** | **str**| | [optional]
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**400** | Invalid pet value | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **find_pets_by_status**
+> [pet.Pet] find_pets_by_status(status)
+
+Finds Pets by status
+
+Multiple status values can be provided with comma separated strings
+
+### Example
+
+* OAuth Authentication (petstore_auth):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure OAuth2 access token for authorization: petstore_auth
+configuration.access_token = 'YOUR_ACCESS_TOKEN'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
+status = ['status_example'] # [str] | Status values that need to be considered for filter
+
+# example passing only required values which don't have defaults set
+try:
+ # Finds Pets by status
+ api_response = api_instance.find_pets_by_status(status)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->find_pets_by_status: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **status** | **[str]**| Status values that need to be considered for filter |
+
+### Return type
+
+[**[pet.Pet]**](Pet.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+**400** | Invalid status value | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **find_pets_by_tags**
+> [pet.Pet] find_pets_by_tags(tags)
+
+Finds Pets by tags
+
+Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+
+### Example
+
+* OAuth Authentication (petstore_auth):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure OAuth2 access token for authorization: petstore_auth
+configuration.access_token = 'YOUR_ACCESS_TOKEN'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
+tags = ['tags_example'] # [str] | Tags to filter by
+
+# example passing only required values which don't have defaults set
+try:
+ # Finds Pets by tags
+ api_response = api_instance.find_pets_by_tags(tags)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->find_pets_by_tags: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **tags** | **[str]**| Tags to filter by |
+
+### Return type
+
+[**[pet.Pet]**](Pet.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+**400** | Invalid tag value | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **get_pet_by_id**
+> pet.Pet get_pet_by_id(pet_id)
+
+Find pet by ID
+
+Returns a single pet
+
+### Example
+
+* Api Key Authentication (api_key):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure API key authorization: api_key
+configuration.api_key['api_key'] = 'YOUR_API_KEY'
+# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
+# configuration.api_key_prefix['api_key'] = 'Bearer'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
+pet_id = 56 # int | ID of pet to return
+
+# example passing only required values which don't have defaults set
+try:
+ # Find pet by ID
+ api_response = api_instance.get_pet_by_id(pet_id)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->get_pet_by_id: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **pet_id** | **int**| ID of pet to return |
+
+### Return type
+
+[**pet.Pet**](Pet.md)
+
+### Authorization
+
+[api_key](../README.md#api_key)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+**400** | Invalid ID supplied | - |
+**404** | Pet not found | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **update_pet**
+> update_pet(pet_pet)
+
+Update an existing pet
+
+### Example
+
+* OAuth Authentication (petstore_auth):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure OAuth2 access token for authorization: petstore_auth
+configuration.access_token = 'YOUR_ACCESS_TOKEN'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
+pet_pet = petstore_api.Pet() # pet.Pet | Pet object that needs to be added to the store
+
+# example passing only required values which don't have defaults set
+try:
+ # Update an existing pet
+ api_instance.update_pet(pet_pet)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->update_pet: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **pet_pet** | [**pet.Pet**](Pet.md)| Pet object that needs to be added to the store |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json, application/xml
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**400** | Invalid ID supplied | - |
+**404** | Pet not found | - |
+**405** | Validation exception | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **update_pet_with_form**
+> update_pet_with_form(pet_id)
+
+Updates a pet in the store with form data
+
+### Example
+
+* OAuth Authentication (petstore_auth):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure OAuth2 access token for authorization: petstore_auth
+configuration.access_token = 'YOUR_ACCESS_TOKEN'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
+pet_id = 56 # int | ID of pet that needs to be updated
+name = 'name_example' # str | Updated name of the pet (optional)
+status = 'status_example' # str | Updated status of the pet (optional)
+
+# example passing only required values which don't have defaults set
+try:
+ # Updates a pet in the store with form data
+ api_instance.update_pet_with_form(pet_id)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->update_pet_with_form: %s\n" % e)
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ # Updates a pet in the store with form data
+ api_instance.update_pet_with_form(pet_id, name=name, status=status)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->update_pet_with_form: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **pet_id** | **int**| ID of pet that needs to be updated |
+ **name** | **str**| Updated name of the pet | [optional]
+ **status** | **str**| Updated status of the pet | [optional]
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: application/x-www-form-urlencoded
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**405** | Invalid input | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **upload_file**
+> api_response.ApiResponse upload_file(pet_id)
+
+uploads an image
+
+### Example
+
+* OAuth Authentication (petstore_auth):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure OAuth2 access token for authorization: petstore_auth
+configuration.access_token = 'YOUR_ACCESS_TOKEN'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
+pet_id = 56 # int | ID of pet to update
+additional_metadata = 'additional_metadata_example' # str | Additional data to pass to server (optional)
+file = open('/path/to/file', 'rb') # file_type | file to upload (optional)
+
+# example passing only required values which don't have defaults set
+try:
+ # uploads an image
+ api_response = api_instance.upload_file(pet_id)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->upload_file: %s\n" % e)
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ # uploads an image
+ api_response = api_instance.upload_file(pet_id, additional_metadata=additional_metadata, file=file)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->upload_file: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **pet_id** | **int**| ID of pet to update |
+ **additional_metadata** | **str**| Additional data to pass to server | [optional]
+ **file** | **file_type**| file to upload | [optional]
+
+### Return type
+
+[**api_response.ApiResponse**](ApiResponse.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **upload_file_with_required_file**
+> api_response.ApiResponse upload_file_with_required_file(pet_id, required_file)
+
+uploads an image (required)
+
+### Example
+
+* OAuth Authentication (petstore_auth):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure OAuth2 access token for authorization: petstore_auth
+configuration.access_token = 'YOUR_ACCESS_TOKEN'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
+pet_id = 56 # int | ID of pet to update
+required_file = open('/path/to/file', 'rb') # file_type | file to upload
+additional_metadata = 'additional_metadata_example' # str | Additional data to pass to server (optional)
+
+# example passing only required values which don't have defaults set
+try:
+ # uploads an image (required)
+ api_response = api_instance.upload_file_with_required_file(pet_id, required_file)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->upload_file_with_required_file: %s\n" % e)
+
+# example passing only required values which don't have defaults set
+# and optional values
+try:
+ # uploads an image (required)
+ api_response = api_instance.upload_file_with_required_file(pet_id, required_file, additional_metadata=additional_metadata)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling PetApi->upload_file_with_required_file: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **pet_id** | **int**| ID of pet to update |
+ **required_file** | **file_type**| file to upload |
+ **additional_metadata** | **str**| Additional data to pass to server | [optional]
+
+### Return type
+
+[**api_response.ApiResponse**](ApiResponse.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/ReadOnlyFirst.md b/samples/openapi3/client/petstore/python-experimental/docs/ReadOnlyFirst.md
new file mode 100644
index 00000000000..252641787c3
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/ReadOnlyFirst.md
@@ -0,0 +1,11 @@
+# read_only_first.ReadOnlyFirst
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bar** | **str** | | [optional] [readonly]
+**baz** | **str** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/SpecialModelName.md b/samples/openapi3/client/petstore/python-experimental/docs/SpecialModelName.md
new file mode 100644
index 00000000000..312539af45e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/SpecialModelName.md
@@ -0,0 +1,10 @@
+# special_model_name.SpecialModelName
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**special_property_name** | **int** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/StoreApi.md b/samples/openapi3/client/petstore/python-experimental/docs/StoreApi.md
new file mode 100644
index 00000000000..a54a8c61fb1
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/StoreApi.md
@@ -0,0 +1,233 @@
+# petstore_api.StoreApi
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**delete_order**](StoreApi.md#delete_order) | **DELETE** /store/order/{order_id} | Delete purchase order by ID
+[**get_inventory**](StoreApi.md#get_inventory) | **GET** /store/inventory | Returns pet inventories by status
+[**get_order_by_id**](StoreApi.md#get_order_by_id) | **GET** /store/order/{order_id} | Find purchase order by ID
+[**place_order**](StoreApi.md#place_order) | **POST** /store/order | Place an order for a pet
+
+
+# **delete_order**
+> delete_order(order_id)
+
+Delete purchase order by ID
+
+For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.StoreApi()
+order_id = 'order_id_example' # str | ID of the order that needs to be deleted
+
+# example passing only required values which don't have defaults set
+try:
+ # Delete purchase order by ID
+ api_instance.delete_order(order_id)
+except petstore_api.ApiException as e:
+ print("Exception when calling StoreApi->delete_order: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **order_id** | **str**| ID of the order that needs to be deleted |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**400** | Invalid ID supplied | - |
+**404** | Order not found | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **get_inventory**
+> {str: (int,)} get_inventory()
+
+Returns pet inventories by status
+
+Returns a map of status codes to quantities
+
+### Example
+
+* Api Key Authentication (api_key):
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+configuration = petstore_api.Configuration()
+# Configure API key authorization: api_key
+configuration.api_key['api_key'] = 'YOUR_API_KEY'
+# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
+# configuration.api_key_prefix['api_key'] = 'Bearer'
+
+# Defining host is optional and default to http://petstore.swagger.io:80/v2
+configuration.host = "http://petstore.swagger.io:80/v2"
+# Create an instance of the API class
+api_instance = petstore_api.StoreApi(petstore_api.ApiClient(configuration))
+
+# example, this endpoint has no required or optional parameters
+try:
+ # Returns pet inventories by status
+ api_response = api_instance.get_inventory()
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling StoreApi->get_inventory: %s\n" % e)
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+**{str: (int,)}**
+
+### Authorization
+
+[api_key](../README.md#api_key)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **get_order_by_id**
+> order.Order get_order_by_id(order_id)
+
+Find purchase order by ID
+
+For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.StoreApi()
+order_id = 56 # int | ID of pet that needs to be fetched
+
+# example passing only required values which don't have defaults set
+try:
+ # Find purchase order by ID
+ api_response = api_instance.get_order_by_id(order_id)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling StoreApi->get_order_by_id: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **order_id** | **int**| ID of pet that needs to be fetched |
+
+### Return type
+
+[**order.Order**](Order.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+**400** | Invalid ID supplied | - |
+**404** | Order not found | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **place_order**
+> order.Order place_order(order_order)
+
+Place an order for a pet
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.StoreApi()
+order_order = petstore_api.Order() # order.Order | order placed for purchasing the pet
+
+# example passing only required values which don't have defaults set
+try:
+ # Place an order for a pet
+ api_response = api_instance.place_order(order_order)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling StoreApi->place_order: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **order_order** | [**order.Order**](Order.md)| order placed for purchasing the pet |
+
+### Return type
+
+[**order.Order**](Order.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/xml, application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+**400** | Invalid Order | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/StringBooleanMap.md b/samples/openapi3/client/petstore/python-experimental/docs/StringBooleanMap.md
new file mode 100644
index 00000000000..2eb94fd9a73
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/StringBooleanMap.md
@@ -0,0 +1,10 @@
+# string_boolean_map.StringBooleanMap
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**any string name** | **bool** | any string name can be used but the value must be the correct type | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/Tag.md b/samples/openapi3/client/petstore/python-experimental/docs/Tag.md
new file mode 100644
index 00000000000..66f75c28fe4
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/Tag.md
@@ -0,0 +1,11 @@
+# tag.Tag
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **int** | | [optional]
+**name** | **str** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/User.md b/samples/openapi3/client/petstore/python-experimental/docs/User.md
new file mode 100644
index 00000000000..52ff07af296
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/User.md
@@ -0,0 +1,17 @@
+# user.User
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **int** | | [optional]
+**username** | **str** | | [optional]
+**first_name** | **str** | | [optional]
+**last_name** | **str** | | [optional]
+**email** | **str** | | [optional]
+**password** | **str** | | [optional]
+**phone** | **str** | | [optional]
+**user_status** | **int** | User Status | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/docs/UserApi.md b/samples/openapi3/client/petstore/python-experimental/docs/UserApi.md
new file mode 100644
index 00000000000..4eb75f42874
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/docs/UserApi.md
@@ -0,0 +1,437 @@
+# petstore_api.UserApi
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**create_user**](UserApi.md#create_user) | **POST** /user | Create user
+[**create_users_with_array_input**](UserApi.md#create_users_with_array_input) | **POST** /user/createWithArray | Creates list of users with given input array
+[**create_users_with_list_input**](UserApi.md#create_users_with_list_input) | **POST** /user/createWithList | Creates list of users with given input array
+[**delete_user**](UserApi.md#delete_user) | **DELETE** /user/{username} | Delete user
+[**get_user_by_name**](UserApi.md#get_user_by_name) | **GET** /user/{username} | Get user by user name
+[**login_user**](UserApi.md#login_user) | **GET** /user/login | Logs user into the system
+[**logout_user**](UserApi.md#logout_user) | **GET** /user/logout | Logs out current logged in user session
+[**update_user**](UserApi.md#update_user) | **PUT** /user/{username} | Updated user
+
+
+# **create_user**
+> create_user(user_user)
+
+Create user
+
+This can only be done by the logged in user.
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.UserApi()
+user_user = petstore_api.User() # user.User | Created user object
+
+# example passing only required values which don't have defaults set
+try:
+ # Create user
+ api_instance.create_user(user_user)
+except petstore_api.ApiException as e:
+ print("Exception when calling UserApi->create_user: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **user_user** | [**user.User**](User.md)| Created user object |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**0** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **create_users_with_array_input**
+> create_users_with_array_input(user_user)
+
+Creates list of users with given input array
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.UserApi()
+user_user = [petstore_api.User()] # [user.User] | List of user object
+
+# example passing only required values which don't have defaults set
+try:
+ # Creates list of users with given input array
+ api_instance.create_users_with_array_input(user_user)
+except petstore_api.ApiException as e:
+ print("Exception when calling UserApi->create_users_with_array_input: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **user_user** | [**[user.User]**](User.md)| List of user object |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**0** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **create_users_with_list_input**
+> create_users_with_list_input(user_user)
+
+Creates list of users with given input array
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.UserApi()
+user_user = [petstore_api.User()] # [user.User] | List of user object
+
+# example passing only required values which don't have defaults set
+try:
+ # Creates list of users with given input array
+ api_instance.create_users_with_list_input(user_user)
+except petstore_api.ApiException as e:
+ print("Exception when calling UserApi->create_users_with_list_input: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **user_user** | [**[user.User]**](User.md)| List of user object |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**0** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **delete_user**
+> delete_user(username)
+
+Delete user
+
+This can only be done by the logged in user.
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.UserApi()
+username = 'username_example' # str | The name that needs to be deleted
+
+# example passing only required values which don't have defaults set
+try:
+ # Delete user
+ api_instance.delete_user(username)
+except petstore_api.ApiException as e:
+ print("Exception when calling UserApi->delete_user: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **str**| The name that needs to be deleted |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**400** | Invalid username supplied | - |
+**404** | User not found | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **get_user_by_name**
+> user.User get_user_by_name(username)
+
+Get user by user name
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.UserApi()
+username = 'username_example' # str | The name that needs to be fetched. Use user1 for testing.
+
+# example passing only required values which don't have defaults set
+try:
+ # Get user by user name
+ api_response = api_instance.get_user_by_name(username)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling UserApi->get_user_by_name: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **str**| The name that needs to be fetched. Use user1 for testing. |
+
+### Return type
+
+[**user.User**](User.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | - |
+**400** | Invalid username supplied | - |
+**404** | User not found | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **login_user**
+> str login_user(username, password)
+
+Logs user into the system
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.UserApi()
+username = 'username_example' # str | The user name for login
+password = 'password_example' # str | The password for login in clear text
+
+# example passing only required values which don't have defaults set
+try:
+ # Logs user into the system
+ api_response = api_instance.login_user(username, password)
+ pprint(api_response)
+except petstore_api.ApiException as e:
+ print("Exception when calling UserApi->login_user: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **str**| The user name for login |
+ **password** | **str**| The password for login in clear text |
+
+### Return type
+
+**str**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | successful operation | * X-Rate-Limit - calls per hour allowed by the user
* X-Expires-After - date in UTC when token expires
|
+**400** | Invalid username/password supplied | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **logout_user**
+> logout_user()
+
+Logs out current logged in user session
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.UserApi()
+
+# example, this endpoint has no required or optional parameters
+try:
+ # Logs out current logged in user session
+ api_instance.logout_user()
+except petstore_api.ApiException as e:
+ print("Exception when calling UserApi->logout_user: %s\n" % e)
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**0** | successful operation | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **update_user**
+> update_user(username, user_user)
+
+Updated user
+
+This can only be done by the logged in user.
+
+### Example
+
+```python
+from __future__ import print_function
+import time
+import petstore_api
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = petstore_api.UserApi()
+username = 'username_example' # str | name that need to be deleted
+user_user = petstore_api.User() # user.User | Updated user object
+
+# example passing only required values which don't have defaults set
+try:
+ # Updated user
+ api_instance.update_user(username, user_user)
+except petstore_api.ApiException as e:
+ print("Exception when calling UserApi->update_user: %s\n" % e)
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **str**| name that need to be deleted |
+ **user_user** | [**user.User**](User.md)| Updated user object |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: Not defined
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**400** | Invalid user supplied | - |
+**404** | User not found | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/openapi3/client/petstore/python-experimental/git_push.sh b/samples/openapi3/client/petstore/python-experimental/git_push.sh
new file mode 100644
index 00000000000..ced3be2b0c7
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/git_push.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
+#
+# Usage example: /bin/sh ./git_push.sh wing328 openapi-pestore-perl "minor update" "gitlab.com"
+
+git_user_id=$1
+git_repo_id=$2
+release_note=$3
+git_host=$4
+
+if [ "$git_host" = "" ]; then
+ git_host="github.com"
+ echo "[INFO] No command line input provided. Set \$git_host to $git_host"
+fi
+
+if [ "$git_user_id" = "" ]; then
+ git_user_id="GIT_USER_ID"
+ echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
+fi
+
+if [ "$git_repo_id" = "" ]; then
+ git_repo_id="GIT_REPO_ID"
+ echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
+fi
+
+if [ "$release_note" = "" ]; then
+ release_note="Minor update"
+ echo "[INFO] No command line input provided. Set \$release_note to $release_note"
+fi
+
+# Initialize the local directory as a Git repository
+git init
+
+# Adds the files in the local repository and stages them for commit.
+git add .
+
+# Commits the tracked changes and prepares them to be pushed to a remote repository.
+git commit -m "$release_note"
+
+# Sets the new remote
+git_remote=`git remote`
+if [ "$git_remote" = "" ]; then # git remote not defined
+
+ if [ "$GIT_TOKEN" = "" ]; then
+ echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
+ git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
+ else
+ git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git
+ fi
+
+fi
+
+git pull origin master
+
+# Pushes (Forces) the changes in the local repository up to the remote repository
+echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
+git push origin master 2>&1 | grep -v 'To https'
+
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/__init__.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/__init__.py
new file mode 100644
index 00000000000..2c9bc6e12f0
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/__init__.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+# flake8: noqa
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+__version__ = "1.0.0"
+
+# import apis into sdk package
+from petstore_api.api.another_fake_api import AnotherFakeApi
+from petstore_api.api.default_api import DefaultApi
+from petstore_api.api.fake_api import FakeApi
+from petstore_api.api.fake_classname_tags_123_api import FakeClassnameTags123Api
+from petstore_api.api.pet_api import PetApi
+from petstore_api.api.store_api import StoreApi
+from petstore_api.api.user_api import UserApi
+
+# import ApiClient
+from petstore_api.api_client import ApiClient
+
+# import Configuration
+from petstore_api.configuration import Configuration
+
+# import exceptions
+from petstore_api.exceptions import OpenApiException
+from petstore_api.exceptions import ApiTypeError
+from petstore_api.exceptions import ApiValueError
+from petstore_api.exceptions import ApiKeyError
+from petstore_api.exceptions import ApiException
+
+# import models into sdk package
+from petstore_api.models.additional_properties_class import AdditionalPropertiesClass
+from petstore_api.models.animal import Animal
+from petstore_api.models.api_response import ApiResponse
+from petstore_api.models.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
+from petstore_api.models.array_of_number_only import ArrayOfNumberOnly
+from petstore_api.models.array_test import ArrayTest
+from petstore_api.models.capitalization import Capitalization
+from petstore_api.models.cat import Cat
+from petstore_api.models.cat_all_of import CatAllOf
+from petstore_api.models.category import Category
+from petstore_api.models.class_model import ClassModel
+from petstore_api.models.client import Client
+from petstore_api.models.dog import Dog
+from petstore_api.models.dog_all_of import DogAllOf
+from petstore_api.models.enum_arrays import EnumArrays
+from petstore_api.models.enum_class import EnumClass
+from petstore_api.models.enum_test import EnumTest
+from petstore_api.models.file import File
+from petstore_api.models.file_schema_test_class import FileSchemaTestClass
+from petstore_api.models.foo import Foo
+from petstore_api.models.format_test import FormatTest
+from petstore_api.models.has_only_read_only import HasOnlyReadOnly
+from petstore_api.models.health_check_result import HealthCheckResult
+from petstore_api.models.inline_object import InlineObject
+from petstore_api.models.inline_object1 import InlineObject1
+from petstore_api.models.inline_object2 import InlineObject2
+from petstore_api.models.inline_object3 import InlineObject3
+from petstore_api.models.inline_object4 import InlineObject4
+from petstore_api.models.inline_object5 import InlineObject5
+from petstore_api.models.inline_response_default import InlineResponseDefault
+from petstore_api.models.list import List
+from petstore_api.models.map_test import MapTest
+from petstore_api.models.mixed_properties_and_additional_properties_class import MixedPropertiesAndAdditionalPropertiesClass
+from petstore_api.models.model200_response import Model200Response
+from petstore_api.models.model_return import ModelReturn
+from petstore_api.models.name import Name
+from petstore_api.models.nullable_class import NullableClass
+from petstore_api.models.number_only import NumberOnly
+from petstore_api.models.order import Order
+from petstore_api.models.outer_composite import OuterComposite
+from petstore_api.models.outer_enum import OuterEnum
+from petstore_api.models.outer_enum_default_value import OuterEnumDefaultValue
+from petstore_api.models.outer_enum_integer import OuterEnumInteger
+from petstore_api.models.outer_enum_integer_default_value import OuterEnumIntegerDefaultValue
+from petstore_api.models.pet import Pet
+from petstore_api.models.read_only_first import ReadOnlyFirst
+from petstore_api.models.special_model_name import SpecialModelName
+from petstore_api.models.string_boolean_map import StringBooleanMap
+from petstore_api.models.tag import Tag
+from petstore_api.models.user import User
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/api/__init__.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/__init__.py
new file mode 100644
index 00000000000..fa4e54a8009
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/__init__.py
@@ -0,0 +1,12 @@
+from __future__ import absolute_import
+
+# flake8: noqa
+
+# import apis into api package
+from petstore_api.api.another_fake_api import AnotherFakeApi
+from petstore_api.api.default_api import DefaultApi
+from petstore_api.api.fake_api import FakeApi
+from petstore_api.api.fake_classname_tags_123_api import FakeClassnameTags123Api
+from petstore_api.api.pet_api import PetApi
+from petstore_api.api.store_api import StoreApi
+from petstore_api.api.user_api import UserApi
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/api/another_fake_api.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/another_fake_api.py
new file mode 100644
index 00000000000..487b15dd082
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/another_fake_api.py
@@ -0,0 +1,378 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import re # noqa: F401
+import sys # noqa: F401
+
+# python 2 and python 3 compatibility library
+import six
+
+from petstore_api.api_client import ApiClient
+from petstore_api.exceptions import (
+ ApiTypeError,
+ ApiValueError
+)
+from petstore_api.model_utils import ( # noqa: F401
+ check_allowed_values,
+ check_validations,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_and_convert_types
+)
+from petstore_api.models import client
+
+
+class AnotherFakeApi(object):
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient()
+ self.api_client = api_client
+
+ def __call_123_test_special_tags(self, client_client, **kwargs): # noqa: E501
+ """To test special tags # noqa: E501
+
+ To test special tags and operation ID starting with number # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.call_123_test_special_tags(client_client, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param client.Client client_client: client model (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: client.Client
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['client_client'] = \
+ client_client
+ return self.call_with_http_info(**kwargs)
+
+ self.call_123_test_special_tags = Endpoint(
+ settings={
+ 'response_type': (client.Client,),
+ 'auth': [],
+ 'endpoint_path': '/another-fake/dummy',
+ 'operation_id': 'call_123_test_special_tags',
+ 'http_method': 'PATCH',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'client_client',
+ ],
+ 'required': [
+ 'client_client',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'client_client':
+ (client.Client,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'client_client': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__call_123_test_special_tags
+ )
+
+
+class Endpoint(object):
+ def __init__(self, settings=None, params_map=None, root_map=None,
+ headers_map=None, api_client=None, callable=None):
+ """Creates an endpoint
+
+ Args:
+ settings (dict): see below key value pairs
+ 'response_type' (tuple/None): response type
+ 'auth' (list): a list of auth type keys
+ 'endpoint_path' (str): the endpoint path
+ 'operation_id' (str): endpoint string identifier
+ 'http_method' (str): POST/PUT/PATCH/GET etc
+ 'servers' (list): list of str servers that this endpoint is at
+ params_map (dict): see below key value pairs
+ 'all' (list): list of str endpoint parameter names
+ 'required' (list): list of required parameter names
+ 'nullable' (list): list of nullable parameter names
+ 'enum' (list): list of parameters with enum values
+ 'validation' (list): list of parameters with validations
+ root_map
+ 'validations' (dict): the dict mapping endpoint parameter tuple
+ paths to their validation dictionaries
+ 'allowed_values' (dict): the dict mapping endpoint parameter
+ tuple paths to their allowed_values (enum) dictionaries
+ 'openapi_types' (dict): param_name to openapi type
+ 'attribute_map' (dict): param_name to camelCase name
+ 'location_map' (dict): param_name to 'body', 'file', 'form',
+ 'header', 'path', 'query'
+ collection_format_map (dict): param_name to `csv` etc.
+ headers_map (dict): see below key value pairs
+ 'accept' (list): list of Accept header strings
+ 'content_type' (list): list of Content-Type header strings
+ api_client (ApiClient) api client instance
+ callable (function): the function which is invoked when the
+ Endpoint is called
+ """
+ self.settings = settings
+ self.params_map = params_map
+ self.params_map['all'].extend([
+ 'async_req',
+ '_host_index',
+ '_preload_content',
+ '_request_timeout',
+ '_return_http_data_only',
+ '_check_input_type',
+ '_check_return_type'
+ ])
+ self.params_map['nullable'].extend(['_request_timeout'])
+ self.validations = root_map['validations']
+ self.allowed_values = root_map['allowed_values']
+ self.openapi_types = root_map['openapi_types']
+ extra_types = {
+ 'async_req': (bool,),
+ '_host_index': (int,),
+ '_preload_content': (bool,),
+ '_request_timeout': (none_type, int, (int,), [int]),
+ '_return_http_data_only': (bool,),
+ '_check_input_type': (bool,),
+ '_check_return_type': (bool,)
+ }
+ self.openapi_types.update(extra_types)
+ self.attribute_map = root_map['attribute_map']
+ self.location_map = root_map['location_map']
+ self.collection_format_map = root_map['collection_format_map']
+ self.headers_map = headers_map
+ self.api_client = api_client
+ self.callable = callable
+
+ def __validate_inputs(self, kwargs):
+ for param in self.params_map['enum']:
+ if param in kwargs:
+ check_allowed_values(
+ self.allowed_values,
+ (param,),
+ kwargs[param]
+ )
+
+ for param in self.params_map['validation']:
+ if param in kwargs:
+ check_validations(
+ self.validations,
+ (param,),
+ kwargs[param]
+ )
+
+ if kwargs['_check_input_type'] is False:
+ return
+
+ for key, value in six.iteritems(kwargs):
+ fixed_val = validate_and_convert_types(
+ value,
+ self.openapi_types[key],
+ [key],
+ False,
+ kwargs['_check_input_type'],
+ configuration=self.api_client.configuration
+ )
+ kwargs[key] = fixed_val
+
+ def __gather_params(self, kwargs):
+ params = {
+ 'body': None,
+ 'collection_format': {},
+ 'file': {},
+ 'form': [],
+ 'header': {},
+ 'path': {},
+ 'query': []
+ }
+
+ for param_name, param_value in six.iteritems(kwargs):
+ param_location = self.location_map.get(param_name)
+ if param_location is None:
+ continue
+ if param_location:
+ if param_location == 'body':
+ params['body'] = param_value
+ continue
+ base_name = self.attribute_map[param_name]
+ if (param_location == 'form' and
+ self.openapi_types[param_name] == (file_type,)):
+ params['file'][param_name] = [param_value]
+ elif (param_location == 'form' and
+ self.openapi_types[param_name] == ([file_type],)):
+ # param_value is already a list
+ params['file'][param_name] = param_value
+ elif param_location in {'form', 'query'}:
+ param_value_full = (base_name, param_value)
+ params[param_location].append(param_value_full)
+ if param_location not in {'form', 'query'}:
+ params[param_location][base_name] = param_value
+ collection_format = self.collection_format_map.get(param_name)
+ if collection_format:
+ params['collection_format'][base_name] = collection_format
+
+ return params
+
+ def __call__(self, *args, **kwargs):
+ """ This method is invoked when endpoints are called
+ Example:
+ pet_api = PetApi()
+ pet_api.add_pet # this is an instance of the class Endpoint
+ pet_api.add_pet() # this invokes pet_api.add_pet.__call__()
+ which then invokes the callable functions stored in that endpoint at
+ pet_api.add_pet.callable or self.callable in this class
+ """
+ return self.callable(self, *args, **kwargs)
+
+ def call_with_http_info(self, **kwargs):
+
+ try:
+ _host = self.settings['servers'][kwargs['_host_index']]
+ except IndexError:
+ if self.settings['servers']:
+ raise ApiValueError(
+ "Invalid host index. Must be 0 <= index < %s" %
+ len(self.settings['servers'])
+ )
+ _host = None
+
+ for key, value in six.iteritems(kwargs):
+ if key not in self.params_map['all']:
+ raise ApiTypeError(
+ "Got an unexpected parameter '%s'"
+ " to method `%s`" %
+ (key, self.settings['operation_id'])
+ )
+ # only throw this nullable ApiValueError if _check_input_type
+ # is False, if _check_input_type==True we catch this case
+ # in self.__validate_inputs
+ if (key not in self.params_map['nullable'] and value is None
+ and kwargs['_check_input_type'] is False):
+ raise ApiValueError(
+ "Value may not be None for non-nullable parameter `%s`"
+ " when calling `%s`" %
+ (key, self.settings['operation_id'])
+ )
+
+ for key in self.params_map['required']:
+ if key not in kwargs.keys():
+ raise ApiValueError(
+ "Missing the required parameter `%s` when calling "
+ "`%s`" % (key, self.settings['operation_id'])
+ )
+
+ self.__validate_inputs(kwargs)
+
+ params = self.__gather_params(kwargs)
+
+ accept_headers_list = self.headers_map['accept']
+ if accept_headers_list:
+ params['header']['Accept'] = self.api_client.select_header_accept(
+ accept_headers_list)
+
+ content_type_headers_list = self.headers_map['content_type']
+ if content_type_headers_list:
+ header_list = self.api_client.select_header_content_type(
+ content_type_headers_list)
+ params['header']['Content-Type'] = header_list
+
+ return self.api_client.call_api(
+ self.settings['endpoint_path'], self.settings['http_method'],
+ params['path'],
+ params['query'],
+ params['header'],
+ body=params['body'],
+ post_params=params['form'],
+ files=params['file'],
+ response_type=self.settings['response_type'],
+ auth_settings=self.settings['auth'],
+ async_req=kwargs['async_req'],
+ _check_type=kwargs['_check_return_type'],
+ _return_http_data_only=kwargs['_return_http_data_only'],
+ _preload_content=kwargs['_preload_content'],
+ _request_timeout=kwargs['_request_timeout'],
+ _host=_host,
+ collection_formats=params['collection_format'])
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/api/default_api.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/default_api.py
new file mode 100644
index 00000000000..58b7c22e5e9
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/default_api.py
@@ -0,0 +1,366 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import re # noqa: F401
+import sys # noqa: F401
+
+# python 2 and python 3 compatibility library
+import six
+
+from petstore_api.api_client import ApiClient
+from petstore_api.exceptions import (
+ ApiTypeError,
+ ApiValueError
+)
+from petstore_api.model_utils import ( # noqa: F401
+ check_allowed_values,
+ check_validations,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_and_convert_types
+)
+from petstore_api.models import inline_response_default
+
+
+class DefaultApi(object):
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient()
+ self.api_client = api_client
+
+ def __foo_get(self, **kwargs): # noqa: E501
+ """foo_get # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.foo_get(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: inline_response_default.InlineResponseDefault
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ return self.call_with_http_info(**kwargs)
+
+ self.foo_get = Endpoint(
+ settings={
+ 'response_type': (inline_response_default.InlineResponseDefault,),
+ 'auth': [],
+ 'endpoint_path': '/foo',
+ 'operation_id': 'foo_get',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ ],
+ 'required': [],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__foo_get
+ )
+
+
+class Endpoint(object):
+ def __init__(self, settings=None, params_map=None, root_map=None,
+ headers_map=None, api_client=None, callable=None):
+ """Creates an endpoint
+
+ Args:
+ settings (dict): see below key value pairs
+ 'response_type' (tuple/None): response type
+ 'auth' (list): a list of auth type keys
+ 'endpoint_path' (str): the endpoint path
+ 'operation_id' (str): endpoint string identifier
+ 'http_method' (str): POST/PUT/PATCH/GET etc
+ 'servers' (list): list of str servers that this endpoint is at
+ params_map (dict): see below key value pairs
+ 'all' (list): list of str endpoint parameter names
+ 'required' (list): list of required parameter names
+ 'nullable' (list): list of nullable parameter names
+ 'enum' (list): list of parameters with enum values
+ 'validation' (list): list of parameters with validations
+ root_map
+ 'validations' (dict): the dict mapping endpoint parameter tuple
+ paths to their validation dictionaries
+ 'allowed_values' (dict): the dict mapping endpoint parameter
+ tuple paths to their allowed_values (enum) dictionaries
+ 'openapi_types' (dict): param_name to openapi type
+ 'attribute_map' (dict): param_name to camelCase name
+ 'location_map' (dict): param_name to 'body', 'file', 'form',
+ 'header', 'path', 'query'
+ collection_format_map (dict): param_name to `csv` etc.
+ headers_map (dict): see below key value pairs
+ 'accept' (list): list of Accept header strings
+ 'content_type' (list): list of Content-Type header strings
+ api_client (ApiClient) api client instance
+ callable (function): the function which is invoked when the
+ Endpoint is called
+ """
+ self.settings = settings
+ self.params_map = params_map
+ self.params_map['all'].extend([
+ 'async_req',
+ '_host_index',
+ '_preload_content',
+ '_request_timeout',
+ '_return_http_data_only',
+ '_check_input_type',
+ '_check_return_type'
+ ])
+ self.params_map['nullable'].extend(['_request_timeout'])
+ self.validations = root_map['validations']
+ self.allowed_values = root_map['allowed_values']
+ self.openapi_types = root_map['openapi_types']
+ extra_types = {
+ 'async_req': (bool,),
+ '_host_index': (int,),
+ '_preload_content': (bool,),
+ '_request_timeout': (none_type, int, (int,), [int]),
+ '_return_http_data_only': (bool,),
+ '_check_input_type': (bool,),
+ '_check_return_type': (bool,)
+ }
+ self.openapi_types.update(extra_types)
+ self.attribute_map = root_map['attribute_map']
+ self.location_map = root_map['location_map']
+ self.collection_format_map = root_map['collection_format_map']
+ self.headers_map = headers_map
+ self.api_client = api_client
+ self.callable = callable
+
+ def __validate_inputs(self, kwargs):
+ for param in self.params_map['enum']:
+ if param in kwargs:
+ check_allowed_values(
+ self.allowed_values,
+ (param,),
+ kwargs[param]
+ )
+
+ for param in self.params_map['validation']:
+ if param in kwargs:
+ check_validations(
+ self.validations,
+ (param,),
+ kwargs[param]
+ )
+
+ if kwargs['_check_input_type'] is False:
+ return
+
+ for key, value in six.iteritems(kwargs):
+ fixed_val = validate_and_convert_types(
+ value,
+ self.openapi_types[key],
+ [key],
+ False,
+ kwargs['_check_input_type'],
+ configuration=self.api_client.configuration
+ )
+ kwargs[key] = fixed_val
+
+ def __gather_params(self, kwargs):
+ params = {
+ 'body': None,
+ 'collection_format': {},
+ 'file': {},
+ 'form': [],
+ 'header': {},
+ 'path': {},
+ 'query': []
+ }
+
+ for param_name, param_value in six.iteritems(kwargs):
+ param_location = self.location_map.get(param_name)
+ if param_location is None:
+ continue
+ if param_location:
+ if param_location == 'body':
+ params['body'] = param_value
+ continue
+ base_name = self.attribute_map[param_name]
+ if (param_location == 'form' and
+ self.openapi_types[param_name] == (file_type,)):
+ params['file'][param_name] = [param_value]
+ elif (param_location == 'form' and
+ self.openapi_types[param_name] == ([file_type],)):
+ # param_value is already a list
+ params['file'][param_name] = param_value
+ elif param_location in {'form', 'query'}:
+ param_value_full = (base_name, param_value)
+ params[param_location].append(param_value_full)
+ if param_location not in {'form', 'query'}:
+ params[param_location][base_name] = param_value
+ collection_format = self.collection_format_map.get(param_name)
+ if collection_format:
+ params['collection_format'][base_name] = collection_format
+
+ return params
+
+ def __call__(self, *args, **kwargs):
+ """ This method is invoked when endpoints are called
+ Example:
+ pet_api = PetApi()
+ pet_api.add_pet # this is an instance of the class Endpoint
+ pet_api.add_pet() # this invokes pet_api.add_pet.__call__()
+ which then invokes the callable functions stored in that endpoint at
+ pet_api.add_pet.callable or self.callable in this class
+ """
+ return self.callable(self, *args, **kwargs)
+
+ def call_with_http_info(self, **kwargs):
+
+ try:
+ _host = self.settings['servers'][kwargs['_host_index']]
+ except IndexError:
+ if self.settings['servers']:
+ raise ApiValueError(
+ "Invalid host index. Must be 0 <= index < %s" %
+ len(self.settings['servers'])
+ )
+ _host = None
+
+ for key, value in six.iteritems(kwargs):
+ if key not in self.params_map['all']:
+ raise ApiTypeError(
+ "Got an unexpected parameter '%s'"
+ " to method `%s`" %
+ (key, self.settings['operation_id'])
+ )
+ # only throw this nullable ApiValueError if _check_input_type
+ # is False, if _check_input_type==True we catch this case
+ # in self.__validate_inputs
+ if (key not in self.params_map['nullable'] and value is None
+ and kwargs['_check_input_type'] is False):
+ raise ApiValueError(
+ "Value may not be None for non-nullable parameter `%s`"
+ " when calling `%s`" %
+ (key, self.settings['operation_id'])
+ )
+
+ for key in self.params_map['required']:
+ if key not in kwargs.keys():
+ raise ApiValueError(
+ "Missing the required parameter `%s` when calling "
+ "`%s`" % (key, self.settings['operation_id'])
+ )
+
+ self.__validate_inputs(kwargs)
+
+ params = self.__gather_params(kwargs)
+
+ accept_headers_list = self.headers_map['accept']
+ if accept_headers_list:
+ params['header']['Accept'] = self.api_client.select_header_accept(
+ accept_headers_list)
+
+ content_type_headers_list = self.headers_map['content_type']
+ if content_type_headers_list:
+ header_list = self.api_client.select_header_content_type(
+ content_type_headers_list)
+ params['header']['Content-Type'] = header_list
+
+ return self.api_client.call_api(
+ self.settings['endpoint_path'], self.settings['http_method'],
+ params['path'],
+ params['query'],
+ params['header'],
+ body=params['body'],
+ post_params=params['form'],
+ files=params['file'],
+ response_type=self.settings['response_type'],
+ auth_settings=self.settings['auth'],
+ async_req=kwargs['async_req'],
+ _check_type=kwargs['_check_return_type'],
+ _return_http_data_only=kwargs['_return_http_data_only'],
+ _preload_content=kwargs['_preload_content'],
+ _request_timeout=kwargs['_request_timeout'],
+ _host=_host,
+ collection_formats=params['collection_format'])
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/api/fake_api.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/fake_api.py
new file mode 100644
index 00000000000..c967e92c76e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/fake_api.py
@@ -0,0 +1,2080 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import re # noqa: F401
+import sys # noqa: F401
+
+# python 2 and python 3 compatibility library
+import six
+
+from petstore_api.api_client import ApiClient
+from petstore_api.exceptions import (
+ ApiTypeError,
+ ApiValueError
+)
+from petstore_api.model_utils import ( # noqa: F401
+ check_allowed_values,
+ check_validations,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_and_convert_types
+)
+from petstore_api.models import health_check_result
+from petstore_api.models import outer_composite
+from petstore_api.models import file_schema_test_class
+from petstore_api.models import user
+from petstore_api.models import client
+
+
+class FakeApi(object):
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient()
+ self.api_client = api_client
+
+ def __fake_health_get(self, **kwargs): # noqa: E501
+ """Health check endpoint # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.fake_health_get(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: health_check_result.HealthCheckResult
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ return self.call_with_http_info(**kwargs)
+
+ self.fake_health_get = Endpoint(
+ settings={
+ 'response_type': (health_check_result.HealthCheckResult,),
+ 'auth': [],
+ 'endpoint_path': '/fake/health',
+ 'operation_id': 'fake_health_get',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ ],
+ 'required': [],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__fake_health_get
+ )
+
+ def __fake_outer_boolean_serialize(self, **kwargs): # noqa: E501
+ """fake_outer_boolean_serialize # noqa: E501
+
+ Test serialization of outer boolean types # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.fake_outer_boolean_serialize(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param bool body: Input boolean as post body
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: bool
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ return self.call_with_http_info(**kwargs)
+
+ self.fake_outer_boolean_serialize = Endpoint(
+ settings={
+ 'response_type': (bool,),
+ 'auth': [],
+ 'endpoint_path': '/fake/outer/boolean',
+ 'operation_id': 'fake_outer_boolean_serialize',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'body',
+ ],
+ 'required': [],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'body':
+ (bool,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'body': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ '*/*'
+ ],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__fake_outer_boolean_serialize
+ )
+
+ def __fake_outer_composite_serialize(self, **kwargs): # noqa: E501
+ """fake_outer_composite_serialize # noqa: E501
+
+ Test serialization of object with outer number type # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.fake_outer_composite_serialize(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param outer_composite.OuterComposite outer_composite_outer_composite: Input composite as post body
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: outer_composite.OuterComposite
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ return self.call_with_http_info(**kwargs)
+
+ self.fake_outer_composite_serialize = Endpoint(
+ settings={
+ 'response_type': (outer_composite.OuterComposite,),
+ 'auth': [],
+ 'endpoint_path': '/fake/outer/composite',
+ 'operation_id': 'fake_outer_composite_serialize',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'outer_composite_outer_composite',
+ ],
+ 'required': [],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'outer_composite_outer_composite':
+ (outer_composite.OuterComposite,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'outer_composite_outer_composite': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ '*/*'
+ ],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__fake_outer_composite_serialize
+ )
+
+ def __fake_outer_number_serialize(self, **kwargs): # noqa: E501
+ """fake_outer_number_serialize # noqa: E501
+
+ Test serialization of outer number types # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.fake_outer_number_serialize(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param float body: Input number as post body
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: float
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ return self.call_with_http_info(**kwargs)
+
+ self.fake_outer_number_serialize = Endpoint(
+ settings={
+ 'response_type': (float,),
+ 'auth': [],
+ 'endpoint_path': '/fake/outer/number',
+ 'operation_id': 'fake_outer_number_serialize',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'body',
+ ],
+ 'required': [],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'body':
+ (float,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'body': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ '*/*'
+ ],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__fake_outer_number_serialize
+ )
+
+ def __fake_outer_string_serialize(self, **kwargs): # noqa: E501
+ """fake_outer_string_serialize # noqa: E501
+
+ Test serialization of outer string types # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.fake_outer_string_serialize(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param str body: Input string as post body
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: str
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ return self.call_with_http_info(**kwargs)
+
+ self.fake_outer_string_serialize = Endpoint(
+ settings={
+ 'response_type': (str,),
+ 'auth': [],
+ 'endpoint_path': '/fake/outer/string',
+ 'operation_id': 'fake_outer_string_serialize',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'body',
+ ],
+ 'required': [],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'body':
+ (str,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'body': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ '*/*'
+ ],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__fake_outer_string_serialize
+ )
+
+ def __test_body_with_file_schema(self, file_schema_test_class_file_schema_test_class, **kwargs): # noqa: E501
+ """test_body_with_file_schema # noqa: E501
+
+ For this test, the body for this request much reference a schema named `File`. # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.test_body_with_file_schema(file_schema_test_class_file_schema_test_class, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param file_schema_test_class.FileSchemaTestClass file_schema_test_class_file_schema_test_class: (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['file_schema_test_class_file_schema_test_class'] = \
+ file_schema_test_class_file_schema_test_class
+ return self.call_with_http_info(**kwargs)
+
+ self.test_body_with_file_schema = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/fake/body-with-file-schema',
+ 'operation_id': 'test_body_with_file_schema',
+ 'http_method': 'PUT',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'file_schema_test_class_file_schema_test_class',
+ ],
+ 'required': [
+ 'file_schema_test_class_file_schema_test_class',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'file_schema_test_class_file_schema_test_class':
+ (file_schema_test_class.FileSchemaTestClass,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'file_schema_test_class_file_schema_test_class': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__test_body_with_file_schema
+ )
+
+ def __test_body_with_query_params(self, query, user_user, **kwargs): # noqa: E501
+ """test_body_with_query_params # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.test_body_with_query_params(query, user_user, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param str query: (required)
+ :param user.User user_user: (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['query'] = \
+ query
+ kwargs['user_user'] = \
+ user_user
+ return self.call_with_http_info(**kwargs)
+
+ self.test_body_with_query_params = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/fake/body-with-query-params',
+ 'operation_id': 'test_body_with_query_params',
+ 'http_method': 'PUT',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'query',
+ 'user_user',
+ ],
+ 'required': [
+ 'query',
+ 'user_user',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'query':
+ (str,),
+ 'user_user':
+ (user.User,),
+ },
+ 'attribute_map': {
+ 'query': 'query',
+ },
+ 'location_map': {
+ 'query': 'query',
+ 'user_user': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__test_body_with_query_params
+ )
+
+ def __test_client_model(self, client_client, **kwargs): # noqa: E501
+ """To test \"client\" model # noqa: E501
+
+ To test \"client\" model # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.test_client_model(client_client, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param client.Client client_client: client model (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: client.Client
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['client_client'] = \
+ client_client
+ return self.call_with_http_info(**kwargs)
+
+ self.test_client_model = Endpoint(
+ settings={
+ 'response_type': (client.Client,),
+ 'auth': [],
+ 'endpoint_path': '/fake',
+ 'operation_id': 'test_client_model',
+ 'http_method': 'PATCH',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'client_client',
+ ],
+ 'required': [
+ 'client_client',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'client_client':
+ (client.Client,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'client_client': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__test_client_model
+ )
+
+ def __test_endpoint_parameters(self, number, double, pattern_without_delimiter, byte, **kwargs): # noqa: E501
+ """Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 # noqa: E501
+
+ Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.test_endpoint_parameters(number, double, pattern_without_delimiter, byte, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param float number: None (required)
+ :param float double: None (required)
+ :param str pattern_without_delimiter: None (required)
+ :param str byte: None (required)
+ :param int integer: None
+ :param int int32: None
+ :param int int64: None
+ :param float float: None
+ :param str string: None
+ :param file_type binary: None
+ :param date date: None
+ :param datetime date_time: None
+ :param str password: None
+ :param str param_callback: None
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['number'] = \
+ number
+ kwargs['double'] = \
+ double
+ kwargs['pattern_without_delimiter'] = \
+ pattern_without_delimiter
+ kwargs['byte'] = \
+ byte
+ return self.call_with_http_info(**kwargs)
+
+ self.test_endpoint_parameters = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [
+ 'http_basic_test'
+ ],
+ 'endpoint_path': '/fake',
+ 'operation_id': 'test_endpoint_parameters',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'number',
+ 'double',
+ 'pattern_without_delimiter',
+ 'byte',
+ 'integer',
+ 'int32',
+ 'int64',
+ 'float',
+ 'string',
+ 'binary',
+ 'date',
+ 'date_time',
+ 'password',
+ 'param_callback',
+ ],
+ 'required': [
+ 'number',
+ 'double',
+ 'pattern_without_delimiter',
+ 'byte',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ 'number',
+ 'double',
+ 'pattern_without_delimiter',
+ 'integer',
+ 'int32',
+ 'float',
+ 'string',
+ 'password',
+ ]
+ },
+ root_map={
+ 'validations': {
+ ('number',): {
+
+ 'inclusive_maximum': 543.2,
+ 'inclusive_minimum': 32.1,
+ },
+ ('double',): {
+
+ 'inclusive_maximum': 123.4,
+ 'inclusive_minimum': 67.8,
+ },
+ ('pattern_without_delimiter',): {
+
+ 'regex': {
+ 'pattern': r'^[A-Z].*', # noqa: E501
+ },
+ },
+ ('integer',): {
+
+ 'inclusive_maximum': 100,
+ 'inclusive_minimum': 10,
+ },
+ ('int32',): {
+
+ 'inclusive_maximum': 200,
+ 'inclusive_minimum': 20,
+ },
+ ('float',): {
+
+ 'inclusive_maximum': 987.6,
+ },
+ ('string',): {
+
+ 'regex': {
+ 'pattern': r'[a-z]', # noqa: E501
+ 'flags': (re.IGNORECASE)
+ },
+ },
+ ('password',): {
+ 'max_length': 64,
+ 'min_length': 10,
+ },
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'number':
+ (float,),
+ 'double':
+ (float,),
+ 'pattern_without_delimiter':
+ (str,),
+ 'byte':
+ (str,),
+ 'integer':
+ (int,),
+ 'int32':
+ (int,),
+ 'int64':
+ (int,),
+ 'float':
+ (float,),
+ 'string':
+ (str,),
+ 'binary':
+ (file_type,),
+ 'date':
+ (date,),
+ 'date_time':
+ (datetime,),
+ 'password':
+ (str,),
+ 'param_callback':
+ (str,),
+ },
+ 'attribute_map': {
+ 'number': 'number',
+ 'double': 'double',
+ 'pattern_without_delimiter': 'pattern_without_delimiter',
+ 'byte': 'byte',
+ 'integer': 'integer',
+ 'int32': 'int32',
+ 'int64': 'int64',
+ 'float': 'float',
+ 'string': 'string',
+ 'binary': 'binary',
+ 'date': 'date',
+ 'date_time': 'dateTime',
+ 'password': 'password',
+ 'param_callback': 'callback',
+ },
+ 'location_map': {
+ 'number': 'form',
+ 'double': 'form',
+ 'pattern_without_delimiter': 'form',
+ 'byte': 'form',
+ 'integer': 'form',
+ 'int32': 'form',
+ 'int64': 'form',
+ 'float': 'form',
+ 'string': 'form',
+ 'binary': 'form',
+ 'date': 'form',
+ 'date_time': 'form',
+ 'password': 'form',
+ 'param_callback': 'form',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/x-www-form-urlencoded'
+ ]
+ },
+ api_client=api_client,
+ callable=__test_endpoint_parameters
+ )
+
+ def __test_enum_parameters(self, **kwargs): # noqa: E501
+ """To test enum parameters # noqa: E501
+
+ To test enum parameters # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.test_enum_parameters(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param [str] enum_header_string_array: Header parameter enum test (string array)
+ :param str enum_header_string: Header parameter enum test (string)
+ :param [str] enum_query_string_array: Query parameter enum test (string array)
+ :param str enum_query_string: Query parameter enum test (string)
+ :param int enum_query_integer: Query parameter enum test (double)
+ :param float enum_query_double: Query parameter enum test (double)
+ :param [str] enum_form_string_array: Form parameter enum test (string array)
+ :param str enum_form_string: Form parameter enum test (string)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ return self.call_with_http_info(**kwargs)
+
+ self.test_enum_parameters = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/fake',
+ 'operation_id': 'test_enum_parameters',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'enum_header_string_array',
+ 'enum_header_string',
+ 'enum_query_string_array',
+ 'enum_query_string',
+ 'enum_query_integer',
+ 'enum_query_double',
+ 'enum_form_string_array',
+ 'enum_form_string',
+ ],
+ 'required': [],
+ 'nullable': [
+ ],
+ 'enum': [
+ 'enum_header_string_array',
+ 'enum_header_string',
+ 'enum_query_string_array',
+ 'enum_query_string',
+ 'enum_query_integer',
+ 'enum_query_double',
+ 'enum_form_string_array',
+ 'enum_form_string',
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ ('enum_header_string_array',): {
+
+ ">": ">",
+ "$": "$"
+ },
+ ('enum_header_string',): {
+
+ "_ABC": "_abc",
+ "-EFG": "-efg",
+ "(XYZ)": "(xyz)"
+ },
+ ('enum_query_string_array',): {
+
+ ">": ">",
+ "$": "$"
+ },
+ ('enum_query_string',): {
+
+ "_ABC": "_abc",
+ "-EFG": "-efg",
+ "(XYZ)": "(xyz)"
+ },
+ ('enum_query_integer',): {
+
+ "1": 1,
+ "-2": -2
+ },
+ ('enum_query_double',): {
+
+ "1.1": 1.1,
+ "-1.2": -1.2
+ },
+ ('enum_form_string_array',): {
+
+ ">": ">",
+ "$": "$"
+ },
+ ('enum_form_string',): {
+
+ "_ABC": "_abc",
+ "-EFG": "-efg",
+ "(XYZ)": "(xyz)"
+ },
+ },
+ 'openapi_types': {
+ 'enum_header_string_array':
+ ([str],),
+ 'enum_header_string':
+ (str,),
+ 'enum_query_string_array':
+ ([str],),
+ 'enum_query_string':
+ (str,),
+ 'enum_query_integer':
+ (int,),
+ 'enum_query_double':
+ (float,),
+ 'enum_form_string_array':
+ ([str],),
+ 'enum_form_string':
+ (str,),
+ },
+ 'attribute_map': {
+ 'enum_header_string_array': 'enum_header_string_array',
+ 'enum_header_string': 'enum_header_string',
+ 'enum_query_string_array': 'enum_query_string_array',
+ 'enum_query_string': 'enum_query_string',
+ 'enum_query_integer': 'enum_query_integer',
+ 'enum_query_double': 'enum_query_double',
+ 'enum_form_string_array': 'enum_form_string_array',
+ 'enum_form_string': 'enum_form_string',
+ },
+ 'location_map': {
+ 'enum_header_string_array': 'header',
+ 'enum_header_string': 'header',
+ 'enum_query_string_array': 'query',
+ 'enum_query_string': 'query',
+ 'enum_query_integer': 'query',
+ 'enum_query_double': 'query',
+ 'enum_form_string_array': 'form',
+ 'enum_form_string': 'form',
+ },
+ 'collection_format_map': {
+ 'enum_header_string_array': 'csv',
+ 'enum_query_string_array': 'multi',
+ 'enum_form_string_array': 'csv',
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/x-www-form-urlencoded'
+ ]
+ },
+ api_client=api_client,
+ callable=__test_enum_parameters
+ )
+
+ def __test_group_parameters(self, required_string_group, required_boolean_group, required_int64_group, **kwargs): # noqa: E501
+ """Fake endpoint to test group parameters (optional) # noqa: E501
+
+ Fake endpoint to test group parameters (optional) # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param int required_string_group: Required String in group parameters (required)
+ :param bool required_boolean_group: Required Boolean in group parameters (required)
+ :param int required_int64_group: Required Integer in group parameters (required)
+ :param int string_group: String in group parameters
+ :param bool boolean_group: Boolean in group parameters
+ :param int int64_group: Integer in group parameters
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['required_string_group'] = \
+ required_string_group
+ kwargs['required_boolean_group'] = \
+ required_boolean_group
+ kwargs['required_int64_group'] = \
+ required_int64_group
+ return self.call_with_http_info(**kwargs)
+
+ self.test_group_parameters = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [
+ 'bearer_test'
+ ],
+ 'endpoint_path': '/fake',
+ 'operation_id': 'test_group_parameters',
+ 'http_method': 'DELETE',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'required_string_group',
+ 'required_boolean_group',
+ 'required_int64_group',
+ 'string_group',
+ 'boolean_group',
+ 'int64_group',
+ ],
+ 'required': [
+ 'required_string_group',
+ 'required_boolean_group',
+ 'required_int64_group',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'required_string_group':
+ (int,),
+ 'required_boolean_group':
+ (bool,),
+ 'required_int64_group':
+ (int,),
+ 'string_group':
+ (int,),
+ 'boolean_group':
+ (bool,),
+ 'int64_group':
+ (int,),
+ },
+ 'attribute_map': {
+ 'required_string_group': 'required_string_group',
+ 'required_boolean_group': 'required_boolean_group',
+ 'required_int64_group': 'required_int64_group',
+ 'string_group': 'string_group',
+ 'boolean_group': 'boolean_group',
+ 'int64_group': 'int64_group',
+ },
+ 'location_map': {
+ 'required_string_group': 'query',
+ 'required_boolean_group': 'header',
+ 'required_int64_group': 'query',
+ 'string_group': 'query',
+ 'boolean_group': 'header',
+ 'int64_group': 'query',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__test_group_parameters
+ )
+
+ def __test_inline_additional_properties(self, request_body, **kwargs): # noqa: E501
+ """test inline additionalProperties # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.test_inline_additional_properties(request_body, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param {str: (str,)} request_body: request body (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['request_body'] = \
+ request_body
+ return self.call_with_http_info(**kwargs)
+
+ self.test_inline_additional_properties = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/fake/inline-additionalProperties',
+ 'operation_id': 'test_inline_additional_properties',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'request_body',
+ ],
+ 'required': [
+ 'request_body',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'request_body':
+ ({str: (str,)},),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'request_body': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__test_inline_additional_properties
+ )
+
+ def __test_json_form_data(self, param, param2, **kwargs): # noqa: E501
+ """test json serialization of form data # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.test_json_form_data(param, param2, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param str param: field1 (required)
+ :param str param2: field2 (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['param'] = \
+ param
+ kwargs['param2'] = \
+ param2
+ return self.call_with_http_info(**kwargs)
+
+ self.test_json_form_data = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/fake/jsonFormData',
+ 'operation_id': 'test_json_form_data',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'param',
+ 'param2',
+ ],
+ 'required': [
+ 'param',
+ 'param2',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'param':
+ (str,),
+ 'param2':
+ (str,),
+ },
+ 'attribute_map': {
+ 'param': 'param',
+ 'param2': 'param2',
+ },
+ 'location_map': {
+ 'param': 'form',
+ 'param2': 'form',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/x-www-form-urlencoded'
+ ]
+ },
+ api_client=api_client,
+ callable=__test_json_form_data
+ )
+
+ def __test_query_parameter_collection_format(self, pipe, ioutil, http, url, context, **kwargs): # noqa: E501
+ """test_query_parameter_collection_format # noqa: E501
+
+ To test the collection format in query parameters # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.test_query_parameter_collection_format(pipe, ioutil, http, url, context, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param [str] pipe: (required)
+ :param [str] ioutil: (required)
+ :param [str] http: (required)
+ :param [str] url: (required)
+ :param [str] context: (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['pipe'] = \
+ pipe
+ kwargs['ioutil'] = \
+ ioutil
+ kwargs['http'] = \
+ http
+ kwargs['url'] = \
+ url
+ kwargs['context'] = \
+ context
+ return self.call_with_http_info(**kwargs)
+
+ self.test_query_parameter_collection_format = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/fake/test-query-paramters',
+ 'operation_id': 'test_query_parameter_collection_format',
+ 'http_method': 'PUT',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'pipe',
+ 'ioutil',
+ 'http',
+ 'url',
+ 'context',
+ ],
+ 'required': [
+ 'pipe',
+ 'ioutil',
+ 'http',
+ 'url',
+ 'context',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'pipe':
+ ([str],),
+ 'ioutil':
+ ([str],),
+ 'http':
+ ([str],),
+ 'url':
+ ([str],),
+ 'context':
+ ([str],),
+ },
+ 'attribute_map': {
+ 'pipe': 'pipe',
+ 'ioutil': 'ioutil',
+ 'http': 'http',
+ 'url': 'url',
+ 'context': 'context',
+ },
+ 'location_map': {
+ 'pipe': 'query',
+ 'ioutil': 'query',
+ 'http': 'query',
+ 'url': 'query',
+ 'context': 'query',
+ },
+ 'collection_format_map': {
+ 'pipe': 'multi',
+ 'ioutil': 'csv',
+ 'http': 'space',
+ 'url': 'csv',
+ 'context': 'multi',
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__test_query_parameter_collection_format
+ )
+
+
+class Endpoint(object):
+ def __init__(self, settings=None, params_map=None, root_map=None,
+ headers_map=None, api_client=None, callable=None):
+ """Creates an endpoint
+
+ Args:
+ settings (dict): see below key value pairs
+ 'response_type' (tuple/None): response type
+ 'auth' (list): a list of auth type keys
+ 'endpoint_path' (str): the endpoint path
+ 'operation_id' (str): endpoint string identifier
+ 'http_method' (str): POST/PUT/PATCH/GET etc
+ 'servers' (list): list of str servers that this endpoint is at
+ params_map (dict): see below key value pairs
+ 'all' (list): list of str endpoint parameter names
+ 'required' (list): list of required parameter names
+ 'nullable' (list): list of nullable parameter names
+ 'enum' (list): list of parameters with enum values
+ 'validation' (list): list of parameters with validations
+ root_map
+ 'validations' (dict): the dict mapping endpoint parameter tuple
+ paths to their validation dictionaries
+ 'allowed_values' (dict): the dict mapping endpoint parameter
+ tuple paths to their allowed_values (enum) dictionaries
+ 'openapi_types' (dict): param_name to openapi type
+ 'attribute_map' (dict): param_name to camelCase name
+ 'location_map' (dict): param_name to 'body', 'file', 'form',
+ 'header', 'path', 'query'
+ collection_format_map (dict): param_name to `csv` etc.
+ headers_map (dict): see below key value pairs
+ 'accept' (list): list of Accept header strings
+ 'content_type' (list): list of Content-Type header strings
+ api_client (ApiClient) api client instance
+ callable (function): the function which is invoked when the
+ Endpoint is called
+ """
+ self.settings = settings
+ self.params_map = params_map
+ self.params_map['all'].extend([
+ 'async_req',
+ '_host_index',
+ '_preload_content',
+ '_request_timeout',
+ '_return_http_data_only',
+ '_check_input_type',
+ '_check_return_type'
+ ])
+ self.params_map['nullable'].extend(['_request_timeout'])
+ self.validations = root_map['validations']
+ self.allowed_values = root_map['allowed_values']
+ self.openapi_types = root_map['openapi_types']
+ extra_types = {
+ 'async_req': (bool,),
+ '_host_index': (int,),
+ '_preload_content': (bool,),
+ '_request_timeout': (none_type, int, (int,), [int]),
+ '_return_http_data_only': (bool,),
+ '_check_input_type': (bool,),
+ '_check_return_type': (bool,)
+ }
+ self.openapi_types.update(extra_types)
+ self.attribute_map = root_map['attribute_map']
+ self.location_map = root_map['location_map']
+ self.collection_format_map = root_map['collection_format_map']
+ self.headers_map = headers_map
+ self.api_client = api_client
+ self.callable = callable
+
+ def __validate_inputs(self, kwargs):
+ for param in self.params_map['enum']:
+ if param in kwargs:
+ check_allowed_values(
+ self.allowed_values,
+ (param,),
+ kwargs[param]
+ )
+
+ for param in self.params_map['validation']:
+ if param in kwargs:
+ check_validations(
+ self.validations,
+ (param,),
+ kwargs[param]
+ )
+
+ if kwargs['_check_input_type'] is False:
+ return
+
+ for key, value in six.iteritems(kwargs):
+ fixed_val = validate_and_convert_types(
+ value,
+ self.openapi_types[key],
+ [key],
+ False,
+ kwargs['_check_input_type'],
+ configuration=self.api_client.configuration
+ )
+ kwargs[key] = fixed_val
+
+ def __gather_params(self, kwargs):
+ params = {
+ 'body': None,
+ 'collection_format': {},
+ 'file': {},
+ 'form': [],
+ 'header': {},
+ 'path': {},
+ 'query': []
+ }
+
+ for param_name, param_value in six.iteritems(kwargs):
+ param_location = self.location_map.get(param_name)
+ if param_location is None:
+ continue
+ if param_location:
+ if param_location == 'body':
+ params['body'] = param_value
+ continue
+ base_name = self.attribute_map[param_name]
+ if (param_location == 'form' and
+ self.openapi_types[param_name] == (file_type,)):
+ params['file'][param_name] = [param_value]
+ elif (param_location == 'form' and
+ self.openapi_types[param_name] == ([file_type],)):
+ # param_value is already a list
+ params['file'][param_name] = param_value
+ elif param_location in {'form', 'query'}:
+ param_value_full = (base_name, param_value)
+ params[param_location].append(param_value_full)
+ if param_location not in {'form', 'query'}:
+ params[param_location][base_name] = param_value
+ collection_format = self.collection_format_map.get(param_name)
+ if collection_format:
+ params['collection_format'][base_name] = collection_format
+
+ return params
+
+ def __call__(self, *args, **kwargs):
+ """ This method is invoked when endpoints are called
+ Example:
+ pet_api = PetApi()
+ pet_api.add_pet # this is an instance of the class Endpoint
+ pet_api.add_pet() # this invokes pet_api.add_pet.__call__()
+ which then invokes the callable functions stored in that endpoint at
+ pet_api.add_pet.callable or self.callable in this class
+ """
+ return self.callable(self, *args, **kwargs)
+
+ def call_with_http_info(self, **kwargs):
+
+ try:
+ _host = self.settings['servers'][kwargs['_host_index']]
+ except IndexError:
+ if self.settings['servers']:
+ raise ApiValueError(
+ "Invalid host index. Must be 0 <= index < %s" %
+ len(self.settings['servers'])
+ )
+ _host = None
+
+ for key, value in six.iteritems(kwargs):
+ if key not in self.params_map['all']:
+ raise ApiTypeError(
+ "Got an unexpected parameter '%s'"
+ " to method `%s`" %
+ (key, self.settings['operation_id'])
+ )
+ # only throw this nullable ApiValueError if _check_input_type
+ # is False, if _check_input_type==True we catch this case
+ # in self.__validate_inputs
+ if (key not in self.params_map['nullable'] and value is None
+ and kwargs['_check_input_type'] is False):
+ raise ApiValueError(
+ "Value may not be None for non-nullable parameter `%s`"
+ " when calling `%s`" %
+ (key, self.settings['operation_id'])
+ )
+
+ for key in self.params_map['required']:
+ if key not in kwargs.keys():
+ raise ApiValueError(
+ "Missing the required parameter `%s` when calling "
+ "`%s`" % (key, self.settings['operation_id'])
+ )
+
+ self.__validate_inputs(kwargs)
+
+ params = self.__gather_params(kwargs)
+
+ accept_headers_list = self.headers_map['accept']
+ if accept_headers_list:
+ params['header']['Accept'] = self.api_client.select_header_accept(
+ accept_headers_list)
+
+ content_type_headers_list = self.headers_map['content_type']
+ if content_type_headers_list:
+ header_list = self.api_client.select_header_content_type(
+ content_type_headers_list)
+ params['header']['Content-Type'] = header_list
+
+ return self.api_client.call_api(
+ self.settings['endpoint_path'], self.settings['http_method'],
+ params['path'],
+ params['query'],
+ params['header'],
+ body=params['body'],
+ post_params=params['form'],
+ files=params['file'],
+ response_type=self.settings['response_type'],
+ auth_settings=self.settings['auth'],
+ async_req=kwargs['async_req'],
+ _check_type=kwargs['_check_return_type'],
+ _return_http_data_only=kwargs['_return_http_data_only'],
+ _preload_content=kwargs['_preload_content'],
+ _request_timeout=kwargs['_request_timeout'],
+ _host=_host,
+ collection_formats=params['collection_format'])
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/api/fake_classname_tags_123_api.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/fake_classname_tags_123_api.py
new file mode 100644
index 00000000000..90da061d2d9
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/fake_classname_tags_123_api.py
@@ -0,0 +1,380 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import re # noqa: F401
+import sys # noqa: F401
+
+# python 2 and python 3 compatibility library
+import six
+
+from petstore_api.api_client import ApiClient
+from petstore_api.exceptions import (
+ ApiTypeError,
+ ApiValueError
+)
+from petstore_api.model_utils import ( # noqa: F401
+ check_allowed_values,
+ check_validations,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_and_convert_types
+)
+from petstore_api.models import client
+
+
+class FakeClassnameTags123Api(object):
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient()
+ self.api_client = api_client
+
+ def __test_classname(self, client_client, **kwargs): # noqa: E501
+ """To test class name in snake case # noqa: E501
+
+ To test class name in snake case # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.test_classname(client_client, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param client.Client client_client: client model (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: client.Client
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['client_client'] = \
+ client_client
+ return self.call_with_http_info(**kwargs)
+
+ self.test_classname = Endpoint(
+ settings={
+ 'response_type': (client.Client,),
+ 'auth': [
+ 'api_key_query'
+ ],
+ 'endpoint_path': '/fake_classname_test',
+ 'operation_id': 'test_classname',
+ 'http_method': 'PATCH',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'client_client',
+ ],
+ 'required': [
+ 'client_client',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'client_client':
+ (client.Client,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'client_client': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__test_classname
+ )
+
+
+class Endpoint(object):
+ def __init__(self, settings=None, params_map=None, root_map=None,
+ headers_map=None, api_client=None, callable=None):
+ """Creates an endpoint
+
+ Args:
+ settings (dict): see below key value pairs
+ 'response_type' (tuple/None): response type
+ 'auth' (list): a list of auth type keys
+ 'endpoint_path' (str): the endpoint path
+ 'operation_id' (str): endpoint string identifier
+ 'http_method' (str): POST/PUT/PATCH/GET etc
+ 'servers' (list): list of str servers that this endpoint is at
+ params_map (dict): see below key value pairs
+ 'all' (list): list of str endpoint parameter names
+ 'required' (list): list of required parameter names
+ 'nullable' (list): list of nullable parameter names
+ 'enum' (list): list of parameters with enum values
+ 'validation' (list): list of parameters with validations
+ root_map
+ 'validations' (dict): the dict mapping endpoint parameter tuple
+ paths to their validation dictionaries
+ 'allowed_values' (dict): the dict mapping endpoint parameter
+ tuple paths to their allowed_values (enum) dictionaries
+ 'openapi_types' (dict): param_name to openapi type
+ 'attribute_map' (dict): param_name to camelCase name
+ 'location_map' (dict): param_name to 'body', 'file', 'form',
+ 'header', 'path', 'query'
+ collection_format_map (dict): param_name to `csv` etc.
+ headers_map (dict): see below key value pairs
+ 'accept' (list): list of Accept header strings
+ 'content_type' (list): list of Content-Type header strings
+ api_client (ApiClient) api client instance
+ callable (function): the function which is invoked when the
+ Endpoint is called
+ """
+ self.settings = settings
+ self.params_map = params_map
+ self.params_map['all'].extend([
+ 'async_req',
+ '_host_index',
+ '_preload_content',
+ '_request_timeout',
+ '_return_http_data_only',
+ '_check_input_type',
+ '_check_return_type'
+ ])
+ self.params_map['nullable'].extend(['_request_timeout'])
+ self.validations = root_map['validations']
+ self.allowed_values = root_map['allowed_values']
+ self.openapi_types = root_map['openapi_types']
+ extra_types = {
+ 'async_req': (bool,),
+ '_host_index': (int,),
+ '_preload_content': (bool,),
+ '_request_timeout': (none_type, int, (int,), [int]),
+ '_return_http_data_only': (bool,),
+ '_check_input_type': (bool,),
+ '_check_return_type': (bool,)
+ }
+ self.openapi_types.update(extra_types)
+ self.attribute_map = root_map['attribute_map']
+ self.location_map = root_map['location_map']
+ self.collection_format_map = root_map['collection_format_map']
+ self.headers_map = headers_map
+ self.api_client = api_client
+ self.callable = callable
+
+ def __validate_inputs(self, kwargs):
+ for param in self.params_map['enum']:
+ if param in kwargs:
+ check_allowed_values(
+ self.allowed_values,
+ (param,),
+ kwargs[param]
+ )
+
+ for param in self.params_map['validation']:
+ if param in kwargs:
+ check_validations(
+ self.validations,
+ (param,),
+ kwargs[param]
+ )
+
+ if kwargs['_check_input_type'] is False:
+ return
+
+ for key, value in six.iteritems(kwargs):
+ fixed_val = validate_and_convert_types(
+ value,
+ self.openapi_types[key],
+ [key],
+ False,
+ kwargs['_check_input_type'],
+ configuration=self.api_client.configuration
+ )
+ kwargs[key] = fixed_val
+
+ def __gather_params(self, kwargs):
+ params = {
+ 'body': None,
+ 'collection_format': {},
+ 'file': {},
+ 'form': [],
+ 'header': {},
+ 'path': {},
+ 'query': []
+ }
+
+ for param_name, param_value in six.iteritems(kwargs):
+ param_location = self.location_map.get(param_name)
+ if param_location is None:
+ continue
+ if param_location:
+ if param_location == 'body':
+ params['body'] = param_value
+ continue
+ base_name = self.attribute_map[param_name]
+ if (param_location == 'form' and
+ self.openapi_types[param_name] == (file_type,)):
+ params['file'][param_name] = [param_value]
+ elif (param_location == 'form' and
+ self.openapi_types[param_name] == ([file_type],)):
+ # param_value is already a list
+ params['file'][param_name] = param_value
+ elif param_location in {'form', 'query'}:
+ param_value_full = (base_name, param_value)
+ params[param_location].append(param_value_full)
+ if param_location not in {'form', 'query'}:
+ params[param_location][base_name] = param_value
+ collection_format = self.collection_format_map.get(param_name)
+ if collection_format:
+ params['collection_format'][base_name] = collection_format
+
+ return params
+
+ def __call__(self, *args, **kwargs):
+ """ This method is invoked when endpoints are called
+ Example:
+ pet_api = PetApi()
+ pet_api.add_pet # this is an instance of the class Endpoint
+ pet_api.add_pet() # this invokes pet_api.add_pet.__call__()
+ which then invokes the callable functions stored in that endpoint at
+ pet_api.add_pet.callable or self.callable in this class
+ """
+ return self.callable(self, *args, **kwargs)
+
+ def call_with_http_info(self, **kwargs):
+
+ try:
+ _host = self.settings['servers'][kwargs['_host_index']]
+ except IndexError:
+ if self.settings['servers']:
+ raise ApiValueError(
+ "Invalid host index. Must be 0 <= index < %s" %
+ len(self.settings['servers'])
+ )
+ _host = None
+
+ for key, value in six.iteritems(kwargs):
+ if key not in self.params_map['all']:
+ raise ApiTypeError(
+ "Got an unexpected parameter '%s'"
+ " to method `%s`" %
+ (key, self.settings['operation_id'])
+ )
+ # only throw this nullable ApiValueError if _check_input_type
+ # is False, if _check_input_type==True we catch this case
+ # in self.__validate_inputs
+ if (key not in self.params_map['nullable'] and value is None
+ and kwargs['_check_input_type'] is False):
+ raise ApiValueError(
+ "Value may not be None for non-nullable parameter `%s`"
+ " when calling `%s`" %
+ (key, self.settings['operation_id'])
+ )
+
+ for key in self.params_map['required']:
+ if key not in kwargs.keys():
+ raise ApiValueError(
+ "Missing the required parameter `%s` when calling "
+ "`%s`" % (key, self.settings['operation_id'])
+ )
+
+ self.__validate_inputs(kwargs)
+
+ params = self.__gather_params(kwargs)
+
+ accept_headers_list = self.headers_map['accept']
+ if accept_headers_list:
+ params['header']['Accept'] = self.api_client.select_header_accept(
+ accept_headers_list)
+
+ content_type_headers_list = self.headers_map['content_type']
+ if content_type_headers_list:
+ header_list = self.api_client.select_header_content_type(
+ content_type_headers_list)
+ params['header']['Content-Type'] = header_list
+
+ return self.api_client.call_api(
+ self.settings['endpoint_path'], self.settings['http_method'],
+ params['path'],
+ params['query'],
+ params['header'],
+ body=params['body'],
+ post_params=params['form'],
+ files=params['file'],
+ response_type=self.settings['response_type'],
+ auth_settings=self.settings['auth'],
+ async_req=kwargs['async_req'],
+ _check_type=kwargs['_check_return_type'],
+ _return_http_data_only=kwargs['_return_http_data_only'],
+ _preload_content=kwargs['_preload_content'],
+ _request_timeout=kwargs['_request_timeout'],
+ _host=_host,
+ collection_formats=params['collection_format'])
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/api/pet_api.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/pet_api.py
new file mode 100644
index 00000000000..9d890ef25f2
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/pet_api.py
@@ -0,0 +1,1319 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import re # noqa: F401
+import sys # noqa: F401
+
+# python 2 and python 3 compatibility library
+import six
+
+from petstore_api.api_client import ApiClient
+from petstore_api.exceptions import (
+ ApiTypeError,
+ ApiValueError
+)
+from petstore_api.model_utils import ( # noqa: F401
+ check_allowed_values,
+ check_validations,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_and_convert_types
+)
+from petstore_api.models import pet
+from petstore_api.models import api_response
+
+
+class PetApi(object):
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient()
+ self.api_client = api_client
+
+ def __add_pet(self, pet_pet, **kwargs): # noqa: E501
+ """Add a new pet to the store # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.add_pet(pet_pet, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param pet.Pet pet_pet: Pet object that needs to be added to the store (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['pet_pet'] = \
+ pet_pet
+ return self.call_with_http_info(**kwargs)
+
+ self.add_pet = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [
+ 'petstore_auth'
+ ],
+ 'endpoint_path': '/pet',
+ 'operation_id': 'add_pet',
+ 'http_method': 'POST',
+ 'servers': [
+ 'http://petstore.swagger.io/v2',
+ 'http://path-server-test.petstore.local/v2'
+ ]
+ },
+ params_map={
+ 'all': [
+ 'pet_pet',
+ ],
+ 'required': [
+ 'pet_pet',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'pet_pet':
+ (pet.Pet,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'pet_pet': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/json',
+ 'application/xml'
+ ]
+ },
+ api_client=api_client,
+ callable=__add_pet
+ )
+
+ def __delete_pet(self, pet_id, **kwargs): # noqa: E501
+ """Deletes a pet # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.delete_pet(pet_id, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param int pet_id: Pet id to delete (required)
+ :param str api_key:
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['pet_id'] = \
+ pet_id
+ return self.call_with_http_info(**kwargs)
+
+ self.delete_pet = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [
+ 'petstore_auth'
+ ],
+ 'endpoint_path': '/pet/{petId}',
+ 'operation_id': 'delete_pet',
+ 'http_method': 'DELETE',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'pet_id',
+ 'api_key',
+ ],
+ 'required': [
+ 'pet_id',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'pet_id':
+ (int,),
+ 'api_key':
+ (str,),
+ },
+ 'attribute_map': {
+ 'pet_id': 'petId',
+ 'api_key': 'api_key',
+ },
+ 'location_map': {
+ 'pet_id': 'path',
+ 'api_key': 'header',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__delete_pet
+ )
+
+ def __find_pets_by_status(self, status, **kwargs): # noqa: E501
+ """Finds Pets by status # noqa: E501
+
+ Multiple status values can be provided with comma separated strings # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.find_pets_by_status(status, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param [str] status: Status values that need to be considered for filter (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: [pet.Pet]
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['status'] = \
+ status
+ return self.call_with_http_info(**kwargs)
+
+ self.find_pets_by_status = Endpoint(
+ settings={
+ 'response_type': ([pet.Pet],),
+ 'auth': [
+ 'petstore_auth'
+ ],
+ 'endpoint_path': '/pet/findByStatus',
+ 'operation_id': 'find_pets_by_status',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'status',
+ ],
+ 'required': [
+ 'status',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ 'status',
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ ('status',): {
+
+ "AVAILABLE": "available",
+ "PENDING": "pending",
+ "SOLD": "sold"
+ },
+ },
+ 'openapi_types': {
+ 'status':
+ ([str],),
+ },
+ 'attribute_map': {
+ 'status': 'status',
+ },
+ 'location_map': {
+ 'status': 'query',
+ },
+ 'collection_format_map': {
+ 'status': 'csv',
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/xml',
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__find_pets_by_status
+ )
+
+ def __find_pets_by_tags(self, tags, **kwargs): # noqa: E501
+ """Finds Pets by tags # noqa: E501
+
+ Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.find_pets_by_tags(tags, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param [str] tags: Tags to filter by (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: [pet.Pet]
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['tags'] = \
+ tags
+ return self.call_with_http_info(**kwargs)
+
+ self.find_pets_by_tags = Endpoint(
+ settings={
+ 'response_type': ([pet.Pet],),
+ 'auth': [
+ 'petstore_auth'
+ ],
+ 'endpoint_path': '/pet/findByTags',
+ 'operation_id': 'find_pets_by_tags',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'tags',
+ ],
+ 'required': [
+ 'tags',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'tags':
+ ([str],),
+ },
+ 'attribute_map': {
+ 'tags': 'tags',
+ },
+ 'location_map': {
+ 'tags': 'query',
+ },
+ 'collection_format_map': {
+ 'tags': 'csv',
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/xml',
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__find_pets_by_tags
+ )
+
+ def __get_pet_by_id(self, pet_id, **kwargs): # noqa: E501
+ """Find pet by ID # noqa: E501
+
+ Returns a single pet # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.get_pet_by_id(pet_id, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param int pet_id: ID of pet to return (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: pet.Pet
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['pet_id'] = \
+ pet_id
+ return self.call_with_http_info(**kwargs)
+
+ self.get_pet_by_id = Endpoint(
+ settings={
+ 'response_type': (pet.Pet,),
+ 'auth': [
+ 'api_key'
+ ],
+ 'endpoint_path': '/pet/{petId}',
+ 'operation_id': 'get_pet_by_id',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'pet_id',
+ ],
+ 'required': [
+ 'pet_id',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'pet_id':
+ (int,),
+ },
+ 'attribute_map': {
+ 'pet_id': 'petId',
+ },
+ 'location_map': {
+ 'pet_id': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/xml',
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__get_pet_by_id
+ )
+
+ def __update_pet(self, pet_pet, **kwargs): # noqa: E501
+ """Update an existing pet # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.update_pet(pet_pet, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param pet.Pet pet_pet: Pet object that needs to be added to the store (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['pet_pet'] = \
+ pet_pet
+ return self.call_with_http_info(**kwargs)
+
+ self.update_pet = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [
+ 'petstore_auth'
+ ],
+ 'endpoint_path': '/pet',
+ 'operation_id': 'update_pet',
+ 'http_method': 'PUT',
+ 'servers': [
+ 'http://petstore.swagger.io/v2',
+ 'http://path-server-test.petstore.local/v2'
+ ]
+ },
+ params_map={
+ 'all': [
+ 'pet_pet',
+ ],
+ 'required': [
+ 'pet_pet',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'pet_pet':
+ (pet.Pet,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'pet_pet': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/json',
+ 'application/xml'
+ ]
+ },
+ api_client=api_client,
+ callable=__update_pet
+ )
+
+ def __update_pet_with_form(self, pet_id, **kwargs): # noqa: E501
+ """Updates a pet in the store with form data # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.update_pet_with_form(pet_id, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param int pet_id: ID of pet that needs to be updated (required)
+ :param str name: Updated name of the pet
+ :param str status: Updated status of the pet
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['pet_id'] = \
+ pet_id
+ return self.call_with_http_info(**kwargs)
+
+ self.update_pet_with_form = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [
+ 'petstore_auth'
+ ],
+ 'endpoint_path': '/pet/{petId}',
+ 'operation_id': 'update_pet_with_form',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'pet_id',
+ 'name',
+ 'status',
+ ],
+ 'required': [
+ 'pet_id',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'pet_id':
+ (int,),
+ 'name':
+ (str,),
+ 'status':
+ (str,),
+ },
+ 'attribute_map': {
+ 'pet_id': 'petId',
+ 'name': 'name',
+ 'status': 'status',
+ },
+ 'location_map': {
+ 'pet_id': 'path',
+ 'name': 'form',
+ 'status': 'form',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/x-www-form-urlencoded'
+ ]
+ },
+ api_client=api_client,
+ callable=__update_pet_with_form
+ )
+
+ def __upload_file(self, pet_id, **kwargs): # noqa: E501
+ """uploads an image # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.upload_file(pet_id, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param int pet_id: ID of pet to update (required)
+ :param str additional_metadata: Additional data to pass to server
+ :param file_type file: file to upload
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: api_response.ApiResponse
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['pet_id'] = \
+ pet_id
+ return self.call_with_http_info(**kwargs)
+
+ self.upload_file = Endpoint(
+ settings={
+ 'response_type': (api_response.ApiResponse,),
+ 'auth': [
+ 'petstore_auth'
+ ],
+ 'endpoint_path': '/pet/{petId}/uploadImage',
+ 'operation_id': 'upload_file',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'pet_id',
+ 'additional_metadata',
+ 'file',
+ ],
+ 'required': [
+ 'pet_id',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'pet_id':
+ (int,),
+ 'additional_metadata':
+ (str,),
+ 'file':
+ (file_type,),
+ },
+ 'attribute_map': {
+ 'pet_id': 'petId',
+ 'additional_metadata': 'additionalMetadata',
+ 'file': 'file',
+ },
+ 'location_map': {
+ 'pet_id': 'path',
+ 'additional_metadata': 'form',
+ 'file': 'form',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [
+ 'multipart/form-data'
+ ]
+ },
+ api_client=api_client,
+ callable=__upload_file
+ )
+
+ def __upload_file_with_required_file(self, pet_id, required_file, **kwargs): # noqa: E501
+ """uploads an image (required) # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.upload_file_with_required_file(pet_id, required_file, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param int pet_id: ID of pet to update (required)
+ :param file_type required_file: file to upload (required)
+ :param str additional_metadata: Additional data to pass to server
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: api_response.ApiResponse
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['pet_id'] = \
+ pet_id
+ kwargs['required_file'] = \
+ required_file
+ return self.call_with_http_info(**kwargs)
+
+ self.upload_file_with_required_file = Endpoint(
+ settings={
+ 'response_type': (api_response.ApiResponse,),
+ 'auth': [
+ 'petstore_auth'
+ ],
+ 'endpoint_path': '/fake/{petId}/uploadImageWithRequiredFile',
+ 'operation_id': 'upload_file_with_required_file',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'pet_id',
+ 'required_file',
+ 'additional_metadata',
+ ],
+ 'required': [
+ 'pet_id',
+ 'required_file',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'pet_id':
+ (int,),
+ 'required_file':
+ (file_type,),
+ 'additional_metadata':
+ (str,),
+ },
+ 'attribute_map': {
+ 'pet_id': 'petId',
+ 'required_file': 'requiredFile',
+ 'additional_metadata': 'additionalMetadata',
+ },
+ 'location_map': {
+ 'pet_id': 'path',
+ 'required_file': 'form',
+ 'additional_metadata': 'form',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [
+ 'multipart/form-data'
+ ]
+ },
+ api_client=api_client,
+ callable=__upload_file_with_required_file
+ )
+
+
+class Endpoint(object):
+ def __init__(self, settings=None, params_map=None, root_map=None,
+ headers_map=None, api_client=None, callable=None):
+ """Creates an endpoint
+
+ Args:
+ settings (dict): see below key value pairs
+ 'response_type' (tuple/None): response type
+ 'auth' (list): a list of auth type keys
+ 'endpoint_path' (str): the endpoint path
+ 'operation_id' (str): endpoint string identifier
+ 'http_method' (str): POST/PUT/PATCH/GET etc
+ 'servers' (list): list of str servers that this endpoint is at
+ params_map (dict): see below key value pairs
+ 'all' (list): list of str endpoint parameter names
+ 'required' (list): list of required parameter names
+ 'nullable' (list): list of nullable parameter names
+ 'enum' (list): list of parameters with enum values
+ 'validation' (list): list of parameters with validations
+ root_map
+ 'validations' (dict): the dict mapping endpoint parameter tuple
+ paths to their validation dictionaries
+ 'allowed_values' (dict): the dict mapping endpoint parameter
+ tuple paths to their allowed_values (enum) dictionaries
+ 'openapi_types' (dict): param_name to openapi type
+ 'attribute_map' (dict): param_name to camelCase name
+ 'location_map' (dict): param_name to 'body', 'file', 'form',
+ 'header', 'path', 'query'
+ collection_format_map (dict): param_name to `csv` etc.
+ headers_map (dict): see below key value pairs
+ 'accept' (list): list of Accept header strings
+ 'content_type' (list): list of Content-Type header strings
+ api_client (ApiClient) api client instance
+ callable (function): the function which is invoked when the
+ Endpoint is called
+ """
+ self.settings = settings
+ self.params_map = params_map
+ self.params_map['all'].extend([
+ 'async_req',
+ '_host_index',
+ '_preload_content',
+ '_request_timeout',
+ '_return_http_data_only',
+ '_check_input_type',
+ '_check_return_type'
+ ])
+ self.params_map['nullable'].extend(['_request_timeout'])
+ self.validations = root_map['validations']
+ self.allowed_values = root_map['allowed_values']
+ self.openapi_types = root_map['openapi_types']
+ extra_types = {
+ 'async_req': (bool,),
+ '_host_index': (int,),
+ '_preload_content': (bool,),
+ '_request_timeout': (none_type, int, (int,), [int]),
+ '_return_http_data_only': (bool,),
+ '_check_input_type': (bool,),
+ '_check_return_type': (bool,)
+ }
+ self.openapi_types.update(extra_types)
+ self.attribute_map = root_map['attribute_map']
+ self.location_map = root_map['location_map']
+ self.collection_format_map = root_map['collection_format_map']
+ self.headers_map = headers_map
+ self.api_client = api_client
+ self.callable = callable
+
+ def __validate_inputs(self, kwargs):
+ for param in self.params_map['enum']:
+ if param in kwargs:
+ check_allowed_values(
+ self.allowed_values,
+ (param,),
+ kwargs[param]
+ )
+
+ for param in self.params_map['validation']:
+ if param in kwargs:
+ check_validations(
+ self.validations,
+ (param,),
+ kwargs[param]
+ )
+
+ if kwargs['_check_input_type'] is False:
+ return
+
+ for key, value in six.iteritems(kwargs):
+ fixed_val = validate_and_convert_types(
+ value,
+ self.openapi_types[key],
+ [key],
+ False,
+ kwargs['_check_input_type'],
+ configuration=self.api_client.configuration
+ )
+ kwargs[key] = fixed_val
+
+ def __gather_params(self, kwargs):
+ params = {
+ 'body': None,
+ 'collection_format': {},
+ 'file': {},
+ 'form': [],
+ 'header': {},
+ 'path': {},
+ 'query': []
+ }
+
+ for param_name, param_value in six.iteritems(kwargs):
+ param_location = self.location_map.get(param_name)
+ if param_location is None:
+ continue
+ if param_location:
+ if param_location == 'body':
+ params['body'] = param_value
+ continue
+ base_name = self.attribute_map[param_name]
+ if (param_location == 'form' and
+ self.openapi_types[param_name] == (file_type,)):
+ params['file'][param_name] = [param_value]
+ elif (param_location == 'form' and
+ self.openapi_types[param_name] == ([file_type],)):
+ # param_value is already a list
+ params['file'][param_name] = param_value
+ elif param_location in {'form', 'query'}:
+ param_value_full = (base_name, param_value)
+ params[param_location].append(param_value_full)
+ if param_location not in {'form', 'query'}:
+ params[param_location][base_name] = param_value
+ collection_format = self.collection_format_map.get(param_name)
+ if collection_format:
+ params['collection_format'][base_name] = collection_format
+
+ return params
+
+ def __call__(self, *args, **kwargs):
+ """ This method is invoked when endpoints are called
+ Example:
+ pet_api = PetApi()
+ pet_api.add_pet # this is an instance of the class Endpoint
+ pet_api.add_pet() # this invokes pet_api.add_pet.__call__()
+ which then invokes the callable functions stored in that endpoint at
+ pet_api.add_pet.callable or self.callable in this class
+ """
+ return self.callable(self, *args, **kwargs)
+
+ def call_with_http_info(self, **kwargs):
+
+ try:
+ _host = self.settings['servers'][kwargs['_host_index']]
+ except IndexError:
+ if self.settings['servers']:
+ raise ApiValueError(
+ "Invalid host index. Must be 0 <= index < %s" %
+ len(self.settings['servers'])
+ )
+ _host = None
+
+ for key, value in six.iteritems(kwargs):
+ if key not in self.params_map['all']:
+ raise ApiTypeError(
+ "Got an unexpected parameter '%s'"
+ " to method `%s`" %
+ (key, self.settings['operation_id'])
+ )
+ # only throw this nullable ApiValueError if _check_input_type
+ # is False, if _check_input_type==True we catch this case
+ # in self.__validate_inputs
+ if (key not in self.params_map['nullable'] and value is None
+ and kwargs['_check_input_type'] is False):
+ raise ApiValueError(
+ "Value may not be None for non-nullable parameter `%s`"
+ " when calling `%s`" %
+ (key, self.settings['operation_id'])
+ )
+
+ for key in self.params_map['required']:
+ if key not in kwargs.keys():
+ raise ApiValueError(
+ "Missing the required parameter `%s` when calling "
+ "`%s`" % (key, self.settings['operation_id'])
+ )
+
+ self.__validate_inputs(kwargs)
+
+ params = self.__gather_params(kwargs)
+
+ accept_headers_list = self.headers_map['accept']
+ if accept_headers_list:
+ params['header']['Accept'] = self.api_client.select_header_accept(
+ accept_headers_list)
+
+ content_type_headers_list = self.headers_map['content_type']
+ if content_type_headers_list:
+ header_list = self.api_client.select_header_content_type(
+ content_type_headers_list)
+ params['header']['Content-Type'] = header_list
+
+ return self.api_client.call_api(
+ self.settings['endpoint_path'], self.settings['http_method'],
+ params['path'],
+ params['query'],
+ params['header'],
+ body=params['body'],
+ post_params=params['form'],
+ files=params['file'],
+ response_type=self.settings['response_type'],
+ auth_settings=self.settings['auth'],
+ async_req=kwargs['async_req'],
+ _check_type=kwargs['_check_return_type'],
+ _return_http_data_only=kwargs['_return_http_data_only'],
+ _preload_content=kwargs['_preload_content'],
+ _request_timeout=kwargs['_request_timeout'],
+ _host=_host,
+ collection_formats=params['collection_format'])
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/api/store_api.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/store_api.py
new file mode 100644
index 00000000000..c45745f3e52
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/store_api.py
@@ -0,0 +1,699 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import re # noqa: F401
+import sys # noqa: F401
+
+# python 2 and python 3 compatibility library
+import six
+
+from petstore_api.api_client import ApiClient
+from petstore_api.exceptions import (
+ ApiTypeError,
+ ApiValueError
+)
+from petstore_api.model_utils import ( # noqa: F401
+ check_allowed_values,
+ check_validations,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_and_convert_types
+)
+from petstore_api.models import order
+
+
+class StoreApi(object):
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient()
+ self.api_client = api_client
+
+ def __delete_order(self, order_id, **kwargs): # noqa: E501
+ """Delete purchase order by ID # noqa: E501
+
+ For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.delete_order(order_id, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param str order_id: ID of the order that needs to be deleted (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['order_id'] = \
+ order_id
+ return self.call_with_http_info(**kwargs)
+
+ self.delete_order = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/store/order/{order_id}',
+ 'operation_id': 'delete_order',
+ 'http_method': 'DELETE',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'order_id',
+ ],
+ 'required': [
+ 'order_id',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'order_id':
+ (str,),
+ },
+ 'attribute_map': {
+ 'order_id': 'order_id',
+ },
+ 'location_map': {
+ 'order_id': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__delete_order
+ )
+
+ def __get_inventory(self, **kwargs): # noqa: E501
+ """Returns pet inventories by status # noqa: E501
+
+ Returns a map of status codes to quantities # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.get_inventory(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: {str: (int,)}
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ return self.call_with_http_info(**kwargs)
+
+ self.get_inventory = Endpoint(
+ settings={
+ 'response_type': ({str: (int,)},),
+ 'auth': [
+ 'api_key'
+ ],
+ 'endpoint_path': '/store/inventory',
+ 'operation_id': 'get_inventory',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ ],
+ 'required': [],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__get_inventory
+ )
+
+ def __get_order_by_id(self, order_id, **kwargs): # noqa: E501
+ """Find purchase order by ID # noqa: E501
+
+ For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.get_order_by_id(order_id, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param int order_id: ID of pet that needs to be fetched (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: order.Order
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['order_id'] = \
+ order_id
+ return self.call_with_http_info(**kwargs)
+
+ self.get_order_by_id = Endpoint(
+ settings={
+ 'response_type': (order.Order,),
+ 'auth': [],
+ 'endpoint_path': '/store/order/{order_id}',
+ 'operation_id': 'get_order_by_id',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'order_id',
+ ],
+ 'required': [
+ 'order_id',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ 'order_id',
+ ]
+ },
+ root_map={
+ 'validations': {
+ ('order_id',): {
+
+ 'inclusive_maximum': 5,
+ 'inclusive_minimum': 1,
+ },
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'order_id':
+ (int,),
+ },
+ 'attribute_map': {
+ 'order_id': 'order_id',
+ },
+ 'location_map': {
+ 'order_id': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/xml',
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__get_order_by_id
+ )
+
+ def __place_order(self, order_order, **kwargs): # noqa: E501
+ """Place an order for a pet # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.place_order(order_order, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param order.Order order_order: order placed for purchasing the pet (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: order.Order
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['order_order'] = \
+ order_order
+ return self.call_with_http_info(**kwargs)
+
+ self.place_order = Endpoint(
+ settings={
+ 'response_type': (order.Order,),
+ 'auth': [],
+ 'endpoint_path': '/store/order',
+ 'operation_id': 'place_order',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'order_order',
+ ],
+ 'required': [
+ 'order_order',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'order_order':
+ (order.Order,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'order_order': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/xml',
+ 'application/json'
+ ],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__place_order
+ )
+
+
+class Endpoint(object):
+ def __init__(self, settings=None, params_map=None, root_map=None,
+ headers_map=None, api_client=None, callable=None):
+ """Creates an endpoint
+
+ Args:
+ settings (dict): see below key value pairs
+ 'response_type' (tuple/None): response type
+ 'auth' (list): a list of auth type keys
+ 'endpoint_path' (str): the endpoint path
+ 'operation_id' (str): endpoint string identifier
+ 'http_method' (str): POST/PUT/PATCH/GET etc
+ 'servers' (list): list of str servers that this endpoint is at
+ params_map (dict): see below key value pairs
+ 'all' (list): list of str endpoint parameter names
+ 'required' (list): list of required parameter names
+ 'nullable' (list): list of nullable parameter names
+ 'enum' (list): list of parameters with enum values
+ 'validation' (list): list of parameters with validations
+ root_map
+ 'validations' (dict): the dict mapping endpoint parameter tuple
+ paths to their validation dictionaries
+ 'allowed_values' (dict): the dict mapping endpoint parameter
+ tuple paths to their allowed_values (enum) dictionaries
+ 'openapi_types' (dict): param_name to openapi type
+ 'attribute_map' (dict): param_name to camelCase name
+ 'location_map' (dict): param_name to 'body', 'file', 'form',
+ 'header', 'path', 'query'
+ collection_format_map (dict): param_name to `csv` etc.
+ headers_map (dict): see below key value pairs
+ 'accept' (list): list of Accept header strings
+ 'content_type' (list): list of Content-Type header strings
+ api_client (ApiClient) api client instance
+ callable (function): the function which is invoked when the
+ Endpoint is called
+ """
+ self.settings = settings
+ self.params_map = params_map
+ self.params_map['all'].extend([
+ 'async_req',
+ '_host_index',
+ '_preload_content',
+ '_request_timeout',
+ '_return_http_data_only',
+ '_check_input_type',
+ '_check_return_type'
+ ])
+ self.params_map['nullable'].extend(['_request_timeout'])
+ self.validations = root_map['validations']
+ self.allowed_values = root_map['allowed_values']
+ self.openapi_types = root_map['openapi_types']
+ extra_types = {
+ 'async_req': (bool,),
+ '_host_index': (int,),
+ '_preload_content': (bool,),
+ '_request_timeout': (none_type, int, (int,), [int]),
+ '_return_http_data_only': (bool,),
+ '_check_input_type': (bool,),
+ '_check_return_type': (bool,)
+ }
+ self.openapi_types.update(extra_types)
+ self.attribute_map = root_map['attribute_map']
+ self.location_map = root_map['location_map']
+ self.collection_format_map = root_map['collection_format_map']
+ self.headers_map = headers_map
+ self.api_client = api_client
+ self.callable = callable
+
+ def __validate_inputs(self, kwargs):
+ for param in self.params_map['enum']:
+ if param in kwargs:
+ check_allowed_values(
+ self.allowed_values,
+ (param,),
+ kwargs[param]
+ )
+
+ for param in self.params_map['validation']:
+ if param in kwargs:
+ check_validations(
+ self.validations,
+ (param,),
+ kwargs[param]
+ )
+
+ if kwargs['_check_input_type'] is False:
+ return
+
+ for key, value in six.iteritems(kwargs):
+ fixed_val = validate_and_convert_types(
+ value,
+ self.openapi_types[key],
+ [key],
+ False,
+ kwargs['_check_input_type'],
+ configuration=self.api_client.configuration
+ )
+ kwargs[key] = fixed_val
+
+ def __gather_params(self, kwargs):
+ params = {
+ 'body': None,
+ 'collection_format': {},
+ 'file': {},
+ 'form': [],
+ 'header': {},
+ 'path': {},
+ 'query': []
+ }
+
+ for param_name, param_value in six.iteritems(kwargs):
+ param_location = self.location_map.get(param_name)
+ if param_location is None:
+ continue
+ if param_location:
+ if param_location == 'body':
+ params['body'] = param_value
+ continue
+ base_name = self.attribute_map[param_name]
+ if (param_location == 'form' and
+ self.openapi_types[param_name] == (file_type,)):
+ params['file'][param_name] = [param_value]
+ elif (param_location == 'form' and
+ self.openapi_types[param_name] == ([file_type],)):
+ # param_value is already a list
+ params['file'][param_name] = param_value
+ elif param_location in {'form', 'query'}:
+ param_value_full = (base_name, param_value)
+ params[param_location].append(param_value_full)
+ if param_location not in {'form', 'query'}:
+ params[param_location][base_name] = param_value
+ collection_format = self.collection_format_map.get(param_name)
+ if collection_format:
+ params['collection_format'][base_name] = collection_format
+
+ return params
+
+ def __call__(self, *args, **kwargs):
+ """ This method is invoked when endpoints are called
+ Example:
+ pet_api = PetApi()
+ pet_api.add_pet # this is an instance of the class Endpoint
+ pet_api.add_pet() # this invokes pet_api.add_pet.__call__()
+ which then invokes the callable functions stored in that endpoint at
+ pet_api.add_pet.callable or self.callable in this class
+ """
+ return self.callable(self, *args, **kwargs)
+
+ def call_with_http_info(self, **kwargs):
+
+ try:
+ _host = self.settings['servers'][kwargs['_host_index']]
+ except IndexError:
+ if self.settings['servers']:
+ raise ApiValueError(
+ "Invalid host index. Must be 0 <= index < %s" %
+ len(self.settings['servers'])
+ )
+ _host = None
+
+ for key, value in six.iteritems(kwargs):
+ if key not in self.params_map['all']:
+ raise ApiTypeError(
+ "Got an unexpected parameter '%s'"
+ " to method `%s`" %
+ (key, self.settings['operation_id'])
+ )
+ # only throw this nullable ApiValueError if _check_input_type
+ # is False, if _check_input_type==True we catch this case
+ # in self.__validate_inputs
+ if (key not in self.params_map['nullable'] and value is None
+ and kwargs['_check_input_type'] is False):
+ raise ApiValueError(
+ "Value may not be None for non-nullable parameter `%s`"
+ " when calling `%s`" %
+ (key, self.settings['operation_id'])
+ )
+
+ for key in self.params_map['required']:
+ if key not in kwargs.keys():
+ raise ApiValueError(
+ "Missing the required parameter `%s` when calling "
+ "`%s`" % (key, self.settings['operation_id'])
+ )
+
+ self.__validate_inputs(kwargs)
+
+ params = self.__gather_params(kwargs)
+
+ accept_headers_list = self.headers_map['accept']
+ if accept_headers_list:
+ params['header']['Accept'] = self.api_client.select_header_accept(
+ accept_headers_list)
+
+ content_type_headers_list = self.headers_map['content_type']
+ if content_type_headers_list:
+ header_list = self.api_client.select_header_content_type(
+ content_type_headers_list)
+ params['header']['Content-Type'] = header_list
+
+ return self.api_client.call_api(
+ self.settings['endpoint_path'], self.settings['http_method'],
+ params['path'],
+ params['query'],
+ params['header'],
+ body=params['body'],
+ post_params=params['form'],
+ files=params['file'],
+ response_type=self.settings['response_type'],
+ auth_settings=self.settings['auth'],
+ async_req=kwargs['async_req'],
+ _check_type=kwargs['_check_return_type'],
+ _return_http_data_only=kwargs['_return_http_data_only'],
+ _preload_content=kwargs['_preload_content'],
+ _request_timeout=kwargs['_request_timeout'],
+ _host=_host,
+ collection_formats=params['collection_format'])
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/api/user_api.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/user_api.py
new file mode 100644
index 00000000000..141520baa7e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/api/user_api.py
@@ -0,0 +1,1130 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import re # noqa: F401
+import sys # noqa: F401
+
+# python 2 and python 3 compatibility library
+import six
+
+from petstore_api.api_client import ApiClient
+from petstore_api.exceptions import (
+ ApiTypeError,
+ ApiValueError
+)
+from petstore_api.model_utils import ( # noqa: F401
+ check_allowed_values,
+ check_validations,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_and_convert_types
+)
+from petstore_api.models import user
+
+
+class UserApi(object):
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient()
+ self.api_client = api_client
+
+ def __create_user(self, user_user, **kwargs): # noqa: E501
+ """Create user # noqa: E501
+
+ This can only be done by the logged in user. # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.create_user(user_user, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param user.User user_user: Created user object (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['user_user'] = \
+ user_user
+ return self.call_with_http_info(**kwargs)
+
+ self.create_user = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/user',
+ 'operation_id': 'create_user',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'user_user',
+ ],
+ 'required': [
+ 'user_user',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'user_user':
+ (user.User,),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'user_user': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__create_user
+ )
+
+ def __create_users_with_array_input(self, user_user, **kwargs): # noqa: E501
+ """Creates list of users with given input array # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.create_users_with_array_input(user_user, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param [user.User] user_user: List of user object (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['user_user'] = \
+ user_user
+ return self.call_with_http_info(**kwargs)
+
+ self.create_users_with_array_input = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/user/createWithArray',
+ 'operation_id': 'create_users_with_array_input',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'user_user',
+ ],
+ 'required': [
+ 'user_user',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'user_user':
+ ([user.User],),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'user_user': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__create_users_with_array_input
+ )
+
+ def __create_users_with_list_input(self, user_user, **kwargs): # noqa: E501
+ """Creates list of users with given input array # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.create_users_with_list_input(user_user, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param [user.User] user_user: List of user object (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['user_user'] = \
+ user_user
+ return self.call_with_http_info(**kwargs)
+
+ self.create_users_with_list_input = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/user/createWithList',
+ 'operation_id': 'create_users_with_list_input',
+ 'http_method': 'POST',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'user_user',
+ ],
+ 'required': [
+ 'user_user',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'user_user':
+ ([user.User],),
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ 'user_user': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__create_users_with_list_input
+ )
+
+ def __delete_user(self, username, **kwargs): # noqa: E501
+ """Delete user # noqa: E501
+
+ This can only be done by the logged in user. # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.delete_user(username, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param str username: The name that needs to be deleted (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['username'] = \
+ username
+ return self.call_with_http_info(**kwargs)
+
+ self.delete_user = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/user/{username}',
+ 'operation_id': 'delete_user',
+ 'http_method': 'DELETE',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'username',
+ ],
+ 'required': [
+ 'username',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'username':
+ (str,),
+ },
+ 'attribute_map': {
+ 'username': 'username',
+ },
+ 'location_map': {
+ 'username': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__delete_user
+ )
+
+ def __get_user_by_name(self, username, **kwargs): # noqa: E501
+ """Get user by user name # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.get_user_by_name(username, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param str username: The name that needs to be fetched. Use user1 for testing. (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: user.User
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['username'] = \
+ username
+ return self.call_with_http_info(**kwargs)
+
+ self.get_user_by_name = Endpoint(
+ settings={
+ 'response_type': (user.User,),
+ 'auth': [],
+ 'endpoint_path': '/user/{username}',
+ 'operation_id': 'get_user_by_name',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'username',
+ ],
+ 'required': [
+ 'username',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'username':
+ (str,),
+ },
+ 'attribute_map': {
+ 'username': 'username',
+ },
+ 'location_map': {
+ 'username': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/xml',
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__get_user_by_name
+ )
+
+ def __login_user(self, username, password, **kwargs): # noqa: E501
+ """Logs user into the system # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.login_user(username, password, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param str username: The user name for login (required)
+ :param str password: The password for login in clear text (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: str
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['username'] = \
+ username
+ kwargs['password'] = \
+ password
+ return self.call_with_http_info(**kwargs)
+
+ self.login_user = Endpoint(
+ settings={
+ 'response_type': (str,),
+ 'auth': [],
+ 'endpoint_path': '/user/login',
+ 'operation_id': 'login_user',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'username',
+ 'password',
+ ],
+ 'required': [
+ 'username',
+ 'password',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'username':
+ (str,),
+ 'password':
+ (str,),
+ },
+ 'attribute_map': {
+ 'username': 'username',
+ 'password': 'password',
+ },
+ 'location_map': {
+ 'username': 'query',
+ 'password': 'query',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/xml',
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__login_user
+ )
+
+ def __logout_user(self, **kwargs): # noqa: E501
+ """Logs out current logged in user session # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.logout_user(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ return self.call_with_http_info(**kwargs)
+
+ self.logout_user = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/user/logout',
+ 'operation_id': 'logout_user',
+ 'http_method': 'GET',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ ],
+ 'required': [],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ },
+ 'attribute_map': {
+ },
+ 'location_map': {
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [],
+ },
+ api_client=api_client,
+ callable=__logout_user
+ )
+
+ def __update_user(self, username, user_user, **kwargs): # noqa: E501
+ """Updated user # noqa: E501
+
+ This can only be done by the logged in user. # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.update_user(username, user_user, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool: execute request asynchronously
+ Default is False.
+ :param str username: name that need to be deleted (required)
+ :param user.User user_user: Updated user object (required)
+ :param _return_http_data_only: response data without head status
+ code and headers. Default is True.
+ :param _preload_content: if False, the urllib3.HTTPResponse object
+ will be returned without reading/decoding response data.
+ Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request timeout. It can also
+ be a pair (tuple) of (connection, read) timeouts.
+ Default is None.
+ :param _check_input_type: boolean specifying if type checking
+ should be done one the data sent to the server.
+ Default is True.
+ :param _check_return_type: boolean specifying if type checking
+ should be done one the data received from the server.
+ Default is True.
+ :param _host_index: integer specifying the index of the server
+ that we want to use.
+ Default is 0.
+ :return: None
+ If the method is called asynchronously, returns the request
+ thread.
+ """
+ kwargs['async_req'] = kwargs.get(
+ 'async_req', False
+ )
+ kwargs['_return_http_data_only'] = kwargs.get(
+ '_return_http_data_only', True
+ )
+ kwargs['_preload_content'] = kwargs.get(
+ '_preload_content', True
+ )
+ kwargs['_request_timeout'] = kwargs.get(
+ '_request_timeout', None
+ )
+ kwargs['_check_input_type'] = kwargs.get(
+ '_check_input_type', True
+ )
+ kwargs['_check_return_type'] = kwargs.get(
+ '_check_return_type', True
+ )
+ kwargs['_host_index'] = kwargs.get('_host_index', 0)
+ kwargs['username'] = \
+ username
+ kwargs['user_user'] = \
+ user_user
+ return self.call_with_http_info(**kwargs)
+
+ self.update_user = Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/user/{username}',
+ 'operation_id': 'update_user',
+ 'http_method': 'PUT',
+ 'servers': [],
+ },
+ params_map={
+ 'all': [
+ 'username',
+ 'user_user',
+ ],
+ 'required': [
+ 'username',
+ 'user_user',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'username':
+ (str,),
+ 'user_user':
+ (user.User,),
+ },
+ 'attribute_map': {
+ 'username': 'username',
+ },
+ 'location_map': {
+ 'username': 'path',
+ 'user_user': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client,
+ callable=__update_user
+ )
+
+
+class Endpoint(object):
+ def __init__(self, settings=None, params_map=None, root_map=None,
+ headers_map=None, api_client=None, callable=None):
+ """Creates an endpoint
+
+ Args:
+ settings (dict): see below key value pairs
+ 'response_type' (tuple/None): response type
+ 'auth' (list): a list of auth type keys
+ 'endpoint_path' (str): the endpoint path
+ 'operation_id' (str): endpoint string identifier
+ 'http_method' (str): POST/PUT/PATCH/GET etc
+ 'servers' (list): list of str servers that this endpoint is at
+ params_map (dict): see below key value pairs
+ 'all' (list): list of str endpoint parameter names
+ 'required' (list): list of required parameter names
+ 'nullable' (list): list of nullable parameter names
+ 'enum' (list): list of parameters with enum values
+ 'validation' (list): list of parameters with validations
+ root_map
+ 'validations' (dict): the dict mapping endpoint parameter tuple
+ paths to their validation dictionaries
+ 'allowed_values' (dict): the dict mapping endpoint parameter
+ tuple paths to their allowed_values (enum) dictionaries
+ 'openapi_types' (dict): param_name to openapi type
+ 'attribute_map' (dict): param_name to camelCase name
+ 'location_map' (dict): param_name to 'body', 'file', 'form',
+ 'header', 'path', 'query'
+ collection_format_map (dict): param_name to `csv` etc.
+ headers_map (dict): see below key value pairs
+ 'accept' (list): list of Accept header strings
+ 'content_type' (list): list of Content-Type header strings
+ api_client (ApiClient) api client instance
+ callable (function): the function which is invoked when the
+ Endpoint is called
+ """
+ self.settings = settings
+ self.params_map = params_map
+ self.params_map['all'].extend([
+ 'async_req',
+ '_host_index',
+ '_preload_content',
+ '_request_timeout',
+ '_return_http_data_only',
+ '_check_input_type',
+ '_check_return_type'
+ ])
+ self.params_map['nullable'].extend(['_request_timeout'])
+ self.validations = root_map['validations']
+ self.allowed_values = root_map['allowed_values']
+ self.openapi_types = root_map['openapi_types']
+ extra_types = {
+ 'async_req': (bool,),
+ '_host_index': (int,),
+ '_preload_content': (bool,),
+ '_request_timeout': (none_type, int, (int,), [int]),
+ '_return_http_data_only': (bool,),
+ '_check_input_type': (bool,),
+ '_check_return_type': (bool,)
+ }
+ self.openapi_types.update(extra_types)
+ self.attribute_map = root_map['attribute_map']
+ self.location_map = root_map['location_map']
+ self.collection_format_map = root_map['collection_format_map']
+ self.headers_map = headers_map
+ self.api_client = api_client
+ self.callable = callable
+
+ def __validate_inputs(self, kwargs):
+ for param in self.params_map['enum']:
+ if param in kwargs:
+ check_allowed_values(
+ self.allowed_values,
+ (param,),
+ kwargs[param]
+ )
+
+ for param in self.params_map['validation']:
+ if param in kwargs:
+ check_validations(
+ self.validations,
+ (param,),
+ kwargs[param]
+ )
+
+ if kwargs['_check_input_type'] is False:
+ return
+
+ for key, value in six.iteritems(kwargs):
+ fixed_val = validate_and_convert_types(
+ value,
+ self.openapi_types[key],
+ [key],
+ False,
+ kwargs['_check_input_type'],
+ configuration=self.api_client.configuration
+ )
+ kwargs[key] = fixed_val
+
+ def __gather_params(self, kwargs):
+ params = {
+ 'body': None,
+ 'collection_format': {},
+ 'file': {},
+ 'form': [],
+ 'header': {},
+ 'path': {},
+ 'query': []
+ }
+
+ for param_name, param_value in six.iteritems(kwargs):
+ param_location = self.location_map.get(param_name)
+ if param_location is None:
+ continue
+ if param_location:
+ if param_location == 'body':
+ params['body'] = param_value
+ continue
+ base_name = self.attribute_map[param_name]
+ if (param_location == 'form' and
+ self.openapi_types[param_name] == (file_type,)):
+ params['file'][param_name] = [param_value]
+ elif (param_location == 'form' and
+ self.openapi_types[param_name] == ([file_type],)):
+ # param_value is already a list
+ params['file'][param_name] = param_value
+ elif param_location in {'form', 'query'}:
+ param_value_full = (base_name, param_value)
+ params[param_location].append(param_value_full)
+ if param_location not in {'form', 'query'}:
+ params[param_location][base_name] = param_value
+ collection_format = self.collection_format_map.get(param_name)
+ if collection_format:
+ params['collection_format'][base_name] = collection_format
+
+ return params
+
+ def __call__(self, *args, **kwargs):
+ """ This method is invoked when endpoints are called
+ Example:
+ pet_api = PetApi()
+ pet_api.add_pet # this is an instance of the class Endpoint
+ pet_api.add_pet() # this invokes pet_api.add_pet.__call__()
+ which then invokes the callable functions stored in that endpoint at
+ pet_api.add_pet.callable or self.callable in this class
+ """
+ return self.callable(self, *args, **kwargs)
+
+ def call_with_http_info(self, **kwargs):
+
+ try:
+ _host = self.settings['servers'][kwargs['_host_index']]
+ except IndexError:
+ if self.settings['servers']:
+ raise ApiValueError(
+ "Invalid host index. Must be 0 <= index < %s" %
+ len(self.settings['servers'])
+ )
+ _host = None
+
+ for key, value in six.iteritems(kwargs):
+ if key not in self.params_map['all']:
+ raise ApiTypeError(
+ "Got an unexpected parameter '%s'"
+ " to method `%s`" %
+ (key, self.settings['operation_id'])
+ )
+ # only throw this nullable ApiValueError if _check_input_type
+ # is False, if _check_input_type==True we catch this case
+ # in self.__validate_inputs
+ if (key not in self.params_map['nullable'] and value is None
+ and kwargs['_check_input_type'] is False):
+ raise ApiValueError(
+ "Value may not be None for non-nullable parameter `%s`"
+ " when calling `%s`" %
+ (key, self.settings['operation_id'])
+ )
+
+ for key in self.params_map['required']:
+ if key not in kwargs.keys():
+ raise ApiValueError(
+ "Missing the required parameter `%s` when calling "
+ "`%s`" % (key, self.settings['operation_id'])
+ )
+
+ self.__validate_inputs(kwargs)
+
+ params = self.__gather_params(kwargs)
+
+ accept_headers_list = self.headers_map['accept']
+ if accept_headers_list:
+ params['header']['Accept'] = self.api_client.select_header_accept(
+ accept_headers_list)
+
+ content_type_headers_list = self.headers_map['content_type']
+ if content_type_headers_list:
+ header_list = self.api_client.select_header_content_type(
+ content_type_headers_list)
+ params['header']['Content-Type'] = header_list
+
+ return self.api_client.call_api(
+ self.settings['endpoint_path'], self.settings['http_method'],
+ params['path'],
+ params['query'],
+ params['header'],
+ body=params['body'],
+ post_params=params['form'],
+ files=params['file'],
+ response_type=self.settings['response_type'],
+ auth_settings=self.settings['auth'],
+ async_req=kwargs['async_req'],
+ _check_type=kwargs['_check_return_type'],
+ _return_http_data_only=kwargs['_return_http_data_only'],
+ _preload_content=kwargs['_preload_content'],
+ _request_timeout=kwargs['_request_timeout'],
+ _host=_host,
+ collection_formats=params['collection_format'])
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/api_client.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/api_client.py
new file mode 100644
index 00000000000..d3e808ddf40
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/api_client.py
@@ -0,0 +1,535 @@
+# coding: utf-8
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+from __future__ import absolute_import
+
+import json
+import mimetypes
+from multiprocessing.pool import ThreadPool
+import os
+
+# python 2 and python 3 compatibility library
+import six
+from six.moves.urllib.parse import quote
+
+from petstore_api import rest
+from petstore_api.configuration import Configuration
+from petstore_api.exceptions import ApiValueError
+from petstore_api.model_utils import (
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ deserialize_file,
+ file_type,
+ model_to_dict,
+ str,
+ validate_and_convert_types
+)
+
+
+class ApiClient(object):
+ """Generic API client for OpenAPI client library builds.
+
+ OpenAPI generic API client. This client handles the client-
+ server communication, and is invariant across implementations. Specifics of
+ the methods and models for each application are generated from the OpenAPI
+ templates.
+
+ NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+ Do not edit the class manually.
+
+ :param configuration: .Configuration object for this client
+ :param header_name: a header to pass when making calls to the API.
+ :param header_value: a header value to pass when making calls to
+ the API.
+ :param cookie: a cookie to include in the header when making calls
+ to the API
+ :param pool_threads: The number of threads to use for async requests
+ to the API. More threads means more concurrent API requests.
+ """
+
+ # six.binary_type python2=str, python3=bytes
+ # six.text_type python2=unicode, python3=str
+ PRIMITIVE_TYPES = (
+ (float, bool, six.binary_type, six.text_type) + six.integer_types
+ )
+ _pool = None
+
+ def __init__(self, configuration=None, header_name=None, header_value=None,
+ cookie=None, pool_threads=1):
+ if configuration is None:
+ configuration = Configuration()
+ self.configuration = configuration
+ self.pool_threads = pool_threads
+
+ self.rest_client = rest.RESTClientObject(configuration)
+ self.default_headers = {}
+ if header_name is not None:
+ self.default_headers[header_name] = header_value
+ self.cookie = cookie
+ # Set default User-Agent.
+ self.user_agent = 'OpenAPI-Generator/1.0.0/python'
+
+ def __del__(self):
+ if self._pool:
+ self._pool.close()
+ self._pool.join()
+ self._pool = None
+
+ @property
+ def pool(self):
+ """Create thread pool on first request
+ avoids instantiating unused threadpool for blocking clients.
+ """
+ if self._pool is None:
+ self._pool = ThreadPool(self.pool_threads)
+ return self._pool
+
+ @property
+ def user_agent(self):
+ """User agent for this API client"""
+ return self.default_headers['User-Agent']
+
+ @user_agent.setter
+ def user_agent(self, value):
+ self.default_headers['User-Agent'] = value
+
+ def set_default_header(self, header_name, header_value):
+ self.default_headers[header_name] = header_value
+
+ def __call_api(
+ self, resource_path, method, path_params=None,
+ query_params=None, header_params=None, body=None, post_params=None,
+ files=None, response_type=None, auth_settings=None,
+ _return_http_data_only=None, collection_formats=None,
+ _preload_content=True, _request_timeout=None, _host=None,
+ _check_type=None):
+
+ config = self.configuration
+
+ # header parameters
+ header_params = header_params or {}
+ header_params.update(self.default_headers)
+ if self.cookie:
+ header_params['Cookie'] = self.cookie
+ if header_params:
+ header_params = self.sanitize_for_serialization(header_params)
+ header_params = dict(self.parameters_to_tuples(header_params,
+ collection_formats))
+
+ # path parameters
+ if path_params:
+ path_params = self.sanitize_for_serialization(path_params)
+ path_params = self.parameters_to_tuples(path_params,
+ collection_formats)
+ for k, v in path_params:
+ # specified safe chars, encode everything
+ resource_path = resource_path.replace(
+ '{%s}' % k,
+ quote(str(v), safe=config.safe_chars_for_path_param)
+ )
+
+ # query parameters
+ if query_params:
+ query_params = self.sanitize_for_serialization(query_params)
+ query_params = self.parameters_to_tuples(query_params,
+ collection_formats)
+
+ # post parameters
+ if post_params or files:
+ post_params = post_params if post_params else []
+ post_params = self.sanitize_for_serialization(post_params)
+ post_params = self.parameters_to_tuples(post_params,
+ collection_formats)
+ post_params.extend(self.files_parameters(files))
+
+ # auth setting
+ self.update_params_for_auth(header_params, query_params, auth_settings)
+
+ # body
+ if body:
+ body = self.sanitize_for_serialization(body)
+
+ # request url
+ if _host is None:
+ url = self.configuration.host + resource_path
+ else:
+ # use server/host defined in path or operation instead
+ url = _host + resource_path
+
+ # perform request and return response
+ response_data = self.request(
+ method, url, query_params=query_params, headers=header_params,
+ post_params=post_params, body=body,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout)
+
+ self.last_response = response_data
+
+ return_data = response_data
+ if _preload_content:
+ # deserialize response data
+ if response_type:
+ return_data = self.deserialize(
+ response_data,
+ response_type,
+ _check_type
+ )
+ else:
+ return_data = None
+
+ if _return_http_data_only:
+ return (return_data)
+ else:
+ return (return_data, response_data.status,
+ response_data.getheaders())
+
+ def sanitize_for_serialization(self, obj):
+ """Builds a JSON POST object.
+
+ If obj is None, return None.
+ If obj is str, int, long, float, bool, return directly.
+ If obj is datetime.datetime, datetime.date
+ convert to string in iso8601 format.
+ If obj is list, sanitize each element in the list.
+ If obj is dict, return the dict.
+ If obj is OpenAPI model, return the properties dict.
+
+ :param obj: The data to serialize.
+ :return: The serialized form of data.
+ """
+ if obj is None:
+ return None
+ elif isinstance(obj, self.PRIMITIVE_TYPES):
+ return obj
+ elif isinstance(obj, list):
+ return [self.sanitize_for_serialization(sub_obj)
+ for sub_obj in obj]
+ elif isinstance(obj, tuple):
+ return tuple(self.sanitize_for_serialization(sub_obj)
+ for sub_obj in obj)
+ elif isinstance(obj, (datetime, date)):
+ return obj.isoformat()
+
+ if isinstance(obj, dict):
+ obj_dict = obj
+ elif isinstance(obj, ModelNormal):
+ # Convert model obj to dict
+ # Convert attribute name to json key in
+ # model definition for request
+ obj_dict = model_to_dict(obj, serialize=True)
+ elif isinstance(obj, ModelSimple):
+ return self.sanitize_for_serialization(obj.value)
+
+ return {key: self.sanitize_for_serialization(val)
+ for key, val in six.iteritems(obj_dict)}
+
+ def deserialize(self, response, response_type, _check_type):
+ """Deserializes response into an object.
+
+ :param response: RESTResponse object to be deserialized.
+ :param response_type: For the response, a tuple containing:
+ valid classes
+ a list containing valid classes (for list schemas)
+ a dict containing a tuple of valid classes as the value
+ Example values:
+ (str,)
+ (Pet,)
+ (float, none_type)
+ ([int, none_type],)
+ ({str: (bool, str, int, float, date, datetime, str, none_type)},)
+ :param _check_type: boolean, whether to check the types of the data
+ received from the server
+
+ :return: deserialized object.
+ """
+ # handle file downloading
+ # save response body into a tmp file and return the instance
+ if response_type == (file_type,):
+ content_disposition = response.getheader("Content-Disposition")
+ return deserialize_file(response.data, self.configuration,
+ content_disposition=content_disposition)
+
+ # fetch data from response object
+ try:
+ received_data = json.loads(response.data)
+ except ValueError:
+ received_data = response.data
+
+ # store our data under the key of 'received_data' so users have some
+ # context if they are deserializing a string and the data type is wrong
+ deserialized_data = validate_and_convert_types(
+ received_data,
+ response_type,
+ ['received_data'],
+ True,
+ _check_type,
+ configuration=self.configuration
+ )
+ return deserialized_data
+
+ def call_api(self, resource_path, method,
+ path_params=None, query_params=None, header_params=None,
+ body=None, post_params=None, files=None,
+ response_type=None, auth_settings=None, async_req=None,
+ _return_http_data_only=None, collection_formats=None,
+ _preload_content=True, _request_timeout=None, _host=None,
+ _check_type=None):
+ """Makes the HTTP request (synchronous) and returns deserialized data.
+
+ To make an async_req request, set the async_req parameter.
+
+ :param resource_path: Path to method endpoint.
+ :param method: Method to call.
+ :param path_params: Path parameters in the url.
+ :param query_params: Query parameters in the url.
+ :param header_params: Header parameters to be
+ placed in the request header.
+ :param body: Request body.
+ :param post_params dict: Request post form parameters,
+ for `application/x-www-form-urlencoded`, `multipart/form-data`.
+ :param auth_settings list: Auth Settings names for the request.
+ :param response_type: For the response, a tuple containing:
+ valid classes
+ a list containing valid classes (for list schemas)
+ a dict containing a tuple of valid classes as the value
+ Example values:
+ (str,)
+ (Pet,)
+ (float, none_type)
+ ([int, none_type],)
+ ({str: (bool, str, int, float, date, datetime, str, none_type)},)
+ :param files dict: key -> field name, value -> a list of open file
+ objects for `multipart/form-data`.
+ :param async_req bool: execute request asynchronously
+ :param _return_http_data_only: response data without head status code
+ and headers
+ :param collection_formats: dict of collection formats for path, query,
+ header, and post parameters.
+ :param _preload_content: if False, the urllib3.HTTPResponse object will
+ be returned without reading/decoding response
+ data. Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :param _check_type: boolean describing if the data back from the server
+ should have its type checked.
+ :return:
+ If async_req parameter is True,
+ the request will be called asynchronously.
+ The method will return the request thread.
+ If parameter async_req is False or missing,
+ then the method will return the response directly.
+ """
+ if not async_req:
+ return self.__call_api(resource_path, method,
+ path_params, query_params, header_params,
+ body, post_params, files,
+ response_type, auth_settings,
+ _return_http_data_only, collection_formats,
+ _preload_content, _request_timeout, _host,
+ _check_type)
+
+ return self.pool.apply_async(self.__call_api, (resource_path,
+ method, path_params,
+ query_params,
+ header_params, body,
+ post_params, files,
+ response_type,
+ auth_settings,
+ _return_http_data_only,
+ collection_formats,
+ _preload_content,
+ _request_timeout,
+ _host, _check_type))
+
+ def request(self, method, url, query_params=None, headers=None,
+ post_params=None, body=None, _preload_content=True,
+ _request_timeout=None):
+ """Makes the HTTP request using RESTClient."""
+ if method == "GET":
+ return self.rest_client.GET(url,
+ query_params=query_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ headers=headers)
+ elif method == "HEAD":
+ return self.rest_client.HEAD(url,
+ query_params=query_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ headers=headers)
+ elif method == "OPTIONS":
+ return self.rest_client.OPTIONS(url,
+ query_params=query_params,
+ headers=headers,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+ elif method == "POST":
+ return self.rest_client.POST(url,
+ query_params=query_params,
+ headers=headers,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+ elif method == "PUT":
+ return self.rest_client.PUT(url,
+ query_params=query_params,
+ headers=headers,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+ elif method == "PATCH":
+ return self.rest_client.PATCH(url,
+ query_params=query_params,
+ headers=headers,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+ elif method == "DELETE":
+ return self.rest_client.DELETE(url,
+ query_params=query_params,
+ headers=headers,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+ else:
+ raise ApiValueError(
+ "http method must be `GET`, `HEAD`, `OPTIONS`,"
+ " `POST`, `PATCH`, `PUT` or `DELETE`."
+ )
+
+ def parameters_to_tuples(self, params, collection_formats):
+ """Get parameters as list of tuples, formatting collections.
+
+ :param params: Parameters as dict or list of two-tuples
+ :param dict collection_formats: Parameter collection formats
+ :return: Parameters as list of tuples, collections formatted
+ """
+ new_params = []
+ if collection_formats is None:
+ collection_formats = {}
+ for k, v in six.iteritems(params) if isinstance(params, dict) else params: # noqa: E501
+ if k in collection_formats:
+ collection_format = collection_formats[k]
+ if collection_format == 'multi':
+ new_params.extend((k, value) for value in v)
+ else:
+ if collection_format == 'ssv':
+ delimiter = ' '
+ elif collection_format == 'tsv':
+ delimiter = '\t'
+ elif collection_format == 'pipes':
+ delimiter = '|'
+ else: # csv is the default
+ delimiter = ','
+ new_params.append(
+ (k, delimiter.join(str(value) for value in v)))
+ else:
+ new_params.append((k, v))
+ return new_params
+
+ def files_parameters(self, files=None):
+ """Builds form parameters.
+
+ :param files: None or a dict with key=param_name and
+ value is a list of open file objects
+ :return: List of tuples of form parameters with file data
+ """
+ if files is None:
+ return []
+
+ params = []
+ for param_name, file_instances in six.iteritems(files):
+ if file_instances is None:
+ # if the file field is nullable, skip None values
+ continue
+ for file_instance in file_instances:
+ if file_instance is None:
+ # if the file field is nullable, skip None values
+ continue
+ if file_instance.closed is True:
+ raise ApiValueError(
+ "Cannot read a closed file. The passed in file_type "
+ "for %s must be open." % param_name
+ )
+ filename = os.path.basename(file_instance.name)
+ filedata = file_instance.read()
+ mimetype = (mimetypes.guess_type(filename)[0] or
+ 'application/octet-stream')
+ params.append(
+ tuple([param_name, tuple([filename, filedata, mimetype])]))
+ file_instance.close()
+
+ return params
+
+ def select_header_accept(self, accepts):
+ """Returns `Accept` based on an array of accepts provided.
+
+ :param accepts: List of headers.
+ :return: Accept (e.g. application/json).
+ """
+ if not accepts:
+ return
+
+ accepts = [x.lower() for x in accepts]
+
+ if 'application/json' in accepts:
+ return 'application/json'
+ else:
+ return ', '.join(accepts)
+
+ def select_header_content_type(self, content_types):
+ """Returns `Content-Type` based on an array of content_types provided.
+
+ :param content_types: List of content-types.
+ :return: Content-Type (e.g. application/json).
+ """
+ if not content_types:
+ return 'application/json'
+
+ content_types = [x.lower() for x in content_types]
+
+ if 'application/json' in content_types or '*/*' in content_types:
+ return 'application/json'
+ else:
+ return content_types[0]
+
+ def update_params_for_auth(self, headers, querys, auth_settings):
+ """Updates header and query params based on authentication setting.
+
+ :param headers: Header parameters dict to be updated.
+ :param querys: Query parameters tuple list to be updated.
+ :param auth_settings: Authentication setting identifiers list.
+ """
+ if not auth_settings:
+ return
+
+ for auth in auth_settings:
+ auth_setting = self.configuration.auth_settings().get(auth)
+ if auth_setting:
+ if auth_setting['in'] == 'cookie':
+ headers['Cookie'] = auth_setting['value']
+ elif auth_setting['in'] == 'header':
+ headers[auth_setting['key']] = auth_setting['value']
+ elif auth_setting['in'] == 'query':
+ querys.append((auth_setting['key'], auth_setting['value']))
+ else:
+ raise ApiValueError(
+ 'Authentication token must be in `query` or `header`'
+ )
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/configuration.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/configuration.py
new file mode 100644
index 00000000000..60cb525776a
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/configuration.py
@@ -0,0 +1,406 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import logging
+import multiprocessing
+import sys
+import urllib3
+
+import six
+from six.moves import http_client as httplib
+
+
+class Configuration(object):
+ """NOTE: This class is auto generated by OpenAPI Generator
+
+ Ref: https://openapi-generator.tech
+ Do not edit the class manually.
+
+ :param host: Base url
+ :param api_key: Dict to store API key(s).
+ Each entry in the dict specifies an API key.
+ The dict key is the name of the security scheme in the OAS specification.
+ The dict value is the API key secret.
+ :param api_key_prefix: Dict to store API prefix (e.g. Bearer)
+ The dict key is the name of the security scheme in the OAS specification.
+ The dict value is an API key prefix when generating the auth data.
+ :param username: Username for HTTP basic authentication
+ :param password: Password for HTTP basic authentication
+
+ :Example:
+
+ Given the following security scheme in the OpenAPI specification:
+ components:
+ securitySchemes:
+ cookieAuth: # name for the security scheme
+ type: apiKey
+ in: cookie
+ name: JSESSIONID # cookie name
+
+ You can programmatically set the cookie:
+ conf = petstore_api.Configuration(
+ api_key={'cookieAuth': 'abc123'}
+ api_key_prefix={'cookieAuth': 'JSESSIONID'}
+ )
+ The following cookie will be added to the HTTP request:
+ Cookie: JSESSIONID abc123
+ """
+
+ def __init__(self, host="http://petstore.swagger.io:80/v2",
+ api_key=None, api_key_prefix=None,
+ username=None, password=None):
+ """Constructor
+ """
+ self.host = host
+ """Default Base url
+ """
+ self.temp_folder_path = None
+ """Temp file folder for downloading files
+ """
+ # Authentication Settings
+ self.api_key = {}
+ if api_key:
+ self.api_key = api_key
+ """dict to store API key(s)
+ """
+ self.api_key_prefix = {}
+ if api_key_prefix:
+ self.api_key_prefix = api_key_prefix
+ """dict to store API prefix (e.g. Bearer)
+ """
+ self.refresh_api_key_hook = None
+ """function hook to refresh API key if expired
+ """
+ self.username = username
+ """Username for HTTP basic authentication
+ """
+ self.password = password
+ """Password for HTTP basic authentication
+ """
+ self.access_token = ""
+ """access token for OAuth/Bearer
+ """
+ self.logger = {}
+ """Logging Settings
+ """
+ self.logger["package_logger"] = logging.getLogger("petstore_api")
+ self.logger["urllib3_logger"] = logging.getLogger("urllib3")
+ self.logger_format = '%(asctime)s %(levelname)s %(message)s'
+ """Log format
+ """
+ self.logger_stream_handler = None
+ """Log stream handler
+ """
+ self.logger_file_handler = None
+ """Log file handler
+ """
+ self.logger_file = None
+ """Debug file location
+ """
+ self.debug = False
+ """Debug switch
+ """
+
+ self.verify_ssl = True
+ """SSL/TLS verification
+ Set this to false to skip verifying SSL certificate when calling API
+ from https server.
+ """
+ self.ssl_ca_cert = None
+ """Set this to customize the certificate file to verify the peer.
+ """
+ self.cert_file = None
+ """client certificate file
+ """
+ self.key_file = None
+ """client key file
+ """
+ self.assert_hostname = None
+ """Set this to True/False to enable/disable SSL hostname verification.
+ """
+
+ self.connection_pool_maxsize = multiprocessing.cpu_count() * 5
+ """urllib3 connection pool's maximum number of connections saved
+ per pool. urllib3 uses 1 connection as default value, but this is
+ not the best value when you are making a lot of possibly parallel
+ requests to the same host, which is often the case here.
+ cpu_count * 5 is used as default value to increase performance.
+ """
+
+ self.proxy = None
+ """Proxy URL
+ """
+ self.proxy_headers = None
+ """Proxy headers
+ """
+ self.safe_chars_for_path_param = ''
+ """Safe chars for path_param
+ """
+ self.retries = None
+ """Adding retries to override urllib3 default value 3
+ """
+ # Disable client side validation
+ self.client_side_validation = True
+
+ @property
+ def logger_file(self):
+ """The logger file.
+
+ If the logger_file is None, then add stream handler and remove file
+ handler. Otherwise, add file handler and remove stream handler.
+
+ :param value: The logger_file path.
+ :type: str
+ """
+ return self.__logger_file
+
+ @logger_file.setter
+ def logger_file(self, value):
+ """The logger file.
+
+ If the logger_file is None, then add stream handler and remove file
+ handler. Otherwise, add file handler and remove stream handler.
+
+ :param value: The logger_file path.
+ :type: str
+ """
+ self.__logger_file = value
+ if self.__logger_file:
+ # If set logging file,
+ # then add file handler and remove stream handler.
+ self.logger_file_handler = logging.FileHandler(self.__logger_file)
+ self.logger_file_handler.setFormatter(self.logger_formatter)
+ for _, logger in six.iteritems(self.logger):
+ logger.addHandler(self.logger_file_handler)
+
+ @property
+ def debug(self):
+ """Debug status
+
+ :param value: The debug status, True or False.
+ :type: bool
+ """
+ return self.__debug
+
+ @debug.setter
+ def debug(self, value):
+ """Debug status
+
+ :param value: The debug status, True or False.
+ :type: bool
+ """
+ self.__debug = value
+ if self.__debug:
+ # if debug status is True, turn on debug logging
+ for _, logger in six.iteritems(self.logger):
+ logger.setLevel(logging.DEBUG)
+ # turn on httplib debug
+ httplib.HTTPConnection.debuglevel = 1
+ else:
+ # if debug status is False, turn off debug logging,
+ # setting log level to default `logging.WARNING`
+ for _, logger in six.iteritems(self.logger):
+ logger.setLevel(logging.WARNING)
+ # turn off httplib debug
+ httplib.HTTPConnection.debuglevel = 0
+
+ @property
+ def logger_format(self):
+ """The logger format.
+
+ The logger_formatter will be updated when sets logger_format.
+
+ :param value: The format string.
+ :type: str
+ """
+ return self.__logger_format
+
+ @logger_format.setter
+ def logger_format(self, value):
+ """The logger format.
+
+ The logger_formatter will be updated when sets logger_format.
+
+ :param value: The format string.
+ :type: str
+ """
+ self.__logger_format = value
+ self.logger_formatter = logging.Formatter(self.__logger_format)
+
+ def get_api_key_with_prefix(self, identifier):
+ """Gets API key (with prefix if set).
+
+ :param identifier: The identifier of apiKey.
+ :return: The token for api key authentication.
+ """
+ if self.refresh_api_key_hook is not None:
+ self.refresh_api_key_hook(self)
+ key = self.api_key.get(identifier)
+ if key:
+ prefix = self.api_key_prefix.get(identifier)
+ if prefix:
+ return "%s %s" % (prefix, key)
+ else:
+ return key
+
+ def get_basic_auth_token(self):
+ """Gets HTTP basic authentication header (string).
+
+ :return: The token for basic HTTP authentication.
+ """
+ username = ""
+ if self.username is not None:
+ username = self.username
+ password = ""
+ if self.password is not None:
+ password = self.password
+ return urllib3.util.make_headers(
+ basic_auth=username + ':' + password
+ ).get('authorization')
+
+ def auth_settings(self):
+ """Gets Auth Settings dict for api client.
+
+ :return: The Auth Settings information dict.
+ """
+ auth = {}
+ if 'api_key' in self.api_key:
+ auth['api_key'] = {
+ 'type': 'api_key',
+ 'in': 'header',
+ 'key': 'api_key',
+ 'value': self.get_api_key_with_prefix('api_key')
+ }
+ if 'api_key_query' in self.api_key:
+ auth['api_key_query'] = {
+ 'type': 'api_key',
+ 'in': 'query',
+ 'key': 'api_key_query',
+ 'value': self.get_api_key_with_prefix('api_key_query')
+ }
+ if self.access_token is not None:
+ auth['bearer_test'] = {
+ 'type': 'bearer',
+ 'in': 'header',
+ 'format': 'JWT',
+ 'key': 'Authorization',
+ 'value': 'Bearer ' + self.access_token
+ }
+ if self.username is not None and self.password is not None:
+ auth['http_basic_test'] = {
+ 'type': 'basic',
+ 'in': 'header',
+ 'key': 'Authorization',
+ 'value': self.get_basic_auth_token()
+ }
+ if self.access_token is not None:
+ auth['petstore_auth'] = {
+ 'type': 'oauth2',
+ 'in': 'header',
+ 'key': 'Authorization',
+ 'value': 'Bearer ' + self.access_token
+ }
+ return auth
+
+ def to_debug_report(self):
+ """Gets the essential information for debugging.
+
+ :return: The report for debugging.
+ """
+ return "Python SDK Debug Report:\n"\
+ "OS: {env}\n"\
+ "Python Version: {pyversion}\n"\
+ "Version of the API: 1.0.0\n"\
+ "SDK Package Version: 1.0.0".\
+ format(env=sys.platform, pyversion=sys.version)
+
+ def get_host_settings(self):
+ """Gets an array of host settings
+
+ :return: An array of host settings
+ """
+ return [
+ {
+ 'url': "http://{server}.swagger.io:{port}/v2",
+ 'description': "petstore server",
+ 'variables': {
+ 'server': {
+ 'description': "No description provided",
+ 'default_value': "petstore",
+ 'enum_values': [
+ "petstore",
+ "qa-petstore",
+ "dev-petstore"
+ ]
+ },
+ 'port': {
+ 'description': "No description provided",
+ 'default_value': "80",
+ 'enum_values': [
+ "80",
+ "8080"
+ ]
+ }
+ }
+ },
+ {
+ 'url': "https://localhost:8080/{version}",
+ 'description': "The local server",
+ 'variables': {
+ 'version': {
+ 'description': "No description provided",
+ 'default_value': "v2",
+ 'enum_values': [
+ "v1",
+ "v2"
+ ]
+ }
+ }
+ }
+ ]
+
+ def get_host_from_settings(self, index, variables=None):
+ """Gets host URL based on the index and variables
+ :param index: array index of the host settings
+ :param variables: hash of variable and the corresponding value
+ :return: URL based on host settings
+ """
+ variables = {} if variables is None else variables
+ servers = self.get_host_settings()
+
+ try:
+ server = servers[index]
+ except IndexError:
+ raise ValueError(
+ "Invalid index {0} when selecting the host settings. "
+ "Must be less than {1}".format(index, len(servers)))
+
+ url = server['url']
+
+ # go through variables and replace placeholders
+ for variable_name, variable in server['variables'].items():
+ used_value = variables.get(
+ variable_name, variable['default_value'])
+
+ if 'enum_values' in variable \
+ and used_value not in variable['enum_values']:
+ raise ValueError(
+ "The variable `{0}` in the host URL has invalid value "
+ "{1}. Must be {2}.".format(
+ variable_name, variables[variable_name],
+ variable['enum_values']))
+
+ url = url.replace("{" + variable_name + "}", used_value)
+
+ return url
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/exceptions.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/exceptions.py
new file mode 100644
index 00000000000..100be3e0540
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/exceptions.py
@@ -0,0 +1,120 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+import six
+
+
+class OpenApiException(Exception):
+ """The base exception class for all OpenAPIExceptions"""
+
+
+class ApiTypeError(OpenApiException, TypeError):
+ def __init__(self, msg, path_to_item=None, valid_classes=None,
+ key_type=None):
+ """ Raises an exception for TypeErrors
+
+ Args:
+ msg (str): the exception message
+
+ Keyword Args:
+ path_to_item (list): a list of keys an indices to get to the
+ current_item
+ None if unset
+ valid_classes (tuple): the primitive classes that current item
+ should be an instance of
+ None if unset
+ key_type (bool): False if our value is a value in a dict
+ True if it is a key in a dict
+ False if our item is an item in a list
+ None if unset
+ """
+ self.path_to_item = path_to_item
+ self.valid_classes = valid_classes
+ self.key_type = key_type
+ full_msg = msg
+ if path_to_item:
+ full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
+ super(ApiTypeError, self).__init__(full_msg)
+
+
+class ApiValueError(OpenApiException, ValueError):
+ def __init__(self, msg, path_to_item=None):
+ """
+ Args:
+ msg (str): the exception message
+
+ Keyword Args:
+ path_to_item (list) the path to the exception in the
+ received_data dict. None if unset
+ """
+
+ self.path_to_item = path_to_item
+ full_msg = msg
+ if path_to_item:
+ full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
+ super(ApiValueError, self).__init__(full_msg)
+
+
+class ApiKeyError(OpenApiException, KeyError):
+ def __init__(self, msg, path_to_item=None):
+ """
+ Args:
+ msg (str): the exception message
+
+ Keyword Args:
+ path_to_item (None/list) the path to the exception in the
+ received_data dict
+ """
+ self.path_to_item = path_to_item
+ full_msg = msg
+ if path_to_item:
+ full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
+ super(ApiKeyError, self).__init__(full_msg)
+
+
+class ApiException(OpenApiException):
+
+ def __init__(self, status=None, reason=None, http_resp=None):
+ if http_resp:
+ self.status = http_resp.status
+ self.reason = http_resp.reason
+ self.body = http_resp.data
+ self.headers = http_resp.getheaders()
+ else:
+ self.status = status
+ self.reason = reason
+ self.body = None
+ self.headers = None
+
+ def __str__(self):
+ """Custom error messages for exception"""
+ error_message = "({0})\n"\
+ "Reason: {1}\n".format(self.status, self.reason)
+ if self.headers:
+ error_message += "HTTP response headers: {0}\n".format(
+ self.headers)
+
+ if self.body:
+ error_message += "HTTP response body: {0}\n".format(self.body)
+
+ return error_message
+
+
+def render_path(path_to_item):
+ """Returns a string representation of a path"""
+ result = ""
+ for pth in path_to_item:
+ if isinstance(pth, six.integer_types):
+ result += "[{0}]".format(pth)
+ else:
+ result += "['{0}']".format(pth)
+ return result
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/model_utils.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/model_utils.py
new file mode 100644
index 00000000000..6d6a88edb7e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/model_utils.py
@@ -0,0 +1,1393 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from datetime import date, datetime # noqa: F401
+import inspect
+import os
+import pprint
+import re
+import tempfile
+
+from dateutil.parser import parse
+import six
+
+from petstore_api.exceptions import (
+ ApiKeyError,
+ ApiTypeError,
+ ApiValueError,
+)
+
+none_type = type(None)
+if six.PY3:
+ import io
+ file_type = io.IOBase
+ # these are needed for when other modules import str and int from here
+ str = str
+ int = int
+else:
+ file_type = file # noqa: F821
+ str_py2 = str
+ unicode_py2 = unicode # noqa: F821
+ long_py2 = long # noqa: F821
+ int_py2 = int
+ # this requires that the future library is installed
+ from builtins import int, str
+
+
+class OpenApiModel(object):
+ """The base class for all OpenAPIModels"""
+
+ def set_attribute(self, name, value):
+ # this is only used to set properties on self
+
+ path_to_item = []
+ if self._path_to_item:
+ path_to_item.extend(self._path_to_item)
+ path_to_item.append(name)
+
+ openapi_types = self.openapi_types()
+ if name in openapi_types:
+ required_types_mixed = openapi_types[name]
+ elif self.additional_properties_type is None:
+ raise ApiKeyError(
+ "{0} has no key '{1}'".format(type(self).__name__, name),
+ path_to_item
+ )
+ elif self.additional_properties_type is not None:
+ required_types_mixed = self.additional_properties_type
+
+ if get_simple_class(name) != str:
+ error_msg = type_error_message(
+ var_name=name,
+ var_value=name,
+ valid_classes=(str,),
+ key_type=True
+ )
+ raise ApiTypeError(
+ error_msg,
+ path_to_item=path_to_item,
+ valid_classes=(str,),
+ key_type=True
+ )
+
+ if self._check_type:
+ value = validate_and_convert_types(
+ value, required_types_mixed, path_to_item, self._from_server,
+ self._check_type, configuration=self._configuration)
+ if (name,) in self.allowed_values:
+ check_allowed_values(
+ self.allowed_values,
+ (name,),
+ value
+ )
+ if (name,) in self.validations:
+ check_validations(
+ self.validations,
+ (name,),
+ value
+ )
+ self.__dict__['_data_store'][name] = value
+
+ def __setitem__(self, name, value):
+ """this allows us to set values with instance[field_name] = val"""
+ self.__setattr__(name, value)
+
+ def __getitem__(self, name):
+ """this allows us to get a value with val = instance[field_name]"""
+ return self.__getattr__(name)
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ return not self == other
+
+
+class ModelSimple(OpenApiModel):
+ """the parent class of models whose type != object in their
+ swagger/openapi"""
+
+ def __setattr__(self, name, value):
+ """this allows us to set a value with instance.field_name = val"""
+ if name in self.required_properties:
+ self.__dict__[name] = value
+ return
+
+ self.set_attribute(name, value)
+
+ def __getattr__(self, name):
+ """this allows us to get a value with val = instance.field_name"""
+ if name in self.required_properties:
+ return self.__dict__[name]
+
+ if name in self.__dict__['_data_store']:
+ return self.__dict__['_data_store'][name]
+
+ path_to_item = []
+ if self._path_to_item:
+ path_to_item.extend(self._path_to_item)
+ path_to_item.append(name)
+ raise ApiKeyError(
+ "{0} has no key '{1}'".format(type(self).__name__, name),
+ [name]
+ )
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return str(self.value)
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, self.__class__):
+ return False
+
+ this_val = self._data_store['value']
+ that_val = other._data_store['value']
+ types = set()
+ types.add(this_val.__class__)
+ types.add(that_val.__class__)
+ vals_equal = this_val == that_val
+ if not six.PY3 and len(types) == 2 and unicode in types: # noqa: F821
+ vals_equal = (
+ this_val.encode('utf-8') == that_val.encode('utf-8')
+ )
+ if not vals_equal:
+ return False
+ return True
+
+
+class ModelNormal(OpenApiModel):
+ """the parent class of models whose type == object in their
+ swagger/openapi"""
+
+ def __setattr__(self, name, value):
+ """this allows us to set a value with instance.field_name = val"""
+ if name in self.required_properties:
+ self.__dict__[name] = value
+ return
+
+ self.set_attribute(name, value)
+
+ def __getattr__(self, name):
+ """this allows us to get a value with val = instance.field_name"""
+ if name in self.required_properties:
+ return self.__dict__[name]
+
+ if name in self.__dict__['_data_store']:
+ return self.__dict__['_data_store'][name]
+
+ path_to_item = []
+ if self._path_to_item:
+ path_to_item.extend(self._path_to_item)
+ path_to_item.append(name)
+ raise ApiKeyError(
+ "{0} has no key '{1}'".format(type(self).__name__, name),
+ [name]
+ )
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ return model_to_dict(self, serialize=False)
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, self.__class__):
+ return False
+
+ if not set(self._data_store.keys()) == set(other._data_store.keys()):
+ return False
+ for _var_name, this_val in six.iteritems(self._data_store):
+ that_val = other._data_store[_var_name]
+ types = set()
+ types.add(this_val.__class__)
+ types.add(that_val.__class__)
+ vals_equal = this_val == that_val
+ if (not six.PY3 and
+ len(types) == 2 and unicode in types): # noqa: F821
+ vals_equal = (
+ this_val.encode('utf-8') == that_val.encode('utf-8')
+ )
+ if not vals_equal:
+ return False
+ return True
+
+
+class ModelComposed(OpenApiModel):
+ """the parent class of models whose type == object in their
+ swagger/openapi and have oneOf/allOf/anyOf"""
+
+ def __setattr__(self, name, value):
+ """this allows us to set a value with instance.field_name = val"""
+ if name in self.required_properties:
+ self.__dict__[name] = value
+ return
+
+ # set the attribute on the correct instance
+ model_instances = self._var_name_to_model_instances.get(
+ name, self._additional_properties_model_instances)
+ if model_instances:
+ for model_instance in model_instances:
+ if model_instance == self:
+ self.set_attribute(name, value)
+ else:
+ setattr(model_instance, name, value)
+ if name not in self._var_name_to_model_instances:
+ # we assigned an additional property
+ self.__dict__['_var_name_to_model_instances'][name] = (
+ model_instance
+ )
+ return None
+
+ path_to_item = []
+ if self._path_to_item:
+ path_to_item.extend(self._path_to_item)
+ path_to_item.append(name)
+ raise ApiKeyError(
+ "{0} has no key '{1}'".format(type(self).__name__, name),
+ path_to_item
+ )
+
+ def __getattr__(self, name):
+ """this allows us to get a value with val = instance.field_name"""
+ if name in self.required_properties:
+ return self.__dict__[name]
+
+ # get the attribute from the correct instance
+ model_instances = self._var_name_to_model_instances.get(
+ name, self._additional_properties_model_instances)
+ path_to_item = []
+ if self._path_to_item:
+ path_to_item.extend(self._path_to_item)
+ path_to_item.append(name)
+ if model_instances:
+ values = set()
+ for model_instance in model_instances:
+ if name in model_instance._data_store:
+ values.add(model_instance._data_store[name])
+ if len(values) == 1:
+ return list(values)[0]
+ raise ApiValueError(
+ "Values stored for property {0} in {1} difffer when looking "
+ "at self and self's composed instances. All values must be "
+ "the same".format(name, type(self).__name__),
+ path_to_item
+ )
+
+ raise ApiKeyError(
+ "{0} has no key '{1}'".format(type(self).__name__, name),
+ path_to_item
+ )
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ return model_to_dict(self, serialize=False)
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, self.__class__):
+ return False
+
+ if not set(self._data_store.keys()) == set(other._data_store.keys()):
+ return False
+ for _var_name, this_val in six.iteritems(self._data_store):
+ that_val = other._data_store[_var_name]
+ types = set()
+ types.add(this_val.__class__)
+ types.add(that_val.__class__)
+ vals_equal = this_val == that_val
+ if (not six.PY3 and
+ len(types) == 2 and unicode in types): # noqa: F821
+ vals_equal = (
+ this_val.encode('utf-8') == that_val.encode('utf-8')
+ )
+ if not vals_equal:
+ return False
+ return True
+
+
+COERCION_INDEX_BY_TYPE = {
+ ModelComposed: 0,
+ ModelNormal: 1,
+ ModelSimple: 2,
+ none_type: 3,
+ list: 4,
+ dict: 5,
+ float: 6,
+ int: 7,
+ bool: 8,
+ datetime: 9,
+ date: 10,
+ str: 11,
+ file_type: 12,
+}
+
+# these are used to limit what type conversions we try to do
+# when we have a valid type already and we want to try converting
+# to another type
+UPCONVERSION_TYPE_PAIRS = (
+ (str, datetime),
+ (str, date),
+ (list, ModelComposed),
+ (dict, ModelComposed),
+ (list, ModelNormal),
+ (dict, ModelNormal),
+ (str, ModelSimple),
+ (int, ModelSimple),
+ (float, ModelSimple),
+ (list, ModelSimple),
+)
+
+COERCIBLE_TYPE_PAIRS = {
+ False: ( # client instantiation of a model with client data
+ # (dict, ModelComposed),
+ # (list, ModelComposed),
+ # (dict, ModelNormal),
+ # (list, ModelNormal),
+ # (str, ModelSimple),
+ # (int, ModelSimple),
+ # (float, ModelSimple),
+ # (list, ModelSimple),
+ # (str, int),
+ # (str, float),
+ # (str, datetime),
+ # (str, date),
+ # (int, str),
+ # (float, str),
+ ),
+ True: ( # server -> client data
+ (dict, ModelComposed),
+ (list, ModelComposed),
+ (dict, ModelNormal),
+ (list, ModelNormal),
+ (str, ModelSimple),
+ (int, ModelSimple),
+ (float, ModelSimple),
+ (list, ModelSimple),
+ # (str, int),
+ # (str, float),
+ (str, datetime),
+ (str, date),
+ # (int, str),
+ # (float, str),
+ (str, file_type)
+ ),
+}
+
+
+def get_simple_class(input_value):
+ """Returns an input_value's simple class that we will use for type checking
+ Python2:
+ float and int will return int, where int is the python3 int backport
+ str and unicode will return str, where str is the python3 str backport
+ Note: float and int ARE both instances of int backport
+ Note: str_py2 and unicode_py2 are NOT both instances of str backport
+
+ Args:
+ input_value (class/class_instance): the item for which we will return
+ the simple class
+ """
+ if isinstance(input_value, type):
+ # input_value is a class
+ return input_value
+ elif isinstance(input_value, tuple):
+ return tuple
+ elif isinstance(input_value, list):
+ return list
+ elif isinstance(input_value, dict):
+ return dict
+ elif isinstance(input_value, none_type):
+ return none_type
+ elif isinstance(input_value, file_type):
+ return file_type
+ elif isinstance(input_value, bool):
+ # this must be higher than the int check because
+ # isinstance(True, int) == True
+ return bool
+ elif isinstance(input_value, int):
+ # for python2 input_value==long_instance -> return int
+ # where int is the python3 int backport
+ return int
+ elif isinstance(input_value, datetime):
+ # this must be higher than the date check because
+ # isinstance(datetime_instance, date) == True
+ return datetime
+ elif isinstance(input_value, date):
+ return date
+ elif (six.PY2 and isinstance(input_value, (str_py2, unicode_py2, str)) or
+ isinstance(input_value, str)):
+ return str
+ return type(input_value)
+
+
+def check_allowed_values(allowed_values, input_variable_path, input_values):
+ """Raises an exception if the input_values are not allowed
+
+ Args:
+ allowed_values (dict): the allowed_values dict
+ input_variable_path (tuple): the path to the input variable
+ input_values (list/str/int/float/date/datetime): the values that we
+ are checking to see if they are in allowed_values
+ """
+ these_allowed_values = list(allowed_values[input_variable_path].values())
+ if (isinstance(input_values, list)
+ and not set(input_values).issubset(
+ set(these_allowed_values))):
+ invalid_values = ", ".join(
+ map(str, set(input_values) - set(these_allowed_values))),
+ raise ApiValueError(
+ "Invalid values for `%s` [%s], must be a subset of [%s]" %
+ (
+ input_variable_path[0],
+ invalid_values,
+ ", ".join(map(str, these_allowed_values))
+ )
+ )
+ elif (isinstance(input_values, dict)
+ and not set(
+ input_values.keys()).issubset(set(these_allowed_values))):
+ invalid_values = ", ".join(
+ map(str, set(input_values.keys()) - set(these_allowed_values)))
+ raise ApiValueError(
+ "Invalid keys in `%s` [%s], must be a subset of [%s]" %
+ (
+ input_variable_path[0],
+ invalid_values,
+ ", ".join(map(str, these_allowed_values))
+ )
+ )
+ elif (not isinstance(input_values, (list, dict))
+ and input_values not in these_allowed_values):
+ raise ApiValueError(
+ "Invalid value for `%s` (%s), must be one of %s" %
+ (
+ input_variable_path[0],
+ input_values,
+ these_allowed_values
+ )
+ )
+
+
+def check_validations(validations, input_variable_path, input_values):
+ """Raises an exception if the input_values are invalid
+
+ Args:
+ validations (dict): the validation dictionary
+ input_variable_path (tuple): the path to the input variable
+ input_values (list/str/int/float/date/datetime): the values that we
+ are checking
+ """
+ current_validations = validations[input_variable_path]
+ if ('max_length' in current_validations and
+ len(input_values) > current_validations['max_length']):
+ raise ApiValueError(
+ "Invalid value for `%s`, length must be less than or equal to "
+ "`%s`" % (
+ input_variable_path[0],
+ current_validations['max_length']
+ )
+ )
+
+ if ('min_length' in current_validations and
+ len(input_values) < current_validations['min_length']):
+ raise ApiValueError(
+ "Invalid value for `%s`, length must be greater than or equal to "
+ "`%s`" % (
+ input_variable_path[0],
+ current_validations['min_length']
+ )
+ )
+
+ if ('max_items' in current_validations and
+ len(input_values) > current_validations['max_items']):
+ raise ApiValueError(
+ "Invalid value for `%s`, number of items must be less than or "
+ "equal to `%s`" % (
+ input_variable_path[0],
+ current_validations['max_items']
+ )
+ )
+
+ if ('min_items' in current_validations and
+ len(input_values) < current_validations['min_items']):
+ raise ValueError(
+ "Invalid value for `%s`, number of items must be greater than or "
+ "equal to `%s`" % (
+ input_variable_path[0],
+ current_validations['min_items']
+ )
+ )
+
+ items = ('exclusive_maximum', 'inclusive_maximum', 'exclusive_minimum',
+ 'inclusive_minimum')
+ if (any(item in current_validations for item in items)):
+ if isinstance(input_values, list):
+ max_val = max(input_values)
+ min_val = min(input_values)
+ elif isinstance(input_values, dict):
+ max_val = max(input_values.values())
+ min_val = min(input_values.values())
+ else:
+ max_val = input_values
+ min_val = input_values
+
+ if ('exclusive_maximum' in current_validations and
+ max_val >= current_validations['exclusive_maximum']):
+ raise ApiValueError(
+ "Invalid value for `%s`, must be a value less than `%s`" % (
+ input_variable_path[0],
+ current_validations['exclusive_maximum']
+ )
+ )
+
+ if ('inclusive_maximum' in current_validations and
+ max_val > current_validations['inclusive_maximum']):
+ raise ApiValueError(
+ "Invalid value for `%s`, must be a value less than or equal to "
+ "`%s`" % (
+ input_variable_path[0],
+ current_validations['inclusive_maximum']
+ )
+ )
+
+ if ('exclusive_minimum' in current_validations and
+ min_val <= current_validations['exclusive_minimum']):
+ raise ApiValueError(
+ "Invalid value for `%s`, must be a value greater than `%s`" %
+ (
+ input_variable_path[0],
+ current_validations['exclusive_maximum']
+ )
+ )
+
+ if ('inclusive_minimum' in current_validations and
+ min_val < current_validations['inclusive_minimum']):
+ raise ApiValueError(
+ "Invalid value for `%s`, must be a value greater than or equal "
+ "to `%s`" % (
+ input_variable_path[0],
+ current_validations['inclusive_minimum']
+ )
+ )
+ flags = current_validations.get('regex', {}).get('flags', 0)
+ if ('regex' in current_validations and
+ not re.search(current_validations['regex']['pattern'],
+ input_values, flags=flags)):
+ raise ApiValueError(
+ r"Invalid value for `%s`, must be a follow pattern or equal to "
+ r"`%s` with flags=`%s`" % (
+ input_variable_path[0],
+ current_validations['regex']['pattern'],
+ flags
+ )
+ )
+
+
+def order_response_types(required_types):
+ """Returns the required types sorted in coercion order
+
+ Args:
+ required_types (list/tuple): collection of classes or instance of
+ list or dict with classs information inside it
+
+ Returns:
+ (list): coercion order sorted collection of classes or instance
+ of list or dict with classs information inside it
+ """
+
+ def index_getter(class_or_instance):
+ if isinstance(class_or_instance, list):
+ return COERCION_INDEX_BY_TYPE[list]
+ elif isinstance(class_or_instance, dict):
+ return COERCION_INDEX_BY_TYPE[dict]
+ elif (inspect.isclass(class_or_instance)
+ and issubclass(class_or_instance, ModelComposed)):
+ return COERCION_INDEX_BY_TYPE[ModelComposed]
+ elif (inspect.isclass(class_or_instance)
+ and issubclass(class_or_instance, ModelNormal)):
+ return COERCION_INDEX_BY_TYPE[ModelNormal]
+ elif (inspect.isclass(class_or_instance)
+ and issubclass(class_or_instance, ModelSimple)):
+ return COERCION_INDEX_BY_TYPE[ModelSimple]
+ return COERCION_INDEX_BY_TYPE[class_or_instance]
+
+ sorted_types = sorted(
+ required_types,
+ key=lambda class_or_instance: index_getter(class_or_instance)
+ )
+ return sorted_types
+
+
+def remove_uncoercible(required_types_classes, current_item, from_server,
+ must_convert=True):
+ """Only keeps the type conversions that are possible
+
+ Args:
+ required_types_classes (tuple): tuple of classes that are required
+ these should be ordered by COERCION_INDEX_BY_TYPE
+ from_server (bool): a boolean of whether the data is from the server
+ if false, the data is from the client
+ current_item (any): the current item to be converted
+
+ Keyword Args:
+ must_convert (bool): if True the item to convert is of the wrong
+ type and we want a big list of coercibles
+ if False, we want a limited list of coercibles
+
+ Returns:
+ (list): the remaining coercible required types, classes only
+ """
+ current_type_simple = get_simple_class(current_item)
+
+ results_classes = []
+ for required_type_class in required_types_classes:
+ # convert our models to OpenApiModel
+ required_type_class_simplified = required_type_class
+ if isinstance(required_type_class_simplified, type):
+ if issubclass(required_type_class_simplified, ModelComposed):
+ required_type_class_simplified = ModelComposed
+ elif issubclass(required_type_class_simplified, ModelNormal):
+ required_type_class_simplified = ModelNormal
+ elif issubclass(required_type_class_simplified, ModelSimple):
+ required_type_class_simplified = ModelSimple
+
+ if required_type_class_simplified == current_type_simple:
+ # don't consider converting to one's own class
+ continue
+
+ class_pair = (current_type_simple, required_type_class_simplified)
+ if must_convert and class_pair in COERCIBLE_TYPE_PAIRS[from_server]:
+ results_classes.append(required_type_class)
+ elif class_pair in UPCONVERSION_TYPE_PAIRS:
+ results_classes.append(required_type_class)
+ return results_classes
+
+
+def get_required_type_classes(required_types_mixed):
+ """Converts the tuple required_types into a tuple and a dict described
+ below
+
+ Args:
+ required_types_mixed (tuple/list): will contain either classes or
+ instance of list or dict
+
+ Returns:
+ (valid_classes, dict_valid_class_to_child_types_mixed):
+ valid_classes (tuple): the valid classes that the current item
+ should be
+ dict_valid_class_to_child_types_mixed (doct):
+ valid_class (class): this is the key
+ child_types_mixed (list/dict/tuple): describes the valid child
+ types
+ """
+ valid_classes = []
+ child_req_types_by_current_type = {}
+ for required_type in required_types_mixed:
+ if isinstance(required_type, list):
+ valid_classes.append(list)
+ child_req_types_by_current_type[list] = required_type
+ elif isinstance(required_type, tuple):
+ valid_classes.append(tuple)
+ child_req_types_by_current_type[tuple] = required_type
+ elif isinstance(required_type, dict):
+ valid_classes.append(dict)
+ child_req_types_by_current_type[dict] = required_type[str]
+ else:
+ valid_classes.append(required_type)
+ return tuple(valid_classes), child_req_types_by_current_type
+
+
+def change_keys_js_to_python(input_dict, model_class):
+ """
+ Converts from javascript_key keys in the input_dict to python_keys in
+ the output dict using the mapping in model_class
+ """
+
+ output_dict = {}
+ reversed_attr_map = {value: key for key, value in
+ six.iteritems(model_class.attribute_map)}
+ for javascript_key, value in six.iteritems(input_dict):
+ python_key = reversed_attr_map.get(javascript_key)
+ if python_key is None:
+ # if the key is unknown, it is in error or it is an
+ # additionalProperties variable
+ python_key = javascript_key
+ output_dict[python_key] = value
+ return output_dict
+
+
+def get_type_error(var_value, path_to_item, valid_classes, key_type=False):
+ error_msg = type_error_message(
+ var_name=path_to_item[-1],
+ var_value=var_value,
+ valid_classes=valid_classes,
+ key_type=key_type
+ )
+ return ApiTypeError(
+ error_msg,
+ path_to_item=path_to_item,
+ valid_classes=valid_classes,
+ key_type=key_type
+ )
+
+
+def deserialize_primitive(data, klass, path_to_item):
+ """Deserializes string to primitive type.
+
+ :param data: str/int/float
+ :param klass: str/class the class to convert to
+
+ :return: int, float, str, bool, date, datetime
+ """
+ additional_message = ""
+ try:
+ if klass in {datetime, date}:
+ additional_message = (
+ "If you need your parameter to have a fallback "
+ "string value, please set its type as `type: {}` in your "
+ "spec. That allows the value to be any type. "
+ )
+ if klass == datetime:
+ if len(data) < 8:
+ raise ValueError("This is not a datetime")
+ # The string should be in iso8601 datetime format.
+ parsed_datetime = parse(data)
+ date_only = (
+ parsed_datetime.hour == 0 and
+ parsed_datetime.minute == 0 and
+ parsed_datetime.second == 0 and
+ parsed_datetime.tzinfo is None and
+ 8 <= len(data) <= 10
+ )
+ if date_only:
+ raise ValueError("This is a date, not a datetime")
+ return parsed_datetime
+ elif klass == date:
+ if len(data) < 8:
+ raise ValueError("This is not a date")
+ return parse(data).date()
+ else:
+ converted_value = klass(data)
+ if isinstance(data, str) and klass == float:
+ if str(converted_value) != data:
+ # '7' -> 7.0 -> '7.0' != '7'
+ raise ValueError('This is not a float')
+ return converted_value
+ except (OverflowError, ValueError):
+ # parse can raise OverflowError
+ raise ApiValueError(
+ "{0}Failed to parse {1} as {2}".format(
+ additional_message, repr(data), get_py3_class_name(klass)
+ ),
+ path_to_item=path_to_item
+ )
+
+
+def fix_model_input_data(model_data, model_class):
+ # this is only called on classes where the input data is a dict
+ fixed_model_data = change_keys_js_to_python(
+ model_data,
+ model_class
+ )
+ if model_class._composed_schemas() is not None:
+ for allof_class in model_class._composed_schemas()['allOf']:
+ fixed_model_data = change_keys_js_to_python(
+ fixed_model_data,
+ allof_class
+ )
+ return fixed_model_data
+
+
+def deserialize_model(model_data, model_class, path_to_item, check_type,
+ configuration, from_server):
+ """Deserializes model_data to model instance.
+
+ Args:
+ model_data (list/dict): data to instantiate the model
+ model_class (OpenApiModel): the model class
+ path_to_item (list): path to the model in the received data
+ check_type (bool): whether to check the data tupe for the values in
+ the model
+ configuration (Configuration): the instance to use to convert files
+ from_server (bool): True if the data is from the server
+ False if the data is from the client
+
+ Returns:
+ model instance
+
+ Raise:
+ ApiTypeError
+ ApiValueError
+ ApiKeyError
+ """
+
+ kw_args = dict(_check_type=check_type,
+ _path_to_item=path_to_item,
+ _configuration=configuration,
+ _from_server=from_server)
+
+ used_model_class = model_class
+ if model_class.discriminator() is not None:
+ used_model_class = model_class.get_discriminator_class(
+ from_server, model_data)
+
+ if issubclass(used_model_class, ModelSimple):
+ instance = used_model_class(value=model_data, **kw_args)
+ return instance
+ if isinstance(model_data, list):
+ instance = used_model_class(*model_data, **kw_args)
+ if isinstance(model_data, dict):
+ fixed_model_data = change_keys_js_to_python(
+ model_data,
+ used_model_class
+ )
+ kw_args.update(fixed_model_data)
+ instance = used_model_class(**kw_args)
+ return instance
+
+
+def deserialize_file(response_data, configuration, content_disposition=None):
+ """Deserializes body to file
+
+ Saves response body into a file in a temporary folder,
+ using the filename from the `Content-Disposition` header if provided.
+
+ Args:
+ param response_data (str): the file data to write
+ configuration (Configuration): the instance to use to convert files
+
+ Keyword Args:
+ content_disposition (str): the value of the Content-Disposition
+ header
+
+ Returns:
+ (file_type): the deserialized file which is open
+ The user is responsible for closing and reading the file
+ """
+ fd, path = tempfile.mkstemp(dir=configuration.temp_folder_path)
+ os.close(fd)
+ os.remove(path)
+
+ if content_disposition:
+ filename = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?',
+ content_disposition).group(1)
+ path = os.path.join(os.path.dirname(path), filename)
+
+ with open(path, "wb") as f:
+ if six.PY3 and isinstance(response_data, str):
+ # in python3 change str to bytes so we can write it
+ response_data = response_data.encode('utf-8')
+ f.write(response_data)
+
+ f = open(path, "rb")
+ return f
+
+
+def attempt_convert_item(input_value, valid_classes, path_to_item,
+ configuration, from_server, key_type=False,
+ must_convert=False, check_type=True):
+ """
+ Args:
+ input_value (any): the data to convert
+ valid_classes (any): the classes that are valid
+ path_to_item (list): the path to the item to convert
+ configuration (Configuration): the instance to use to convert files
+ from_server (bool): True if data is from the server, False is data is
+ from the client
+ key_type (bool): if True we need to convert a key type (not supported)
+ must_convert (bool): if True we must convert
+ check_type (bool): if True we check the type or the returned data in
+ ModelComposed/ModelNormal/ModelSimple instances
+
+ Returns:
+ instance (any) the fixed item
+
+ Raises:
+ ApiTypeError
+ ApiValueError
+ ApiKeyError
+ """
+ valid_classes_ordered = order_response_types(valid_classes)
+ valid_classes_coercible = remove_uncoercible(
+ valid_classes_ordered, input_value, from_server)
+ if not valid_classes_coercible or key_type:
+ # we do not handle keytype errors, json will take care
+ # of this for us
+ raise get_type_error(input_value, path_to_item, valid_classes,
+ key_type=key_type)
+ for valid_class in valid_classes_coercible:
+ try:
+ if issubclass(valid_class, OpenApiModel):
+ return deserialize_model(input_value, valid_class,
+ path_to_item, check_type,
+ configuration, from_server)
+ elif valid_class == file_type:
+ return deserialize_file(input_value, configuration)
+ return deserialize_primitive(input_value, valid_class,
+ path_to_item)
+ except (ApiTypeError, ApiValueError, ApiKeyError) as conversion_exc:
+ if must_convert:
+ raise conversion_exc
+ # if we have conversion errors when must_convert == False
+ # we ignore the exception and move on to the next class
+ continue
+ # we were unable to convert, must_convert == False
+ return input_value
+
+
+def validate_and_convert_types(input_value, required_types_mixed, path_to_item,
+ from_server, _check_type, configuration=None):
+ """Raises a TypeError is there is a problem, otherwise returns value
+
+ Args:
+ input_value (any): the data to validate/convert
+ required_types_mixed (list/dict/tuple): A list of
+ valid classes, or a list tuples of valid classes, or a dict where
+ the value is a tuple of value classes
+ path_to_item: (list) the path to the data being validated
+ this stores a list of keys or indices to get to the data being
+ validated
+ from_server (bool): True if data is from the server
+ False if data is from the client
+ _check_type: (boolean) if true, type will be checked and conversion
+ will be attempted.
+ configuration: (Configuration): the configuration class to use
+ when converting file_type items.
+ If passed, conversion will be attempted when possible
+ If not passed, no conversions will be attempted and
+ exceptions will be raised
+
+ Returns:
+ the correctly typed value
+
+ Raises:
+ ApiTypeError
+ """
+ results = get_required_type_classes(required_types_mixed)
+ valid_classes, child_req_types_by_current_type = results
+
+ input_class_simple = get_simple_class(input_value)
+ valid_type = input_class_simple in set(valid_classes)
+ if not valid_type:
+ if configuration:
+ # if input_value is not valid_type try to convert it
+ converted_instance = attempt_convert_item(
+ input_value,
+ valid_classes,
+ path_to_item,
+ configuration,
+ from_server,
+ key_type=False,
+ must_convert=True
+ )
+ return converted_instance
+ else:
+ raise get_type_error(input_value, path_to_item, valid_classes,
+ key_type=False)
+
+ # input_value's type is in valid_classes
+ if len(valid_classes) > 1 and configuration:
+ # there are valid classes which are not the current class
+ valid_classes_coercible = remove_uncoercible(
+ valid_classes, input_value, from_server, must_convert=False)
+ if valid_classes_coercible:
+ converted_instance = attempt_convert_item(
+ input_value,
+ valid_classes_coercible,
+ path_to_item,
+ configuration,
+ from_server,
+ key_type=False,
+ must_convert=False
+ )
+ return converted_instance
+
+ if child_req_types_by_current_type == {}:
+ # all types are of the required types and there are no more inner
+ # variables left to look at
+ return input_value
+ inner_required_types = child_req_types_by_current_type.get(
+ type(input_value)
+ )
+ if inner_required_types is None:
+ # for this type, there are not more inner variables left to look at
+ return input_value
+ if isinstance(input_value, list):
+ if input_value == []:
+ # allow an empty list
+ return input_value
+ for index, inner_value in enumerate(input_value):
+ inner_path = list(path_to_item)
+ inner_path.append(index)
+ input_value[index] = validate_and_convert_types(
+ inner_value,
+ inner_required_types,
+ inner_path,
+ from_server,
+ _check_type,
+ configuration=configuration
+ )
+ elif isinstance(input_value, dict):
+ if input_value == {}:
+ # allow an empty dict
+ return input_value
+ for inner_key, inner_val in six.iteritems(input_value):
+ inner_path = list(path_to_item)
+ inner_path.append(inner_key)
+ if get_simple_class(inner_key) != str:
+ raise get_type_error(inner_key, inner_path, valid_classes,
+ key_type=True)
+ input_value[inner_key] = validate_and_convert_types(
+ inner_val,
+ inner_required_types,
+ inner_path,
+ from_server,
+ _check_type,
+ configuration=configuration
+ )
+ return input_value
+
+
+def model_to_dict(model_instance, serialize=True):
+ """Returns the model properties as a dict
+
+ Args:
+ model_instance (one of your model instances): the model instance that
+ will be converted to a dict.
+
+ Keyword Args:
+ serialize (bool): if True, the keys in the dict will be values from
+ attribute_map
+ """
+ result = {}
+
+ model_instances = [model_instance]
+ if model_instance._composed_schemas() is not None:
+ model_instances = model_instance._composed_instances
+ for model_instance in model_instances:
+ for attr, value in six.iteritems(model_instance._data_store):
+ if serialize:
+ # we use get here because additional property key names do not
+ # exist in attribute_map
+ attr = model_instance.attribute_map.get(attr, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: model_to_dict(x, serialize=serialize)
+ if hasattr(x, '_data_store') else x, value
+ ))
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0],
+ model_to_dict(item[1], serialize=serialize))
+ if hasattr(item[1], '_data_store') else item,
+ value.items()
+ ))
+ elif hasattr(value, '_data_store'):
+ result[attr] = model_to_dict(value, serialize=serialize)
+ else:
+ result[attr] = value
+
+ return result
+
+
+def type_error_message(var_value=None, var_name=None, valid_classes=None,
+ key_type=None):
+ """
+ Keyword Args:
+ var_value (any): the variable which has the type_error
+ var_name (str): the name of the variable which has the typ error
+ valid_classes (tuple): the accepted classes for current_item's
+ value
+ key_type (bool): False if our value is a value in a dict
+ True if it is a key in a dict
+ False if our item is an item in a list
+ """
+ key_or_value = 'value'
+ if key_type:
+ key_or_value = 'key'
+ valid_classes_phrase = get_valid_classes_phrase(valid_classes)
+ msg = (
+ "Invalid type for variable '{0}'. Required {1} type {2} and "
+ "passed type was {3}".format(
+ var_name,
+ key_or_value,
+ valid_classes_phrase,
+ type(var_value).__name__,
+ )
+ )
+ return msg
+
+
+def get_valid_classes_phrase(input_classes):
+ """Returns a string phrase describing what types are allowed
+ Note: Adds the extra valid classes in python2
+ """
+ all_classes = list(input_classes)
+ if six.PY2 and str in input_classes:
+ all_classes.extend([str_py2, unicode_py2])
+ if six.PY2 and int in input_classes:
+ all_classes.extend([int_py2, long_py2])
+ all_classes = sorted(all_classes, key=lambda cls: cls.__name__)
+ all_class_names = [cls.__name__ for cls in all_classes]
+ if len(all_class_names) == 1:
+ return 'is {0}'.format(all_class_names[0])
+ return "is one of [{0}]".format(", ".join(all_class_names))
+
+
+def get_py3_class_name(input_class):
+ if six.PY2:
+ if input_class == str:
+ return 'str'
+ elif input_class == int:
+ return 'int'
+ return input_class.__name__
+
+
+def get_allof_instances(self, model_args, constant_args):
+ """
+ Args:
+ self: the class we are handling
+ model_args (dict): var_name to var_value
+ used to make instances
+ constant_args (dict): var_name to var_value
+ used to make instances
+
+ Returns
+ composed_instances (list)
+ """
+ composed_instances = []
+ for allof_class in self._composed_schemas()['allOf']:
+
+ # transform js keys to python keys in fixed_model_args
+ fixed_model_args = change_keys_js_to_python(
+ model_args, allof_class)
+
+ # extract a dict of only required keys from fixed_model_args
+ kwargs = {}
+ var_names = set(allof_class.openapi_types().keys())
+ for var_name in var_names:
+ if var_name in fixed_model_args:
+ kwargs[var_name] = fixed_model_args[var_name]
+
+ # and use it to make the instance
+ kwargs.update(constant_args)
+ allof_instance = allof_class(**kwargs)
+ composed_instances.append(allof_instance)
+ return composed_instances
+
+
+def get_oneof_instance(self, model_args, constant_args):
+ """
+ Args:
+ self: the class we are handling
+ model_args (dict): var_name to var_value
+ used to make instances
+ constant_args (dict): var_name to var_value
+ used to make instances
+
+ Returns
+ oneof_instance (instance)
+ """
+ oneof_instance = None
+ if len(self._composed_schemas()['oneOf']) == 0:
+ return oneof_instance
+
+ for oneof_class in self._composed_schemas()['oneOf']:
+ # transform js keys to python keys in fixed_model_args
+ fixed_model_args = change_keys_js_to_python(
+ model_args, oneof_class)
+
+ # extract a dict of only required keys from fixed_model_args
+ kwargs = {}
+ var_names = set(oneof_class.openapi_types().keys())
+ for var_name in var_names:
+ if var_name in fixed_model_args:
+ kwargs[var_name] = fixed_model_args[var_name]
+
+ # and use it to make the instance
+ kwargs.update(constant_args)
+ try:
+ oneof_instance = oneof_class(**kwargs)
+ break
+ except Exception:
+ pass
+ if oneof_instance is None:
+ raise ApiValueError(
+ "Invalid inputs given to generate an instance of %s. Unable to "
+ "make any instances of the classes in oneOf definition." %
+ self.__class__.__name__
+ )
+ return oneof_instance
+
+
+def get_anyof_instances(self, model_args, constant_args):
+ """
+ Args:
+ self: the class we are handling
+ model_args (dict): var_name to var_value
+ used to make instances
+ constant_args (dict): var_name to var_value
+ used to make instances
+
+ Returns
+ anyof_instances (list)
+ """
+ anyof_instances = []
+ if len(self._composed_schemas()['anyOf']) == 0:
+ return anyof_instances
+
+ for anyof_class in self._composed_schemas()['anyOf']:
+ # transform js keys to python keys in fixed_model_args
+ fixed_model_args = change_keys_js_to_python(model_args, anyof_class)
+
+ # extract a dict of only required keys from these_model_vars
+ kwargs = {}
+ var_names = set(anyof_class.openapi_types().keys())
+ for var_name in var_names:
+ if var_name in fixed_model_args:
+ kwargs[var_name] = fixed_model_args[var_name]
+
+ # and use it to make the instance
+ kwargs.update(constant_args)
+ try:
+ anyof_instance = anyof_class(**kwargs)
+ anyof_instances.append(anyof_instance)
+ except Exception:
+ pass
+ if len(anyof_instances) == 0:
+ raise ApiValueError(
+ "Invalid inputs given to generate an instance of %s. Unable to "
+ "make any instances of the classes in anyOf definition." %
+ self.__class__.__name__
+ )
+ return anyof_instances
+
+
+def get_additional_properties_model_instances(
+ composed_instances, self):
+ additional_properties_model_instances = []
+ all_instances = [self]
+ all_instances.extend(composed_instances)
+ for instance in all_instances:
+ if instance.additional_properties_type is not None:
+ additional_properties_model_instances.append(instance)
+ return additional_properties_model_instances
+
+
+def get_var_name_to_model_instances(self, composed_instances):
+ var_name_to_model_instances = {}
+ all_instances = [self]
+ all_instances.extend(composed_instances)
+ for instance in all_instances:
+ for var_name in instance.openapi_types():
+ if var_name not in var_name_to_model_instances:
+ var_name_to_model_instances[var_name] = [instance]
+ else:
+ var_name_to_model_instances[var_name].append(instance)
+ return var_name_to_model_instances
+
+
+def get_unused_args(self, composed_instances, model_args):
+ unused_args = dict(model_args)
+ # arguments apssed to self were already converted to python names
+ # before __init__ was called
+ for var_name_py in self.attribute_map:
+ if var_name_py in unused_args:
+ del unused_args[var_name_py]
+ for instance in composed_instances:
+ if instance.__class__ in self._composed_schemas()['allOf']:
+ for var_name_py in instance.attribute_map:
+ if var_name_py in unused_args:
+ del unused_args[var_name_py]
+ else:
+ for var_name_js in instance.attribute_map.values():
+ if var_name_js in unused_args:
+ del unused_args[var_name_js]
+ return unused_args
+
+
+def validate_get_composed_info(constant_args, model_args, self):
+ """
+ For composed schemas/classes, validates the classes to make sure that
+ they do not share any of the same parameters. If there is no collision
+ then composed model instances are created and returned tot the calling
+ self model
+
+ Args:
+ constant_args (dict): these are the args that every model requires
+ model_args (dict): these are the required and optional spec args that
+ were passed in to make this model
+ self (class): the class that we are instantiating
+ This class contains self._composed_schemas()
+
+ Returns:
+ composed_info (list): length three
+ composed_instances (list): the composed instances which are not
+ self
+ var_name_to_model_instances (dict): a dict going from var_name
+ to the model_instance which holds that var_name
+ the model_instance may be self or an instance of one of the
+ classes in self.composed_instances()
+ additional_properties_model_instances (list): a list of the
+ model instances which have the property
+ additional_properties_type. This list can include self
+ """
+ # create composed_instances
+ composed_instances = []
+ allof_instances = get_allof_instances(self, model_args, constant_args)
+ composed_instances.extend(allof_instances)
+ oneof_instance = get_oneof_instance(self, model_args, constant_args)
+ if oneof_instance is not None:
+ composed_instances.append(oneof_instance)
+ anyof_instances = get_anyof_instances(self, model_args, constant_args)
+ composed_instances.extend(anyof_instances)
+
+ # map variable names to composed_instances
+ var_name_to_model_instances = get_var_name_to_model_instances(
+ self, composed_instances)
+
+ # set additional_properties_model_instances
+ additional_properties_model_instances = (
+ get_additional_properties_model_instances(composed_instances, self)
+ )
+
+ # set any remaining values
+ unused_args = get_unused_args(self, composed_instances, model_args)
+ if len(unused_args) > 0:
+ if len(additional_properties_model_instances) == 0:
+ raise ApiValueError(
+ "Invalid input arguments input when making an instance of "
+ "class %s. Not all inputs were used. The unused input data "
+ "is %s" % (self.__class__.__name__, unused_args)
+ )
+ for var_name, var_value in six.iteritems(unused_args):
+ for instance in additional_properties_model_instances:
+ setattr(instance, var_name, var_value)
+ # no need to add additional_properties to var_name_to_model_instances here
+ # because additional_properties_model_instances will direct us to that
+ # instance when we use getattr or setattr
+ # and we update var_name_to_model_instances in setattr
+
+ return [
+ composed_instances,
+ var_name_to_model_instances,
+ additional_properties_model_instances
+ ]
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/__init__.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/__init__.py
new file mode 100644
index 00000000000..e02c6651925
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/__init__.py
@@ -0,0 +1,15 @@
+# coding: utf-8
+
+# flake8: noqa
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+# we can not import model classes here because that would create a circular
+# reference which would not work in python2
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/additional_properties_class.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/additional_properties_class.py
new file mode 100644
index 00000000000..1539b694b56
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/additional_properties_class.py
@@ -0,0 +1,130 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class AdditionalPropertiesClass(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'map_property': ({str: (str,)},), # noqa: E501
+ 'map_of_map_property': ({str: ({str: (str,)},)},), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'map_property': 'map_property', # noqa: E501
+ 'map_of_map_property': 'map_of_map_property', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """additional_properties_class.AdditionalPropertiesClass - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ map_property ({str: (str,)}): [optional] # noqa: E501
+ map_of_map_property ({str: ({str: (str,)},)}): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/animal.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/animal.py
new file mode 100644
index 00000000000..abb0d49e74c
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/animal.py
@@ -0,0 +1,160 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+try:
+ from petstore_api.models import cat
+except ImportError:
+ cat = sys.modules[
+ 'petstore_api.models.cat']
+try:
+ from petstore_api.models import dog
+except ImportError:
+ dog = sys.modules[
+ 'petstore_api.models.dog']
+
+
+class Animal(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'class_name': (str,), # noqa: E501
+ 'color': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return {
+ 'class_name': {
+ 'Cat': cat.Cat,
+ 'Dog': dog.Dog,
+ },
+ }
+
+ attribute_map = {
+ 'class_name': 'className', # noqa: E501
+ 'color': 'color', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, class_name, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """animal.Animal - a model defined in OpenAPI
+
+ Args:
+ class_name (str):
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ color (str): [optional] if omitted the server will use the default value of 'red' # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.class_name = class_name
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
+
+ @classmethod
+ def get_discriminator_class(cls, from_server, data):
+ """Returns the child class specified by the discriminator"""
+ discriminator = cls.discriminator()
+ discr_propertyname_py = list(discriminator.keys())[0]
+ discr_propertyname_js = cls.attribute_map[discr_propertyname_py]
+ if from_server:
+ class_name = data[discr_propertyname_js]
+ else:
+ class_name = data[discr_propertyname_py]
+ class_name_to_discr_class = discriminator[discr_propertyname_py]
+ return class_name_to_discr_class.get(class_name)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/api_response.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/api_response.py
new file mode 100644
index 00000000000..cc3d2cea442
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/api_response.py
@@ -0,0 +1,133 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class ApiResponse(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'code': (int,), # noqa: E501
+ 'type': (str,), # noqa: E501
+ 'message': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'code': 'code', # noqa: E501
+ 'type': 'type', # noqa: E501
+ 'message': 'message', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """api_response.ApiResponse - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ code (int): [optional] # noqa: E501
+ type (str): [optional] # noqa: E501
+ message (str): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/array_of_array_of_number_only.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/array_of_array_of_number_only.py
new file mode 100644
index 00000000000..3c0175acdd8
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/array_of_array_of_number_only.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class ArrayOfArrayOfNumberOnly(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'array_array_number': ([[float]],), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'array_array_number': 'ArrayArrayNumber', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """array_of_array_of_number_only.ArrayOfArrayOfNumberOnly - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ array_array_number ([[float]]): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/array_of_number_only.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/array_of_number_only.py
new file mode 100644
index 00000000000..28bacd7021d
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/array_of_number_only.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class ArrayOfNumberOnly(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'array_number': ([float],), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'array_number': 'ArrayNumber', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """array_of_number_only.ArrayOfNumberOnly - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ array_number ([float]): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/array_test.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/array_test.py
new file mode 100644
index 00000000000..c99bc985cab
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/array_test.py
@@ -0,0 +1,138 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+try:
+ from petstore_api.models import read_only_first
+except ImportError:
+ read_only_first = sys.modules[
+ 'petstore_api.models.read_only_first']
+
+
+class ArrayTest(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'array_of_string': ([str],), # noqa: E501
+ 'array_array_of_integer': ([[int]],), # noqa: E501
+ 'array_array_of_model': ([[read_only_first.ReadOnlyFirst]],), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'array_of_string': 'array_of_string', # noqa: E501
+ 'array_array_of_integer': 'array_array_of_integer', # noqa: E501
+ 'array_array_of_model': 'array_array_of_model', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """array_test.ArrayTest - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ array_of_string ([str]): [optional] # noqa: E501
+ array_array_of_integer ([[int]]): [optional] # noqa: E501
+ array_array_of_model ([[read_only_first.ReadOnlyFirst]]): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/capitalization.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/capitalization.py
new file mode 100644
index 00000000000..8311ed65ba2
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/capitalization.py
@@ -0,0 +1,142 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class Capitalization(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'small_camel': (str,), # noqa: E501
+ 'capital_camel': (str,), # noqa: E501
+ 'small_snake': (str,), # noqa: E501
+ 'capital_snake': (str,), # noqa: E501
+ 'sca_eth_flow_points': (str,), # noqa: E501
+ 'att_name': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'small_camel': 'smallCamel', # noqa: E501
+ 'capital_camel': 'CapitalCamel', # noqa: E501
+ 'small_snake': 'small_Snake', # noqa: E501
+ 'capital_snake': 'Capital_Snake', # noqa: E501
+ 'sca_eth_flow_points': 'SCA_ETH_Flow_Points', # noqa: E501
+ 'att_name': 'ATT_NAME', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """capitalization.Capitalization - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ small_camel (str): [optional] # noqa: E501
+ capital_camel (str): [optional] # noqa: E501
+ small_snake (str): [optional] # noqa: E501
+ capital_snake (str): [optional] # noqa: E501
+ sca_eth_flow_points (str): [optional] # noqa: E501
+ att_name (str): Name of the pet . [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/cat.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/cat.py
new file mode 100644
index 00000000000..229d0445554
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/cat.py
@@ -0,0 +1,180 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+try:
+ from petstore_api.models import animal
+except ImportError:
+ animal = sys.modules[
+ 'petstore_api.models.animal']
+try:
+ from petstore_api.models import cat_all_of
+except ImportError:
+ cat_all_of = sys.modules[
+ 'petstore_api.models.cat_all_of']
+
+
+class Cat(ModelComposed):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'class_name': (str,), # noqa: E501
+ 'declawed': (bool,), # noqa: E501
+ 'color': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'class_name': 'className', # noqa: E501
+ 'declawed': 'declawed', # noqa: E501
+ 'color': 'color', # noqa: E501
+ }
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ '_composed_instances',
+ '_var_name_to_model_instances',
+ '_additional_properties_model_instances',
+ ])
+
+ def __init__(self, class_name, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """cat.Cat - a model defined in OpenAPI
+
+ Args:
+ class_name (str):
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ declawed (bool): [optional] # noqa: E501
+ color (str): [optional] if omitted the server will use the default value of 'red' # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ constant_args = {
+ '_check_type': _check_type,
+ '_path_to_item': _path_to_item,
+ '_from_server': _from_server,
+ '_configuration': _configuration,
+ }
+ model_args = {
+ 'class_name': class_name,
+ }
+ model_args.update(kwargs)
+ composed_info = validate_get_composed_info(
+ constant_args, model_args, self)
+ self._composed_instances = composed_info[0]
+ self._var_name_to_model_instances = composed_info[1]
+ self._additional_properties_model_instances = composed_info[2]
+
+ self.class_name = class_name
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
+
+ @staticmethod
+ def _composed_schemas():
+ # we need this here to make our import statements work
+ # we must store _composed_schemas in here so the code is only run
+ # when we invoke this method. If we kept this at the class
+ # level we would get an error beause the class level
+ # code would be run when this module is imported, and these composed
+ # classes don't exist yet because their module has not finished
+ # loading
+ return {
+ 'anyOf': [
+ ],
+ 'allOf': [
+ animal.Animal,
+ cat_all_of.CatAllOf,
+ ],
+ 'oneOf': [
+ ],
+ }
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/cat_all_of.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/cat_all_of.py
new file mode 100644
index 00000000000..00b0cfae654
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/cat_all_of.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class CatAllOf(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'declawed': (bool,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'declawed': 'declawed', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """cat_all_of.CatAllOf - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ declawed (bool): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/category.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/category.py
new file mode 100644
index 00000000000..2530a19b2f3
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/category.py
@@ -0,0 +1,132 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class Category(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'name': (str,), # noqa: E501
+ 'id': (int,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'name': 'name', # noqa: E501
+ 'id': 'id', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, name='default-name', _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """category.Category - a model defined in OpenAPI
+
+ Args:
+
+ Keyword Args:
+ name (str): defaults to 'default-name', must be one of ['default-name'] # noqa: E501
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ id (int): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.name = name
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/class_model.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/class_model.py
new file mode 100644
index 00000000000..f268d8576d5
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/class_model.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class ClassModel(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ '_class': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ '_class': '_class', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """class_model.ClassModel - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _class (str): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/client.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/client.py
new file mode 100644
index 00000000000..1097c624d72
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/client.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class Client(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'client': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'client': 'client', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """client.Client - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ client (str): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/dog.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/dog.py
new file mode 100644
index 00000000000..b29e31d4e5d
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/dog.py
@@ -0,0 +1,180 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+try:
+ from petstore_api.models import animal
+except ImportError:
+ animal = sys.modules[
+ 'petstore_api.models.animal']
+try:
+ from petstore_api.models import dog_all_of
+except ImportError:
+ dog_all_of = sys.modules[
+ 'petstore_api.models.dog_all_of']
+
+
+class Dog(ModelComposed):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'class_name': (str,), # noqa: E501
+ 'breed': (str,), # noqa: E501
+ 'color': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'class_name': 'className', # noqa: E501
+ 'breed': 'breed', # noqa: E501
+ 'color': 'color', # noqa: E501
+ }
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ '_composed_instances',
+ '_var_name_to_model_instances',
+ '_additional_properties_model_instances',
+ ])
+
+ def __init__(self, class_name, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """dog.Dog - a model defined in OpenAPI
+
+ Args:
+ class_name (str):
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ breed (str): [optional] # noqa: E501
+ color (str): [optional] if omitted the server will use the default value of 'red' # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ constant_args = {
+ '_check_type': _check_type,
+ '_path_to_item': _path_to_item,
+ '_from_server': _from_server,
+ '_configuration': _configuration,
+ }
+ model_args = {
+ 'class_name': class_name,
+ }
+ model_args.update(kwargs)
+ composed_info = validate_get_composed_info(
+ constant_args, model_args, self)
+ self._composed_instances = composed_info[0]
+ self._var_name_to_model_instances = composed_info[1]
+ self._additional_properties_model_instances = composed_info[2]
+
+ self.class_name = class_name
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
+
+ @staticmethod
+ def _composed_schemas():
+ # we need this here to make our import statements work
+ # we must store _composed_schemas in here so the code is only run
+ # when we invoke this method. If we kept this at the class
+ # level we would get an error beause the class level
+ # code would be run when this module is imported, and these composed
+ # classes don't exist yet because their module has not finished
+ # loading
+ return {
+ 'anyOf': [
+ ],
+ 'allOf': [
+ animal.Animal,
+ dog_all_of.DogAllOf,
+ ],
+ 'oneOf': [
+ ],
+ }
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/dog_all_of.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/dog_all_of.py
new file mode 100644
index 00000000000..316ec102b91
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/dog_all_of.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class DogAllOf(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'breed': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'breed': 'breed', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """dog_all_of.DogAllOf - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ breed (str): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/enum_arrays.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/enum_arrays.py
new file mode 100644
index 00000000000..d997d53fac7
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/enum_arrays.py
@@ -0,0 +1,138 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class EnumArrays(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('just_symbol',): {
+ '>=': ">=",
+ '$': "$",
+ },
+ ('array_enum',): {
+ 'FISH': "fish",
+ 'CRAB': "crab",
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'just_symbol': (str,), # noqa: E501
+ 'array_enum': ([str],), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'just_symbol': 'just_symbol', # noqa: E501
+ 'array_enum': 'array_enum', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """enum_arrays.EnumArrays - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ just_symbol (str): [optional] # noqa: E501
+ array_enum ([str]): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/enum_class.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/enum_class.py
new file mode 100644
index 00000000000..bda8183ce78
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/enum_class.py
@@ -0,0 +1,126 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class EnumClass(ModelSimple):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('value',): {
+ '_ABC': "_abc",
+ '-EFG': "-efg",
+ '(XYZ)': "(xyz)",
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'value': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, value='-efg', _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """enum_class.EnumClass - a model defined in OpenAPI
+
+ Args:
+
+ Keyword Args:
+ value (str): defaults to '-efg', must be one of ['-efg'] # noqa: E501
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.value = value
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/enum_test.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/enum_test.py
new file mode 100644
index 00000000000..9c6fc29d458
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/enum_test.py
@@ -0,0 +1,188 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+try:
+ from petstore_api.models import outer_enum
+except ImportError:
+ outer_enum = sys.modules[
+ 'petstore_api.models.outer_enum']
+try:
+ from petstore_api.models import outer_enum_default_value
+except ImportError:
+ outer_enum_default_value = sys.modules[
+ 'petstore_api.models.outer_enum_default_value']
+try:
+ from petstore_api.models import outer_enum_integer
+except ImportError:
+ outer_enum_integer = sys.modules[
+ 'petstore_api.models.outer_enum_integer']
+try:
+ from petstore_api.models import outer_enum_integer_default_value
+except ImportError:
+ outer_enum_integer_default_value = sys.modules[
+ 'petstore_api.models.outer_enum_integer_default_value']
+
+
+class EnumTest(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('enum_string_required',): {
+ 'UPPER': "UPPER",
+ 'LOWER': "lower",
+ 'EMPTY': "",
+ },
+ ('enum_string',): {
+ 'UPPER': "UPPER",
+ 'LOWER': "lower",
+ 'EMPTY': "",
+ },
+ ('enum_integer',): {
+ '1': 1,
+ '-1': -1,
+ },
+ ('enum_number',): {
+ '1.1': 1.1,
+ '-1.2': -1.2,
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'enum_string_required': (str,), # noqa: E501
+ 'enum_string': (str,), # noqa: E501
+ 'enum_integer': (int,), # noqa: E501
+ 'enum_number': (float,), # noqa: E501
+ 'outer_enum': (outer_enum.OuterEnum,), # noqa: E501
+ 'outer_enum_integer': (outer_enum_integer.OuterEnumInteger,), # noqa: E501
+ 'outer_enum_default_value': (outer_enum_default_value.OuterEnumDefaultValue,), # noqa: E501
+ 'outer_enum_integer_default_value': (outer_enum_integer_default_value.OuterEnumIntegerDefaultValue,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'enum_string_required': 'enum_string_required', # noqa: E501
+ 'enum_string': 'enum_string', # noqa: E501
+ 'enum_integer': 'enum_integer', # noqa: E501
+ 'enum_number': 'enum_number', # noqa: E501
+ 'outer_enum': 'outerEnum', # noqa: E501
+ 'outer_enum_integer': 'outerEnumInteger', # noqa: E501
+ 'outer_enum_default_value': 'outerEnumDefaultValue', # noqa: E501
+ 'outer_enum_integer_default_value': 'outerEnumIntegerDefaultValue', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, enum_string_required, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """enum_test.EnumTest - a model defined in OpenAPI
+
+ Args:
+ enum_string_required (str):
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ enum_string (str): [optional] # noqa: E501
+ enum_integer (int): [optional] # noqa: E501
+ enum_number (float): [optional] # noqa: E501
+ outer_enum (outer_enum.OuterEnum): [optional] # noqa: E501
+ outer_enum_integer (outer_enum_integer.OuterEnumInteger): [optional] # noqa: E501
+ outer_enum_default_value (outer_enum_default_value.OuterEnumDefaultValue): [optional] # noqa: E501
+ outer_enum_integer_default_value (outer_enum_integer_default_value.OuterEnumIntegerDefaultValue): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.enum_string_required = enum_string_required
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/file.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/file.py
new file mode 100644
index 00000000000..ecc56b0cd00
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/file.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class File(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'source_uri': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'source_uri': 'sourceURI', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """file.File - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ source_uri (str): Test capitalization. [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/file_schema_test_class.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/file_schema_test_class.py
new file mode 100644
index 00000000000..f1abb16cbc3
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/file_schema_test_class.py
@@ -0,0 +1,135 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+try:
+ from petstore_api.models import file
+except ImportError:
+ file = sys.modules[
+ 'petstore_api.models.file']
+
+
+class FileSchemaTestClass(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'file': (file.File,), # noqa: E501
+ 'files': ([file.File],), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'file': 'file', # noqa: E501
+ 'files': 'files', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """file_schema_test_class.FileSchemaTestClass - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ file (file.File): [optional] # noqa: E501
+ files ([file.File]): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/foo.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/foo.py
new file mode 100644
index 00000000000..757cebbc1ed
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/foo.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class Foo(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'bar': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'bar': 'bar', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """foo.Foo - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ bar (str): [optional] if omitted the server will use the default value of 'bar' # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/format_test.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/format_test.py
new file mode 100644
index 00000000000..7486b49cfe4
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/format_test.py
@@ -0,0 +1,215 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class FormatTest(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ ('number',): {
+ 'inclusive_maximum': 543.2,
+ 'inclusive_minimum': 32.1,
+ },
+ ('password',): {
+ 'max_length': 64,
+ 'min_length': 10,
+ },
+ ('integer',): {
+ 'inclusive_maximum': 100,
+ 'inclusive_minimum': 10,
+ },
+ ('int32',): {
+ 'inclusive_maximum': 200,
+ 'inclusive_minimum': 20,
+ },
+ ('float',): {
+ 'inclusive_maximum': 987.6,
+ 'inclusive_minimum': 54.3,
+ },
+ ('double',): {
+ 'inclusive_maximum': 123.4,
+ 'inclusive_minimum': 67.8,
+ },
+ ('string',): {
+ 'regex': {
+ 'pattern': r'[a-z]', # noqa: E501
+ 'flags': (re.IGNORECASE)
+ },
+ },
+ ('pattern_with_digits',): {
+ 'regex': {
+ 'pattern': r'^\d{10}$', # noqa: E501
+ },
+ },
+ ('pattern_with_digits_and_delimiter',): {
+ 'regex': {
+ 'pattern': r'^image_\d{1,3}$', # noqa: E501
+ 'flags': (re.IGNORECASE)
+ },
+ },
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'number': (float,), # noqa: E501
+ 'byte': (str,), # noqa: E501
+ 'date': (date,), # noqa: E501
+ 'password': (str,), # noqa: E501
+ 'integer': (int,), # noqa: E501
+ 'int32': (int,), # noqa: E501
+ 'int64': (int,), # noqa: E501
+ 'float': (float,), # noqa: E501
+ 'double': (float,), # noqa: E501
+ 'string': (str,), # noqa: E501
+ 'binary': (file_type,), # noqa: E501
+ 'date_time': (datetime,), # noqa: E501
+ 'uuid': (str,), # noqa: E501
+ 'pattern_with_digits': (str,), # noqa: E501
+ 'pattern_with_digits_and_delimiter': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'number': 'number', # noqa: E501
+ 'byte': 'byte', # noqa: E501
+ 'date': 'date', # noqa: E501
+ 'password': 'password', # noqa: E501
+ 'integer': 'integer', # noqa: E501
+ 'int32': 'int32', # noqa: E501
+ 'int64': 'int64', # noqa: E501
+ 'float': 'float', # noqa: E501
+ 'double': 'double', # noqa: E501
+ 'string': 'string', # noqa: E501
+ 'binary': 'binary', # noqa: E501
+ 'date_time': 'dateTime', # noqa: E501
+ 'uuid': 'uuid', # noqa: E501
+ 'pattern_with_digits': 'pattern_with_digits', # noqa: E501
+ 'pattern_with_digits_and_delimiter': 'pattern_with_digits_and_delimiter', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, number, byte, date, password, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """format_test.FormatTest - a model defined in OpenAPI
+
+ Args:
+ number (float):
+ byte (str):
+ date (date):
+ password (str):
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ integer (int): [optional] # noqa: E501
+ int32 (int): [optional] # noqa: E501
+ int64 (int): [optional] # noqa: E501
+ float (float): [optional] # noqa: E501
+ double (float): [optional] # noqa: E501
+ string (str): [optional] # noqa: E501
+ binary (file_type): [optional] # noqa: E501
+ date_time (datetime): [optional] # noqa: E501
+ uuid (str): [optional] # noqa: E501
+ pattern_with_digits (str): A string that is a 10 digit number. Can have leading zeros.. [optional] # noqa: E501
+ pattern_with_digits_and_delimiter (str): A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.. [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.number = number
+ self.byte = byte
+ self.date = date
+ self.password = password
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/has_only_read_only.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/has_only_read_only.py
new file mode 100644
index 00000000000..90c4908aa89
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/has_only_read_only.py
@@ -0,0 +1,130 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class HasOnlyReadOnly(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'bar': (str,), # noqa: E501
+ 'foo': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'bar': 'bar', # noqa: E501
+ 'foo': 'foo', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """has_only_read_only.HasOnlyReadOnly - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ bar (str): [optional] # noqa: E501
+ foo (str): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/health_check_result.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/health_check_result.py
new file mode 100644
index 00000000000..04a46b759db
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/health_check_result.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class HealthCheckResult(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'nullable_message': (str, none_type,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'nullable_message': 'NullableMessage', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """health_check_result.HealthCheckResult - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ nullable_message (str, none_type): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object.py
new file mode 100644
index 00000000000..5d3ffe93c5a
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object.py
@@ -0,0 +1,130 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class InlineObject(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'name': (str,), # noqa: E501
+ 'status': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'name': 'name', # noqa: E501
+ 'status': 'status', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """inline_object.InlineObject - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ name (str): Updated name of the pet. [optional] # noqa: E501
+ status (str): Updated status of the pet. [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object1.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object1.py
new file mode 100644
index 00000000000..93c0ec594c5
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object1.py
@@ -0,0 +1,130 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class InlineObject1(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'additional_metadata': (str,), # noqa: E501
+ 'file': (file_type,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'additional_metadata': 'additionalMetadata', # noqa: E501
+ 'file': 'file', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """inline_object1.InlineObject1 - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ additional_metadata (str): Additional data to pass to server. [optional] # noqa: E501
+ file (file_type): file to upload. [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object2.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object2.py
new file mode 100644
index 00000000000..17ef9471842
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object2.py
@@ -0,0 +1,139 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class InlineObject2(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('enum_form_string_array',): {
+ '>': ">",
+ '$': "$",
+ },
+ ('enum_form_string',): {
+ '_ABC': "_abc",
+ '-EFG': "-efg",
+ '(XYZ)': "(xyz)",
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'enum_form_string_array': ([str],), # noqa: E501
+ 'enum_form_string': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'enum_form_string_array': 'enum_form_string_array', # noqa: E501
+ 'enum_form_string': 'enum_form_string', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """inline_object2.InlineObject2 - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ enum_form_string_array ([str]): Form parameter enum test (string array). [optional] # noqa: E501
+ enum_form_string (str): Form parameter enum test (string). [optional] if omitted the server will use the default value of '-efg' # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object3.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object3.py
new file mode 100644
index 00000000000..8fd4f33ead3
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object3.py
@@ -0,0 +1,205 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class InlineObject3(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ ('number',): {
+ 'inclusive_maximum': 543.2,
+ 'inclusive_minimum': 32.1,
+ },
+ ('double',): {
+ 'inclusive_maximum': 123.4,
+ 'inclusive_minimum': 67.8,
+ },
+ ('pattern_without_delimiter',): {
+ 'regex': {
+ 'pattern': r'^[A-Z].*', # noqa: E501
+ },
+ },
+ ('integer',): {
+ 'inclusive_maximum': 100,
+ 'inclusive_minimum': 10,
+ },
+ ('int32',): {
+ 'inclusive_maximum': 200,
+ 'inclusive_minimum': 20,
+ },
+ ('float',): {
+ 'inclusive_maximum': 987.6,
+ },
+ ('string',): {
+ 'regex': {
+ 'pattern': r'[a-z]', # noqa: E501
+ 'flags': (re.IGNORECASE)
+ },
+ },
+ ('password',): {
+ 'max_length': 64,
+ 'min_length': 10,
+ },
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'number': (float,), # noqa: E501
+ 'double': (float,), # noqa: E501
+ 'pattern_without_delimiter': (str,), # noqa: E501
+ 'byte': (str,), # noqa: E501
+ 'integer': (int,), # noqa: E501
+ 'int32': (int,), # noqa: E501
+ 'int64': (int,), # noqa: E501
+ 'float': (float,), # noqa: E501
+ 'string': (str,), # noqa: E501
+ 'binary': (file_type,), # noqa: E501
+ 'date': (date,), # noqa: E501
+ 'date_time': (datetime,), # noqa: E501
+ 'password': (str,), # noqa: E501
+ 'callback': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'number': 'number', # noqa: E501
+ 'double': 'double', # noqa: E501
+ 'pattern_without_delimiter': 'pattern_without_delimiter', # noqa: E501
+ 'byte': 'byte', # noqa: E501
+ 'integer': 'integer', # noqa: E501
+ 'int32': 'int32', # noqa: E501
+ 'int64': 'int64', # noqa: E501
+ 'float': 'float', # noqa: E501
+ 'string': 'string', # noqa: E501
+ 'binary': 'binary', # noqa: E501
+ 'date': 'date', # noqa: E501
+ 'date_time': 'dateTime', # noqa: E501
+ 'password': 'password', # noqa: E501
+ 'callback': 'callback', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, number, double, pattern_without_delimiter, byte, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """inline_object3.InlineObject3 - a model defined in OpenAPI
+
+ Args:
+ number (float): None
+ double (float): None
+ pattern_without_delimiter (str): None
+ byte (str): None
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ integer (int): None. [optional] # noqa: E501
+ int32 (int): None. [optional] # noqa: E501
+ int64 (int): None. [optional] # noqa: E501
+ float (float): None. [optional] # noqa: E501
+ string (str): None. [optional] # noqa: E501
+ binary (file_type): None. [optional] # noqa: E501
+ date (date): None. [optional] # noqa: E501
+ date_time (datetime): None. [optional] # noqa: E501
+ password (str): None. [optional] # noqa: E501
+ callback (str): None. [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.number = number
+ self.double = double
+ self.pattern_without_delimiter = pattern_without_delimiter
+ self.byte = byte
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object4.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object4.py
new file mode 100644
index 00000000000..ed787c2e253
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object4.py
@@ -0,0 +1,133 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class InlineObject4(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'param': (str,), # noqa: E501
+ 'param2': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'param': 'param', # noqa: E501
+ 'param2': 'param2', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, param, param2, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """inline_object4.InlineObject4 - a model defined in OpenAPI
+
+ Args:
+ param (str): field1
+ param2 (str): field2
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.param = param
+ self.param2 = param2
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object5.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object5.py
new file mode 100644
index 00000000000..44e1572bb3b
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_object5.py
@@ -0,0 +1,132 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class InlineObject5(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'required_file': (file_type,), # noqa: E501
+ 'additional_metadata': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'required_file': 'requiredFile', # noqa: E501
+ 'additional_metadata': 'additionalMetadata', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, required_file, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """inline_object5.InlineObject5 - a model defined in OpenAPI
+
+ Args:
+ required_file (file_type): file to upload
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ additional_metadata (str): Additional data to pass to server. [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.required_file = required_file
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_response_default.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_response_default.py
new file mode 100644
index 00000000000..0154a9e6c40
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/inline_response_default.py
@@ -0,0 +1,132 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+try:
+ from petstore_api.models import foo
+except ImportError:
+ foo = sys.modules[
+ 'petstore_api.models.foo']
+
+
+class InlineResponseDefault(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'string': (foo.Foo,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'string': 'string', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """inline_response_default.InlineResponseDefault - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ string (foo.Foo): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/list.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/list.py
new file mode 100644
index 00000000000..e6816fb51a0
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/list.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class List(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ '_123_list': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ '_123_list': '123-list', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """list.List - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _123_list (str): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/map_test.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/map_test.py
new file mode 100644
index 00000000000..e996e27991c
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/map_test.py
@@ -0,0 +1,145 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+try:
+ from petstore_api.models import string_boolean_map
+except ImportError:
+ string_boolean_map = sys.modules[
+ 'petstore_api.models.string_boolean_map']
+
+
+class MapTest(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('map_of_enum_string',): {
+ 'UPPER': "UPPER",
+ 'LOWER': "lower",
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'map_map_of_string': ({str: ({str: (str,)},)},), # noqa: E501
+ 'map_of_enum_string': ({str: (str,)},), # noqa: E501
+ 'direct_map': ({str: (bool,)},), # noqa: E501
+ 'indirect_map': (string_boolean_map.StringBooleanMap,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'map_map_of_string': 'map_map_of_string', # noqa: E501
+ 'map_of_enum_string': 'map_of_enum_string', # noqa: E501
+ 'direct_map': 'direct_map', # noqa: E501
+ 'indirect_map': 'indirect_map', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """map_test.MapTest - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ map_map_of_string ({str: ({str: (str,)},)}): [optional] # noqa: E501
+ map_of_enum_string ({str: (str,)}): [optional] # noqa: E501
+ direct_map ({str: (bool,)}): [optional] # noqa: E501
+ indirect_map (string_boolean_map.StringBooleanMap): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/mixed_properties_and_additional_properties_class.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/mixed_properties_and_additional_properties_class.py
new file mode 100644
index 00000000000..60b89762456
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/mixed_properties_and_additional_properties_class.py
@@ -0,0 +1,138 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+try:
+ from petstore_api.models import animal
+except ImportError:
+ animal = sys.modules[
+ 'petstore_api.models.animal']
+
+
+class MixedPropertiesAndAdditionalPropertiesClass(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'uuid': (str,), # noqa: E501
+ 'date_time': (datetime,), # noqa: E501
+ 'map': ({str: (animal.Animal,)},), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'uuid': 'uuid', # noqa: E501
+ 'date_time': 'dateTime', # noqa: E501
+ 'map': 'map', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """mixed_properties_and_additional_properties_class.MixedPropertiesAndAdditionalPropertiesClass - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ uuid (str): [optional] # noqa: E501
+ date_time (datetime): [optional] # noqa: E501
+ map ({str: (animal.Animal,)}): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/model200_response.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/model200_response.py
new file mode 100644
index 00000000000..cdfb0db9d60
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/model200_response.py
@@ -0,0 +1,130 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class Model200Response(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'name': (int,), # noqa: E501
+ '_class': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'name': 'name', # noqa: E501
+ '_class': 'class', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """model200_response.Model200Response - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ name (int): [optional] # noqa: E501
+ _class (str): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/model_return.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/model_return.py
new file mode 100644
index 00000000000..a145f8e706c
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/model_return.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class ModelReturn(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ '_return': (int,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ '_return': 'return', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """model_return.ModelReturn - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _return (int): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/name.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/name.py
new file mode 100644
index 00000000000..e3b0378bab6
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/name.py
@@ -0,0 +1,138 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class Name(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'name': (int,), # noqa: E501
+ 'snake_case': (int,), # noqa: E501
+ '_property': (str,), # noqa: E501
+ '_123_number': (int,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'name': 'name', # noqa: E501
+ 'snake_case': 'snake_case', # noqa: E501
+ '_property': 'property', # noqa: E501
+ '_123_number': '123Number', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, name, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """name.Name - a model defined in OpenAPI
+
+ Args:
+ name (int):
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ snake_case (int): [optional] # noqa: E501
+ _property (str): [optional] # noqa: E501
+ _123_number (int): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.name = name
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/nullable_class.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/nullable_class.py
new file mode 100644
index 00000000000..286f98f1a99
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/nullable_class.py
@@ -0,0 +1,160 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class NullableClass(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'integer_prop': (int, none_type,), # noqa: E501
+ 'number_prop': (float, none_type,), # noqa: E501
+ 'boolean_prop': (bool, none_type,), # noqa: E501
+ 'string_prop': (str, none_type,), # noqa: E501
+ 'date_prop': (date, none_type,), # noqa: E501
+ 'datetime_prop': (datetime, none_type,), # noqa: E501
+ 'array_nullable_prop': ([bool, date, datetime, dict, float, int, list, str], none_type,), # noqa: E501
+ 'array_and_items_nullable_prop': ([bool, date, datetime, dict, float, int, list, str, none_type], none_type,), # noqa: E501
+ 'array_items_nullable': ([bool, date, datetime, dict, float, int, list, str, none_type],), # noqa: E501
+ 'object_nullable_prop': ({str: (bool, date, datetime, dict, float, int, list, str,)}, none_type,), # noqa: E501
+ 'object_and_items_nullable_prop': ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type,), # noqa: E501
+ 'object_items_nullable': ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'integer_prop': 'integer_prop', # noqa: E501
+ 'number_prop': 'number_prop', # noqa: E501
+ 'boolean_prop': 'boolean_prop', # noqa: E501
+ 'string_prop': 'string_prop', # noqa: E501
+ 'date_prop': 'date_prop', # noqa: E501
+ 'datetime_prop': 'datetime_prop', # noqa: E501
+ 'array_nullable_prop': 'array_nullable_prop', # noqa: E501
+ 'array_and_items_nullable_prop': 'array_and_items_nullable_prop', # noqa: E501
+ 'array_items_nullable': 'array_items_nullable', # noqa: E501
+ 'object_nullable_prop': 'object_nullable_prop', # noqa: E501
+ 'object_and_items_nullable_prop': 'object_and_items_nullable_prop', # noqa: E501
+ 'object_items_nullable': 'object_items_nullable', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """nullable_class.NullableClass - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ integer_prop (int, none_type): [optional] # noqa: E501
+ number_prop (float, none_type): [optional] # noqa: E501
+ boolean_prop (bool, none_type): [optional] # noqa: E501
+ string_prop (str, none_type): [optional] # noqa: E501
+ date_prop (date, none_type): [optional] # noqa: E501
+ datetime_prop (datetime, none_type): [optional] # noqa: E501
+ array_nullable_prop ([bool, date, datetime, dict, float, int, list, str], none_type): [optional] # noqa: E501
+ array_and_items_nullable_prop ([bool, date, datetime, dict, float, int, list, str, none_type], none_type): [optional] # noqa: E501
+ array_items_nullable ([bool, date, datetime, dict, float, int, list, str, none_type]): [optional] # noqa: E501
+ object_nullable_prop ({str: (bool, date, datetime, dict, float, int, list, str,)}, none_type): [optional] # noqa: E501
+ object_and_items_nullable_prop ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type): [optional] # noqa: E501
+ object_items_nullable ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/number_only.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/number_only.py
new file mode 100644
index 00000000000..6a30356c5e9
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/number_only.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class NumberOnly(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'just_number': (float,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'just_number': 'JustNumber', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """number_only.NumberOnly - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ just_number (float): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/order.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/order.py
new file mode 100644
index 00000000000..6e4e8af79fa
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/order.py
@@ -0,0 +1,147 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class Order(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('status',): {
+ 'PLACED': "placed",
+ 'APPROVED': "approved",
+ 'DELIVERED': "delivered",
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'id': (int,), # noqa: E501
+ 'pet_id': (int,), # noqa: E501
+ 'quantity': (int,), # noqa: E501
+ 'ship_date': (datetime,), # noqa: E501
+ 'status': (str,), # noqa: E501
+ 'complete': (bool,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'id': 'id', # noqa: E501
+ 'pet_id': 'petId', # noqa: E501
+ 'quantity': 'quantity', # noqa: E501
+ 'ship_date': 'shipDate', # noqa: E501
+ 'status': 'status', # noqa: E501
+ 'complete': 'complete', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """order.Order - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ id (int): [optional] # noqa: E501
+ pet_id (int): [optional] # noqa: E501
+ quantity (int): [optional] # noqa: E501
+ ship_date (datetime): [optional] # noqa: E501
+ status (str): Order Status. [optional] # noqa: E501
+ complete (bool): [optional] if omitted the server will use the default value of False # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_composite.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_composite.py
new file mode 100644
index 00000000000..99b7406df90
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_composite.py
@@ -0,0 +1,133 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class OuterComposite(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'my_number': (float,), # noqa: E501
+ 'my_string': (str,), # noqa: E501
+ 'my_boolean': (bool,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'my_number': 'my_number', # noqa: E501
+ 'my_string': 'my_string', # noqa: E501
+ 'my_boolean': 'my_boolean', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """outer_composite.OuterComposite - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ my_number (float): [optional] # noqa: E501
+ my_string (str): [optional] # noqa: E501
+ my_boolean (bool): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum.py
new file mode 100644
index 00000000000..90f65c56cef
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class OuterEnum(ModelSimple):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('value',): {
+ 'None': None,
+ 'PLACED': "placed",
+ 'APPROVED': "approved",
+ 'DELIVERED': "delivered",
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'value': (str, none_type,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, value, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """outer_enum.OuterEnum - a model defined in OpenAPI
+
+ Args:
+ value (str, none_type):
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.value = value
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum_default_value.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum_default_value.py
new file mode 100644
index 00000000000..35f86a699e6
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum_default_value.py
@@ -0,0 +1,126 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class OuterEnumDefaultValue(ModelSimple):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('value',): {
+ 'PLACED': "placed",
+ 'APPROVED': "approved",
+ 'DELIVERED': "delivered",
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'value': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, value='placed', _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """outer_enum_default_value.OuterEnumDefaultValue - a model defined in OpenAPI
+
+ Args:
+
+ Keyword Args:
+ value (str): defaults to 'placed', must be one of ['placed'] # noqa: E501
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.value = value
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum_integer.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum_integer.py
new file mode 100644
index 00000000000..2a80e1133c8
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum_integer.py
@@ -0,0 +1,126 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class OuterEnumInteger(ModelSimple):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('value',): {
+ '0': 0,
+ '1': 1,
+ '2': 2,
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'value': (int,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, value, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """outer_enum_integer.OuterEnumInteger - a model defined in OpenAPI
+
+ Args:
+ value (int):
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.value = value
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum_integer_default_value.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum_integer_default_value.py
new file mode 100644
index 00000000000..3de92379cb3
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/outer_enum_integer_default_value.py
@@ -0,0 +1,126 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class OuterEnumIntegerDefaultValue(ModelSimple):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('value',): {
+ '0': 0,
+ '1': 1,
+ '2': 2,
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'value': (int,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, value=0, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """outer_enum_integer_default_value.OuterEnumIntegerDefaultValue - a model defined in OpenAPI
+
+ Args:
+
+ Keyword Args:
+ value (int): defaults to 0, must be one of [0] # noqa: E501
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.value = value
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/pet.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/pet.py
new file mode 100644
index 00000000000..11ffa6ff44f
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/pet.py
@@ -0,0 +1,160 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+try:
+ from petstore_api.models import category
+except ImportError:
+ category = sys.modules[
+ 'petstore_api.models.category']
+try:
+ from petstore_api.models import tag
+except ImportError:
+ tag = sys.modules[
+ 'petstore_api.models.tag']
+
+
+class Pet(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('status',): {
+ 'AVAILABLE': "available",
+ 'PENDING': "pending",
+ 'SOLD': "sold",
+ },
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'name': (str,), # noqa: E501
+ 'photo_urls': ([str],), # noqa: E501
+ 'id': (int,), # noqa: E501
+ 'category': (category.Category,), # noqa: E501
+ 'tags': ([tag.Tag],), # noqa: E501
+ 'status': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'name': 'name', # noqa: E501
+ 'photo_urls': 'photoUrls', # noqa: E501
+ 'id': 'id', # noqa: E501
+ 'category': 'category', # noqa: E501
+ 'tags': 'tags', # noqa: E501
+ 'status': 'status', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, name, photo_urls, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """pet.Pet - a model defined in OpenAPI
+
+ Args:
+ name (str):
+ photo_urls ([str]):
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ id (int): [optional] # noqa: E501
+ category (category.Category): [optional] # noqa: E501
+ tags ([tag.Tag]): [optional] # noqa: E501
+ status (str): pet status in the store. [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ self.name = name
+ self.photo_urls = photo_urls
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/read_only_first.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/read_only_first.py
new file mode 100644
index 00000000000..d2239f91920
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/read_only_first.py
@@ -0,0 +1,130 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class ReadOnlyFirst(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'bar': (str,), # noqa: E501
+ 'baz': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'bar': 'bar', # noqa: E501
+ 'baz': 'baz', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """read_only_first.ReadOnlyFirst - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ bar (str): [optional] # noqa: E501
+ baz (str): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/special_model_name.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/special_model_name.py
new file mode 100644
index 00000000000..607ddacbc05
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/special_model_name.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class SpecialModelName(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'special_property_name': (int,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'special_property_name': '$special[property.name]', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """special_model_name.SpecialModelName - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ special_property_name (int): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/string_boolean_map.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/string_boolean_map.py
new file mode 100644
index 00000000000..a5425b412ac
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/string_boolean_map.py
@@ -0,0 +1,124 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class StringBooleanMap(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = (bool,) # noqa: E501
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """string_boolean_map.StringBooleanMap - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/tag.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/tag.py
new file mode 100644
index 00000000000..ce06e651ee7
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/tag.py
@@ -0,0 +1,130 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class Tag(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'id': (int,), # noqa: E501
+ 'name': (str,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'id': 'id', # noqa: E501
+ 'name': 'name', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """tag.Tag - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ id (int): [optional] # noqa: E501
+ name (str): [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/user.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/user.py
new file mode 100644
index 00000000000..62c3bd48a16
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/user.py
@@ -0,0 +1,148 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+import re # noqa: F401
+import sys # noqa: F401
+
+import six # noqa: F401
+
+from petstore_api.model_utils import ( # noqa: F401
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ date,
+ datetime,
+ file_type,
+ int,
+ none_type,
+ str,
+ validate_get_composed_info,
+)
+
+
+class User(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ @staticmethod
+ def openapi_types():
+ """
+ This must be a class method so a model may have properties that are
+ of type self, this ensures that we don't create a cyclic import
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'id': (int,), # noqa: E501
+ 'username': (str,), # noqa: E501
+ 'first_name': (str,), # noqa: E501
+ 'last_name': (str,), # noqa: E501
+ 'email': (str,), # noqa: E501
+ 'password': (str,), # noqa: E501
+ 'phone': (str,), # noqa: E501
+ 'user_status': (int,), # noqa: E501
+ }
+
+ @staticmethod
+ def discriminator():
+ return None
+
+ attribute_map = {
+ 'id': 'id', # noqa: E501
+ 'username': 'username', # noqa: E501
+ 'first_name': 'firstName', # noqa: E501
+ 'last_name': 'lastName', # noqa: E501
+ 'email': 'email', # noqa: E501
+ 'password': 'password', # noqa: E501
+ 'phone': 'phone', # noqa: E501
+ 'user_status': 'userStatus', # noqa: E501
+ }
+
+ @staticmethod
+ def _composed_schemas():
+ return None
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_from_server',
+ '_path_to_item',
+ '_configuration',
+ ])
+
+ def __init__(self, _check_type=True, _from_server=False, _path_to_item=(), _configuration=None, **kwargs): # noqa: E501
+ """user.User - a model defined in OpenAPI
+
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _from_server (bool): True if the data is from the server
+ False if the data is from the client (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ id (int): [optional] # noqa: E501
+ username (str): [optional] # noqa: E501
+ first_name (str): [optional] # noqa: E501
+ last_name (str): [optional] # noqa: E501
+ email (str): [optional] # noqa: E501
+ password (str): [optional] # noqa: E501
+ phone (str): [optional] # noqa: E501
+ user_status (int): User Status. [optional] # noqa: E501
+ """
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._from_server = _from_server
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+
+ for var_name, var_value in six.iteritems(kwargs):
+ setattr(self, var_name, var_value)
diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/rest.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/rest.py
new file mode 100644
index 00000000000..7ed815b8a18
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/rest.py
@@ -0,0 +1,296 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import io
+import json
+import logging
+import re
+import ssl
+
+import certifi
+# python 2 and python 3 compatibility library
+import six
+from six.moves.urllib.parse import urlencode
+import urllib3
+
+from petstore_api.exceptions import ApiException, ApiValueError
+
+
+logger = logging.getLogger(__name__)
+
+
+class RESTResponse(io.IOBase):
+
+ def __init__(self, resp):
+ self.urllib3_response = resp
+ self.status = resp.status
+ self.reason = resp.reason
+ self.data = resp.data
+
+ def getheaders(self):
+ """Returns a dictionary of the response headers."""
+ return self.urllib3_response.getheaders()
+
+ def getheader(self, name, default=None):
+ """Returns a given response header."""
+ return self.urllib3_response.getheader(name, default)
+
+
+class RESTClientObject(object):
+
+ def __init__(self, configuration, pools_size=4, maxsize=None):
+ # urllib3.PoolManager will pass all kw parameters to connectionpool
+ # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501
+ # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501
+ # maxsize is the number of requests to host that are allowed in parallel # noqa: E501
+ # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501
+
+ # cert_reqs
+ if configuration.verify_ssl:
+ cert_reqs = ssl.CERT_REQUIRED
+ else:
+ cert_reqs = ssl.CERT_NONE
+
+ # ca_certs
+ if configuration.ssl_ca_cert:
+ ca_certs = configuration.ssl_ca_cert
+ else:
+ # if not set certificate file, use Mozilla's root certificates.
+ ca_certs = certifi.where()
+
+ addition_pool_args = {}
+ if configuration.assert_hostname is not None:
+ addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E501
+
+ if configuration.retries is not None:
+ addition_pool_args['retries'] = configuration.retries
+
+ if maxsize is None:
+ if configuration.connection_pool_maxsize is not None:
+ maxsize = configuration.connection_pool_maxsize
+ else:
+ maxsize = 4
+
+ # https pool manager
+ if configuration.proxy:
+ self.pool_manager = urllib3.ProxyManager(
+ num_pools=pools_size,
+ maxsize=maxsize,
+ cert_reqs=cert_reqs,
+ ca_certs=ca_certs,
+ cert_file=configuration.cert_file,
+ key_file=configuration.key_file,
+ proxy_url=configuration.proxy,
+ proxy_headers=configuration.proxy_headers,
+ **addition_pool_args
+ )
+ else:
+ self.pool_manager = urllib3.PoolManager(
+ num_pools=pools_size,
+ maxsize=maxsize,
+ cert_reqs=cert_reqs,
+ ca_certs=ca_certs,
+ cert_file=configuration.cert_file,
+ key_file=configuration.key_file,
+ **addition_pool_args
+ )
+
+ def request(self, method, url, query_params=None, headers=None,
+ body=None, post_params=None, _preload_content=True,
+ _request_timeout=None):
+ """Perform requests.
+
+ :param method: http request method
+ :param url: http request url
+ :param query_params: query parameters in the url
+ :param headers: http request headers
+ :param body: request json body, for `application/json`
+ :param post_params: request post parameters,
+ `application/x-www-form-urlencoded`
+ and `multipart/form-data`
+ :param _preload_content: if False, the urllib3.HTTPResponse object will
+ be returned without reading/decoding response
+ data. Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ """
+ method = method.upper()
+ assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT',
+ 'PATCH', 'OPTIONS']
+
+ if post_params and body:
+ raise ApiValueError(
+ "body parameter cannot be used with post_params parameter."
+ )
+
+ post_params = post_params or {}
+ headers = headers or {}
+
+ timeout = None
+ if _request_timeout:
+ if isinstance(_request_timeout, (int, ) if six.PY3 else (int, long)): # noqa: E501,F821
+ timeout = urllib3.Timeout(total=_request_timeout)
+ elif (isinstance(_request_timeout, tuple) and
+ len(_request_timeout) == 2):
+ timeout = urllib3.Timeout(
+ connect=_request_timeout[0], read=_request_timeout[1])
+
+ if 'Content-Type' not in headers:
+ headers['Content-Type'] = 'application/json'
+
+ try:
+ # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
+ if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:
+ if query_params:
+ url += '?' + urlencode(query_params)
+ if re.search('json', headers['Content-Type'], re.IGNORECASE):
+ request_body = None
+ if body is not None:
+ request_body = json.dumps(body)
+ r = self.pool_manager.request(
+ method, url,
+ body=request_body,
+ preload_content=_preload_content,
+ timeout=timeout,
+ headers=headers)
+ elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501
+ r = self.pool_manager.request(
+ method, url,
+ fields=post_params,
+ encode_multipart=False,
+ preload_content=_preload_content,
+ timeout=timeout,
+ headers=headers)
+ elif headers['Content-Type'] == 'multipart/form-data':
+ # must del headers['Content-Type'], or the correct
+ # Content-Type which generated by urllib3 will be
+ # overwritten.
+ del headers['Content-Type']
+ r = self.pool_manager.request(
+ method, url,
+ fields=post_params,
+ encode_multipart=True,
+ preload_content=_preload_content,
+ timeout=timeout,
+ headers=headers)
+ # Pass a `string` parameter directly in the body to support
+ # other content types than Json when `body` argument is
+ # provided in serialized form
+ elif isinstance(body, str) or isinstance(body, bytes):
+ request_body = body
+ r = self.pool_manager.request(
+ method, url,
+ body=request_body,
+ preload_content=_preload_content,
+ timeout=timeout,
+ headers=headers)
+ else:
+ # Cannot generate the request from given parameters
+ msg = """Cannot prepare a request message for provided
+ arguments. Please check that your arguments match
+ declared content type."""
+ raise ApiException(status=0, reason=msg)
+ # For `GET`, `HEAD`
+ else:
+ r = self.pool_manager.request(method, url,
+ fields=query_params,
+ preload_content=_preload_content,
+ timeout=timeout,
+ headers=headers)
+ except urllib3.exceptions.SSLError as e:
+ msg = "{0}\n{1}".format(type(e).__name__, str(e))
+ raise ApiException(status=0, reason=msg)
+
+ if _preload_content:
+ r = RESTResponse(r)
+
+ # In the python 3, the response.data is bytes.
+ # we need to decode it to string.
+ if six.PY3:
+ r.data = r.data.decode('utf8')
+
+ # log response body
+ logger.debug("response body: %s", r.data)
+
+ if not 200 <= r.status <= 299:
+ raise ApiException(http_resp=r)
+
+ return r
+
+ def GET(self, url, headers=None, query_params=None, _preload_content=True,
+ _request_timeout=None):
+ return self.request("GET", url,
+ headers=headers,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ query_params=query_params)
+
+ def HEAD(self, url, headers=None, query_params=None, _preload_content=True,
+ _request_timeout=None):
+ return self.request("HEAD", url,
+ headers=headers,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ query_params=query_params)
+
+ def OPTIONS(self, url, headers=None, query_params=None, post_params=None,
+ body=None, _preload_content=True, _request_timeout=None):
+ return self.request("OPTIONS", url,
+ headers=headers,
+ query_params=query_params,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+
+ def DELETE(self, url, headers=None, query_params=None, body=None,
+ _preload_content=True, _request_timeout=None):
+ return self.request("DELETE", url,
+ headers=headers,
+ query_params=query_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+
+ def POST(self, url, headers=None, query_params=None, post_params=None,
+ body=None, _preload_content=True, _request_timeout=None):
+ return self.request("POST", url,
+ headers=headers,
+ query_params=query_params,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+
+ def PUT(self, url, headers=None, query_params=None, post_params=None,
+ body=None, _preload_content=True, _request_timeout=None):
+ return self.request("PUT", url,
+ headers=headers,
+ query_params=query_params,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+
+ def PATCH(self, url, headers=None, query_params=None, post_params=None,
+ body=None, _preload_content=True, _request_timeout=None):
+ return self.request("PATCH", url,
+ headers=headers,
+ query_params=query_params,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
diff --git a/samples/openapi3/client/petstore/python-experimental/pom.xml b/samples/openapi3/client/petstore/python-experimental/pom.xml
new file mode 100644
index 00000000000..2016c019a95
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/pom.xml
@@ -0,0 +1,46 @@
+
+ 4.0.0
+ org.openapitools
+ PythonExperimentalOAS3PetstoreTests
+ pom
+ 1.0-SNAPSHOT
+ Python-Experimental OpenAPI3 Petstore Client
+
+
+
+ maven-dependency-plugin
+
+
+ package
+
+ copy-dependencies
+
+
+ ${project.build.directory}
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 1.2.1
+
+
+ test
+ integration-test
+
+ exec
+
+
+ make
+
+ test-all
+
+
+
+
+
+
+
+
diff --git a/samples/openapi3/client/petstore/python-experimental/requirements.txt b/samples/openapi3/client/petstore/python-experimental/requirements.txt
new file mode 100644
index 00000000000..eb358efd5bd
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/requirements.txt
@@ -0,0 +1,6 @@
+certifi >= 14.05.14
+future; python_version<="2.7"
+six >= 1.10
+python_dateutil >= 2.5.3
+setuptools >= 21.0.0
+urllib3 >= 1.15.1
diff --git a/samples/openapi3/client/petstore/python-experimental/setup.cfg b/samples/openapi3/client/petstore/python-experimental/setup.cfg
new file mode 100644
index 00000000000..11433ee875a
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/setup.cfg
@@ -0,0 +1,2 @@
+[flake8]
+max-line-length=99
diff --git a/samples/openapi3/client/petstore/python-experimental/setup.py b/samples/openapi3/client/petstore/python-experimental/setup.py
new file mode 100644
index 00000000000..f99ea80ad63
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/setup.py
@@ -0,0 +1,43 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from setuptools import setup, find_packages # noqa: H301
+
+NAME = "petstore-api"
+VERSION = "1.0.0"
+# To install the library, run the following
+#
+# python setup.py install
+#
+# prerequisite: setuptools
+# http://pypi.python.org/pypi/setuptools
+
+REQUIRES = ["urllib3 >= 1.15", "six >= 1.10", "certifi", "python-dateutil"]
+EXTRAS = {':python_version <= "2.7"': ['future']}
+
+setup(
+ name=NAME,
+ version=VERSION,
+ description="OpenAPI Petstore",
+ author="OpenAPI Generator community",
+ author_email="team@openapitools.org",
+ url="",
+ keywords=["OpenAPI", "OpenAPI-Generator", "OpenAPI Petstore"],
+ install_requires=REQUIRES,
+ extras_require=EXTRAS,
+ packages=find_packages(exclude=["test", "tests"]),
+ include_package_data=True,
+ license="Apache-2.0",
+ long_description="""\
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+ """
+)
diff --git a/samples/openapi3/client/petstore/python-experimental/test-requirements.txt b/samples/openapi3/client/petstore/python-experimental/test-requirements.txt
new file mode 100644
index 00000000000..06f7754d204
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test-requirements.txt
@@ -0,0 +1,4 @@
+pytest~=4.6.7 # needed for python 2.7+3.4
+pytest-cov>=2.8.1
+pytest-randomly==1.2.3 # needed for python 2.7+3.4
+mock; python_version<="2.7"
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/python-experimental/test/__init__.py b/samples/openapi3/client/petstore/python-experimental/test/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_additional_properties_class.py b/samples/openapi3/client/petstore/python-experimental/test/test_additional_properties_class.py
new file mode 100644
index 00000000000..279baa3a454
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_additional_properties_class.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestAdditionalPropertiesClass(unittest.TestCase):
+ """AdditionalPropertiesClass unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testAdditionalPropertiesClass(self):
+ """Test AdditionalPropertiesClass"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.AdditionalPropertiesClass() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_animal.py b/samples/openapi3/client/petstore/python-experimental/test/test_animal.py
new file mode 100644
index 00000000000..66f94c5eef4
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_animal.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestAnimal(unittest.TestCase):
+ """Animal unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testAnimal(self):
+ """Test Animal"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Animal() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_another_fake_api.py b/samples/openapi3/client/petstore/python-experimental/test/test_another_fake_api.py
new file mode 100644
index 00000000000..d95798cfc5a
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_another_fake_api.py
@@ -0,0 +1,40 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+from petstore_api.api.another_fake_api import AnotherFakeApi # noqa: E501
+from petstore_api.rest import ApiException
+
+
+class TestAnotherFakeApi(unittest.TestCase):
+ """AnotherFakeApi unit test stubs"""
+
+ def setUp(self):
+ self.api = petstore_api.api.another_fake_api.AnotherFakeApi() # noqa: E501
+
+ def tearDown(self):
+ pass
+
+ def test_call_123_test_special_tags(self):
+ """Test case for call_123_test_special_tags
+
+ To test special tags # noqa: E501
+ """
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_api_response.py b/samples/openapi3/client/petstore/python-experimental/test/test_api_response.py
new file mode 100644
index 00000000000..a253e6f364c
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_api_response.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestApiResponse(unittest.TestCase):
+ """ApiResponse unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testApiResponse(self):
+ """Test ApiResponse"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.ApiResponse() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_array_of_array_of_number_only.py b/samples/openapi3/client/petstore/python-experimental/test/test_array_of_array_of_number_only.py
new file mode 100644
index 00000000000..e47430f6861
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_array_of_array_of_number_only.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestArrayOfArrayOfNumberOnly(unittest.TestCase):
+ """ArrayOfArrayOfNumberOnly unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testArrayOfArrayOfNumberOnly(self):
+ """Test ArrayOfArrayOfNumberOnly"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.ArrayOfArrayOfNumberOnly() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_array_of_number_only.py b/samples/openapi3/client/petstore/python-experimental/test/test_array_of_number_only.py
new file mode 100644
index 00000000000..1a65f69b926
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_array_of_number_only.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestArrayOfNumberOnly(unittest.TestCase):
+ """ArrayOfNumberOnly unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testArrayOfNumberOnly(self):
+ """Test ArrayOfNumberOnly"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.ArrayOfNumberOnly() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_array_test.py b/samples/openapi3/client/petstore/python-experimental/test/test_array_test.py
new file mode 100644
index 00000000000..ac1b486bb74
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_array_test.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestArrayTest(unittest.TestCase):
+ """ArrayTest unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testArrayTest(self):
+ """Test ArrayTest"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.ArrayTest() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_capitalization.py b/samples/openapi3/client/petstore/python-experimental/test/test_capitalization.py
new file mode 100644
index 00000000000..1cb91380a76
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_capitalization.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestCapitalization(unittest.TestCase):
+ """Capitalization unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testCapitalization(self):
+ """Test Capitalization"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Capitalization() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_cat.py b/samples/openapi3/client/petstore/python-experimental/test/test_cat.py
new file mode 100644
index 00000000000..bd616261861
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_cat.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestCat(unittest.TestCase):
+ """Cat unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testCat(self):
+ """Test Cat"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Cat() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_cat_all_of.py b/samples/openapi3/client/petstore/python-experimental/test/test_cat_all_of.py
new file mode 100644
index 00000000000..136ed8da050
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_cat_all_of.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestCatAllOf(unittest.TestCase):
+ """CatAllOf unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testCatAllOf(self):
+ """Test CatAllOf"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.CatAllOf() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_category.py b/samples/openapi3/client/petstore/python-experimental/test/test_category.py
new file mode 100644
index 00000000000..c2ab96f823b
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_category.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestCategory(unittest.TestCase):
+ """Category unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testCategory(self):
+ """Test Category"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Category() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_class_model.py b/samples/openapi3/client/petstore/python-experimental/test/test_class_model.py
new file mode 100644
index 00000000000..3ac7e553042
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_class_model.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestClassModel(unittest.TestCase):
+ """ClassModel unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testClassModel(self):
+ """Test ClassModel"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.ClassModel() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_client.py b/samples/openapi3/client/petstore/python-experimental/test/test_client.py
new file mode 100644
index 00000000000..68319036344
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_client.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestClient(unittest.TestCase):
+ """Client unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testClient(self):
+ """Test Client"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Client() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_default_api.py b/samples/openapi3/client/petstore/python-experimental/test/test_default_api.py
new file mode 100644
index 00000000000..50e7c57bd0b
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_default_api.py
@@ -0,0 +1,39 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+from petstore_api.api.default_api import DefaultApi # noqa: E501
+from petstore_api.rest import ApiException
+
+
+class TestDefaultApi(unittest.TestCase):
+ """DefaultApi unit test stubs"""
+
+ def setUp(self):
+ self.api = petstore_api.api.default_api.DefaultApi() # noqa: E501
+
+ def tearDown(self):
+ pass
+
+ def test_foo_get(self):
+ """Test case for foo_get
+
+ """
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_dog.py b/samples/openapi3/client/petstore/python-experimental/test/test_dog.py
new file mode 100644
index 00000000000..37e9dd56d4f
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_dog.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestDog(unittest.TestCase):
+ """Dog unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testDog(self):
+ """Test Dog"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Dog() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_dog_all_of.py b/samples/openapi3/client/petstore/python-experimental/test/test_dog_all_of.py
new file mode 100644
index 00000000000..7f443eb9b60
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_dog_all_of.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestDogAllOf(unittest.TestCase):
+ """DogAllOf unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testDogAllOf(self):
+ """Test DogAllOf"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.DogAllOf() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_enum_arrays.py b/samples/openapi3/client/petstore/python-experimental/test/test_enum_arrays.py
new file mode 100644
index 00000000000..5f789287332
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_enum_arrays.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestEnumArrays(unittest.TestCase):
+ """EnumArrays unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testEnumArrays(self):
+ """Test EnumArrays"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.EnumArrays() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_enum_class.py b/samples/openapi3/client/petstore/python-experimental/test/test_enum_class.py
new file mode 100644
index 00000000000..f25e772ff26
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_enum_class.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestEnumClass(unittest.TestCase):
+ """EnumClass unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testEnumClass(self):
+ """Test EnumClass"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.EnumClass() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_enum_test.py b/samples/openapi3/client/petstore/python-experimental/test/test_enum_test.py
new file mode 100644
index 00000000000..8238fb7a3ab
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_enum_test.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestEnumTest(unittest.TestCase):
+ """EnumTest unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testEnumTest(self):
+ """Test EnumTest"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.EnumTest() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_fake_api.py b/samples/openapi3/client/petstore/python-experimental/test/test_fake_api.py
new file mode 100644
index 00000000000..581d1499eed
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_fake_api.py
@@ -0,0 +1,124 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+from petstore_api.api.fake_api import FakeApi # noqa: E501
+from petstore_api.rest import ApiException
+
+
+class TestFakeApi(unittest.TestCase):
+ """FakeApi unit test stubs"""
+
+ def setUp(self):
+ self.api = petstore_api.api.fake_api.FakeApi() # noqa: E501
+
+ def tearDown(self):
+ pass
+
+ def test_fake_health_get(self):
+ """Test case for fake_health_get
+
+ Health check endpoint # noqa: E501
+ """
+ pass
+
+ def test_fake_outer_boolean_serialize(self):
+ """Test case for fake_outer_boolean_serialize
+
+ """
+ pass
+
+ def test_fake_outer_composite_serialize(self):
+ """Test case for fake_outer_composite_serialize
+
+ """
+ pass
+
+ def test_fake_outer_number_serialize(self):
+ """Test case for fake_outer_number_serialize
+
+ """
+ pass
+
+ def test_fake_outer_string_serialize(self):
+ """Test case for fake_outer_string_serialize
+
+ """
+ pass
+
+ def test_test_body_with_file_schema(self):
+ """Test case for test_body_with_file_schema
+
+ """
+ pass
+
+ def test_test_body_with_query_params(self):
+ """Test case for test_body_with_query_params
+
+ """
+ pass
+
+ def test_test_client_model(self):
+ """Test case for test_client_model
+
+ To test \"client\" model # noqa: E501
+ """
+ pass
+
+ def test_test_endpoint_parameters(self):
+ """Test case for test_endpoint_parameters
+
+ Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 # noqa: E501
+ """
+ pass
+
+ def test_test_enum_parameters(self):
+ """Test case for test_enum_parameters
+
+ To test enum parameters # noqa: E501
+ """
+ pass
+
+ def test_test_group_parameters(self):
+ """Test case for test_group_parameters
+
+ Fake endpoint to test group parameters (optional) # noqa: E501
+ """
+ pass
+
+ def test_test_inline_additional_properties(self):
+ """Test case for test_inline_additional_properties
+
+ test inline additionalProperties # noqa: E501
+ """
+ pass
+
+ def test_test_json_form_data(self):
+ """Test case for test_json_form_data
+
+ test json serialization of form data # noqa: E501
+ """
+ pass
+
+ def test_test_query_parameter_collection_format(self):
+ """Test case for test_query_parameter_collection_format
+
+ """
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_fake_classname_tags_123_api.py b/samples/openapi3/client/petstore/python-experimental/test/test_fake_classname_tags_123_api.py
new file mode 100644
index 00000000000..f54e0d06644
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_fake_classname_tags_123_api.py
@@ -0,0 +1,40 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+from petstore_api.api.fake_classname_tags_123_api import FakeClassnameTags123Api # noqa: E501
+from petstore_api.rest import ApiException
+
+
+class TestFakeClassnameTags123Api(unittest.TestCase):
+ """FakeClassnameTags123Api unit test stubs"""
+
+ def setUp(self):
+ self.api = petstore_api.api.fake_classname_tags_123_api.FakeClassnameTags123Api() # noqa: E501
+
+ def tearDown(self):
+ pass
+
+ def test_test_classname(self):
+ """Test case for test_classname
+
+ To test class name in snake case # noqa: E501
+ """
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_file.py b/samples/openapi3/client/petstore/python-experimental/test/test_file.py
new file mode 100644
index 00000000000..af185e32e6e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_file.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestFile(unittest.TestCase):
+ """File unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testFile(self):
+ """Test File"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.File() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_file_schema_test_class.py b/samples/openapi3/client/petstore/python-experimental/test/test_file_schema_test_class.py
new file mode 100644
index 00000000000..c2de4e866cd
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_file_schema_test_class.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestFileSchemaTestClass(unittest.TestCase):
+ """FileSchemaTestClass unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testFileSchemaTestClass(self):
+ """Test FileSchemaTestClass"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.FileSchemaTestClass() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_foo.py b/samples/openapi3/client/petstore/python-experimental/test/test_foo.py
new file mode 100644
index 00000000000..c54feb98c25
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_foo.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestFoo(unittest.TestCase):
+ """Foo unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testFoo(self):
+ """Test Foo"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Foo() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_format_test.py b/samples/openapi3/client/petstore/python-experimental/test/test_format_test.py
new file mode 100644
index 00000000000..a9d39521e93
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_format_test.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestFormatTest(unittest.TestCase):
+ """FormatTest unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testFormatTest(self):
+ """Test FormatTest"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.FormatTest() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_has_only_read_only.py b/samples/openapi3/client/petstore/python-experimental/test/test_has_only_read_only.py
new file mode 100644
index 00000000000..e042faf7c94
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_has_only_read_only.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestHasOnlyReadOnly(unittest.TestCase):
+ """HasOnlyReadOnly unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testHasOnlyReadOnly(self):
+ """Test HasOnlyReadOnly"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.HasOnlyReadOnly() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_health_check_result.py b/samples/openapi3/client/petstore/python-experimental/test/test_health_check_result.py
new file mode 100644
index 00000000000..ebcc32f4396
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_health_check_result.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestHealthCheckResult(unittest.TestCase):
+ """HealthCheckResult unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testHealthCheckResult(self):
+ """Test HealthCheckResult"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.HealthCheckResult() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_inline_object.py b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object.py
new file mode 100644
index 00000000000..fc2e177006a
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestInlineObject(unittest.TestCase):
+ """InlineObject unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testInlineObject(self):
+ """Test InlineObject"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.InlineObject() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_inline_object1.py b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object1.py
new file mode 100644
index 00000000000..12a62225def
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object1.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestInlineObject1(unittest.TestCase):
+ """InlineObject1 unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testInlineObject1(self):
+ """Test InlineObject1"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.InlineObject1() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_inline_object2.py b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object2.py
new file mode 100644
index 00000000000..1651197f964
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object2.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestInlineObject2(unittest.TestCase):
+ """InlineObject2 unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testInlineObject2(self):
+ """Test InlineObject2"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.InlineObject2() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_inline_object3.py b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object3.py
new file mode 100644
index 00000000000..2efbae377dd
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object3.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestInlineObject3(unittest.TestCase):
+ """InlineObject3 unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testInlineObject3(self):
+ """Test InlineObject3"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.InlineObject3() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_inline_object4.py b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object4.py
new file mode 100644
index 00000000000..4f74d9cacac
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object4.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestInlineObject4(unittest.TestCase):
+ """InlineObject4 unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testInlineObject4(self):
+ """Test InlineObject4"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.InlineObject4() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_inline_object5.py b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object5.py
new file mode 100644
index 00000000000..895cc44ea29
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_inline_object5.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestInlineObject5(unittest.TestCase):
+ """InlineObject5 unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testInlineObject5(self):
+ """Test InlineObject5"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.InlineObject5() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_inline_response_default.py b/samples/openapi3/client/petstore/python-experimental/test/test_inline_response_default.py
new file mode 100644
index 00000000000..ecdd05f72fa
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_inline_response_default.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestInlineResponseDefault(unittest.TestCase):
+ """InlineResponseDefault unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testInlineResponseDefault(self):
+ """Test InlineResponseDefault"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.InlineResponseDefault() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_list.py b/samples/openapi3/client/petstore/python-experimental/test/test_list.py
new file mode 100644
index 00000000000..29979911a8e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_list.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestList(unittest.TestCase):
+ """List unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testList(self):
+ """Test List"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.List() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_map_test.py b/samples/openapi3/client/petstore/python-experimental/test/test_map_test.py
new file mode 100644
index 00000000000..8592f21949b
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_map_test.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestMapTest(unittest.TestCase):
+ """MapTest unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testMapTest(self):
+ """Test MapTest"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.MapTest() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_mixed_properties_and_additional_properties_class.py b/samples/openapi3/client/petstore/python-experimental/test/test_mixed_properties_and_additional_properties_class.py
new file mode 100644
index 00000000000..a4e89d3e8c0
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_mixed_properties_and_additional_properties_class.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestMixedPropertiesAndAdditionalPropertiesClass(unittest.TestCase):
+ """MixedPropertiesAndAdditionalPropertiesClass unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testMixedPropertiesAndAdditionalPropertiesClass(self):
+ """Test MixedPropertiesAndAdditionalPropertiesClass"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.MixedPropertiesAndAdditionalPropertiesClass() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_model200_response.py b/samples/openapi3/client/petstore/python-experimental/test/test_model200_response.py
new file mode 100644
index 00000000000..149629fe1e8
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_model200_response.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestModel200Response(unittest.TestCase):
+ """Model200Response unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testModel200Response(self):
+ """Test Model200Response"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Model200Response() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_model_return.py b/samples/openapi3/client/petstore/python-experimental/test/test_model_return.py
new file mode 100644
index 00000000000..e48b2c47983
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_model_return.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestModelReturn(unittest.TestCase):
+ """ModelReturn unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testModelReturn(self):
+ """Test ModelReturn"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.ModelReturn() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_name.py b/samples/openapi3/client/petstore/python-experimental/test/test_name.py
new file mode 100644
index 00000000000..1f6407683b2
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_name.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestName(unittest.TestCase):
+ """Name unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testName(self):
+ """Test Name"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Name() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_nullable_class.py b/samples/openapi3/client/petstore/python-experimental/test/test_nullable_class.py
new file mode 100644
index 00000000000..8af2cb8447e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_nullable_class.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestNullableClass(unittest.TestCase):
+ """NullableClass unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testNullableClass(self):
+ """Test NullableClass"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.NullableClass() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_number_only.py b/samples/openapi3/client/petstore/python-experimental/test/test_number_only.py
new file mode 100644
index 00000000000..732baf4b84e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_number_only.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestNumberOnly(unittest.TestCase):
+ """NumberOnly unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testNumberOnly(self):
+ """Test NumberOnly"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.NumberOnly() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_order.py b/samples/openapi3/client/petstore/python-experimental/test/test_order.py
new file mode 100644
index 00000000000..10ce38e954e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_order.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestOrder(unittest.TestCase):
+ """Order unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testOrder(self):
+ """Test Order"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Order() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_outer_composite.py b/samples/openapi3/client/petstore/python-experimental/test/test_outer_composite.py
new file mode 100644
index 00000000000..c191d04ec6b
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_outer_composite.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestOuterComposite(unittest.TestCase):
+ """OuterComposite unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testOuterComposite(self):
+ """Test OuterComposite"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.OuterComposite() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum.py b/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum.py
new file mode 100644
index 00000000000..ad8f7cc68b2
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestOuterEnum(unittest.TestCase):
+ """OuterEnum unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testOuterEnum(self):
+ """Test OuterEnum"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.OuterEnum() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum_default_value.py b/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum_default_value.py
new file mode 100644
index 00000000000..80c9534a88e
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum_default_value.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestOuterEnumDefaultValue(unittest.TestCase):
+ """OuterEnumDefaultValue unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testOuterEnumDefaultValue(self):
+ """Test OuterEnumDefaultValue"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.OuterEnumDefaultValue() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum_integer.py b/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum_integer.py
new file mode 100644
index 00000000000..60724eefd71
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum_integer.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestOuterEnumInteger(unittest.TestCase):
+ """OuterEnumInteger unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testOuterEnumInteger(self):
+ """Test OuterEnumInteger"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.OuterEnumInteger() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum_integer_default_value.py b/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum_integer_default_value.py
new file mode 100644
index 00000000000..8eca8fa69ac
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_outer_enum_integer_default_value.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestOuterEnumIntegerDefaultValue(unittest.TestCase):
+ """OuterEnumIntegerDefaultValue unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testOuterEnumIntegerDefaultValue(self):
+ """Test OuterEnumIntegerDefaultValue"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.OuterEnumIntegerDefaultValue() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_pet.py b/samples/openapi3/client/petstore/python-experimental/test/test_pet.py
new file mode 100644
index 00000000000..db9e3729f50
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_pet.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestPet(unittest.TestCase):
+ """Pet unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testPet(self):
+ """Test Pet"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Pet() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_pet_api.py b/samples/openapi3/client/petstore/python-experimental/test/test_pet_api.py
new file mode 100644
index 00000000000..77665df879f
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_pet_api.py
@@ -0,0 +1,96 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+from petstore_api.api.pet_api import PetApi # noqa: E501
+from petstore_api.rest import ApiException
+
+
+class TestPetApi(unittest.TestCase):
+ """PetApi unit test stubs"""
+
+ def setUp(self):
+ self.api = petstore_api.api.pet_api.PetApi() # noqa: E501
+
+ def tearDown(self):
+ pass
+
+ def test_add_pet(self):
+ """Test case for add_pet
+
+ Add a new pet to the store # noqa: E501
+ """
+ pass
+
+ def test_delete_pet(self):
+ """Test case for delete_pet
+
+ Deletes a pet # noqa: E501
+ """
+ pass
+
+ def test_find_pets_by_status(self):
+ """Test case for find_pets_by_status
+
+ Finds Pets by status # noqa: E501
+ """
+ pass
+
+ def test_find_pets_by_tags(self):
+ """Test case for find_pets_by_tags
+
+ Finds Pets by tags # noqa: E501
+ """
+ pass
+
+ def test_get_pet_by_id(self):
+ """Test case for get_pet_by_id
+
+ Find pet by ID # noqa: E501
+ """
+ pass
+
+ def test_update_pet(self):
+ """Test case for update_pet
+
+ Update an existing pet # noqa: E501
+ """
+ pass
+
+ def test_update_pet_with_form(self):
+ """Test case for update_pet_with_form
+
+ Updates a pet in the store with form data # noqa: E501
+ """
+ pass
+
+ def test_upload_file(self):
+ """Test case for upload_file
+
+ uploads an image # noqa: E501
+ """
+ pass
+
+ def test_upload_file_with_required_file(self):
+ """Test case for upload_file_with_required_file
+
+ uploads an image (required) # noqa: E501
+ """
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_read_only_first.py b/samples/openapi3/client/petstore/python-experimental/test/test_read_only_first.py
new file mode 100644
index 00000000000..553768f3303
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_read_only_first.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestReadOnlyFirst(unittest.TestCase):
+ """ReadOnlyFirst unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testReadOnlyFirst(self):
+ """Test ReadOnlyFirst"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.ReadOnlyFirst() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_special_model_name.py b/samples/openapi3/client/petstore/python-experimental/test/test_special_model_name.py
new file mode 100644
index 00000000000..7de520d9cef
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_special_model_name.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestSpecialModelName(unittest.TestCase):
+ """SpecialModelName unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testSpecialModelName(self):
+ """Test SpecialModelName"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.SpecialModelName() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_store_api.py b/samples/openapi3/client/petstore/python-experimental/test/test_store_api.py
new file mode 100644
index 00000000000..81848d24a67
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_store_api.py
@@ -0,0 +1,61 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+from petstore_api.api.store_api import StoreApi # noqa: E501
+from petstore_api.rest import ApiException
+
+
+class TestStoreApi(unittest.TestCase):
+ """StoreApi unit test stubs"""
+
+ def setUp(self):
+ self.api = petstore_api.api.store_api.StoreApi() # noqa: E501
+
+ def tearDown(self):
+ pass
+
+ def test_delete_order(self):
+ """Test case for delete_order
+
+ Delete purchase order by ID # noqa: E501
+ """
+ pass
+
+ def test_get_inventory(self):
+ """Test case for get_inventory
+
+ Returns pet inventories by status # noqa: E501
+ """
+ pass
+
+ def test_get_order_by_id(self):
+ """Test case for get_order_by_id
+
+ Find purchase order by ID # noqa: E501
+ """
+ pass
+
+ def test_place_order(self):
+ """Test case for place_order
+
+ Place an order for a pet # noqa: E501
+ """
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_string_boolean_map.py b/samples/openapi3/client/petstore/python-experimental/test/test_string_boolean_map.py
new file mode 100644
index 00000000000..af071721eba
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_string_boolean_map.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestStringBooleanMap(unittest.TestCase):
+ """StringBooleanMap unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testStringBooleanMap(self):
+ """Test StringBooleanMap"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.StringBooleanMap() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_tag.py b/samples/openapi3/client/petstore/python-experimental/test/test_tag.py
new file mode 100644
index 00000000000..27c2be5391a
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_tag.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestTag(unittest.TestCase):
+ """Tag unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testTag(self):
+ """Test Tag"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.Tag() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_user.py b/samples/openapi3/client/petstore/python-experimental/test/test_user.py
new file mode 100644
index 00000000000..3df641e29b6
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_user.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+
+
+class TestUser(unittest.TestCase):
+ """User unit test stubs"""
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def testUser(self):
+ """Test User"""
+ # FIXME: construct object with mandatory attributes with example values
+ # model = petstore_api.User() # noqa: E501
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_user_api.py b/samples/openapi3/client/petstore/python-experimental/test/test_user_api.py
new file mode 100644
index 00000000000..6df730fba2b
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test/test_user_api.py
@@ -0,0 +1,89 @@
+# coding: utf-8
+
+"""
+ OpenAPI Petstore
+
+ This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+from __future__ import absolute_import
+
+import unittest
+
+import petstore_api
+from petstore_api.api.user_api import UserApi # noqa: E501
+from petstore_api.rest import ApiException
+
+
+class TestUserApi(unittest.TestCase):
+ """UserApi unit test stubs"""
+
+ def setUp(self):
+ self.api = petstore_api.api.user_api.UserApi() # noqa: E501
+
+ def tearDown(self):
+ pass
+
+ def test_create_user(self):
+ """Test case for create_user
+
+ Create user # noqa: E501
+ """
+ pass
+
+ def test_create_users_with_array_input(self):
+ """Test case for create_users_with_array_input
+
+ Creates list of users with given input array # noqa: E501
+ """
+ pass
+
+ def test_create_users_with_list_input(self):
+ """Test case for create_users_with_list_input
+
+ Creates list of users with given input array # noqa: E501
+ """
+ pass
+
+ def test_delete_user(self):
+ """Test case for delete_user
+
+ Delete user # noqa: E501
+ """
+ pass
+
+ def test_get_user_by_name(self):
+ """Test case for get_user_by_name
+
+ Get user by user name # noqa: E501
+ """
+ pass
+
+ def test_login_user(self):
+ """Test case for login_user
+
+ Logs user into the system # noqa: E501
+ """
+ pass
+
+ def test_logout_user(self):
+ """Test case for logout_user
+
+ Logs out current logged in user session # noqa: E501
+ """
+ pass
+
+ def test_update_user(self):
+ """Test case for update_user
+
+ Updated user # noqa: E501
+ """
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/samples/openapi3/client/petstore/python-experimental/test_python2.sh b/samples/openapi3/client/petstore/python-experimental/test_python2.sh
new file mode 100755
index 00000000000..b2f344ec897
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test_python2.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+REQUIREMENTS_FILE=dev-requirements.txt
+REQUIREMENTS_OUT=dev-requirements.txt.log
+SETUP_OUT=*.egg-info
+VENV=venv
+DEACTIVE=false
+
+export LC_ALL=en_US.UTF-8
+export LANG=en_US.UTF-8
+PYTHONPATH="$(which python)"
+
+### set virtualenv
+if [ -z "$VIRTUAL_ENV" ]; then
+ virtualenv $VENV --python=$PYTHONPATH --no-site-packages --always-copy
+ source $VENV/bin/activate
+ DEACTIVE=true
+fi
+
+### install dependencies
+pip install -r $REQUIREMENTS_FILE | tee -a $REQUIREMENTS_OUT
+
+### run tests
+tox -e py27 || exit 1
+
+### static analysis of code
+flake8 --show-source petstore_api/
+
+### deactivate virtualenv
+#if [ $DEACTIVE == true ]; then
+# deactivate
+#fi
+
diff --git a/samples/openapi3/client/petstore/python-experimental/test_python2_and_3.sh b/samples/openapi3/client/petstore/python-experimental/test_python2_and_3.sh
new file mode 100755
index 00000000000..3205dfd07da
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/test_python2_and_3.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+REQUIREMENTS_FILE=dev-requirements.txt
+REQUIREMENTS_OUT=dev-requirements.txt.log
+SETUP_OUT=*.egg-info
+VENV=venv
+DEACTIVE=false
+
+export LC_ALL=en_US.UTF-8
+export LANG=en_US.UTF-8
+
+### set virtualenv
+if [ -z "$VIRTUAL_ENV" ]; then
+ virtualenv $VENV --no-site-packages --always-copy
+ source $VENV/bin/activate
+ DEACTIVE=true
+fi
+
+### install dependencies
+pip install -r $REQUIREMENTS_FILE | tee -a $REQUIREMENTS_OUT
+
+### run tests
+tox || exit 1
+
+### static analysis of code
+flake8 --show-source petstore_api/
+
+### deactivate virtualenv
+#if [ $DEACTIVE == true ]; then
+# deactivate
+#fi
diff --git a/samples/openapi3/client/petstore/python-experimental/tox.ini b/samples/openapi3/client/petstore/python-experimental/tox.ini
new file mode 100644
index 00000000000..169d895329b
--- /dev/null
+++ b/samples/openapi3/client/petstore/python-experimental/tox.ini
@@ -0,0 +1,9 @@
+[tox]
+envlist = py27, py3
+
+[testenv]
+deps=-r{toxinidir}/requirements.txt
+ -r{toxinidir}/test-requirements.txt
+
+commands=
+ pytest --cov=petstore_api
diff --git a/samples/openapi3/server/petstore/python-flask-python2/openapi_server/openapi/openapi.yaml b/samples/openapi3/server/petstore/python-flask-python2/openapi_server/openapi/openapi.yaml
index aa04dfb3cb1..922e0b4af69 100644
--- a/samples/openapi3/server/petstore/python-flask-python2/openapi_server/openapi/openapi.yaml
+++ b/samples/openapi3/server/petstore/python-flask-python2/openapi_server/openapi/openapi.yaml
@@ -26,7 +26,7 @@ paths:
requestBody:
$ref: '#/components/requestBodies/Pet'
responses:
- 405:
+ "405":
description: Invalid input
security:
- petstore_auth:
@@ -41,11 +41,11 @@ paths:
requestBody:
$ref: '#/components/requestBodies/Pet'
responses:
- 400:
+ "400":
description: Invalid ID supplied
- 404:
+ "404":
description: Pet not found
- 405:
+ "405":
description: Validation exception
security:
- petstore_auth:
@@ -76,7 +76,7 @@ paths:
type: array
style: form
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -89,7 +89,7 @@ paths:
$ref: '#/components/schemas/Pet'
type: array
description: successful operation
- 400:
+ "400":
description: Invalid status value
security:
- petstore_auth:
@@ -116,7 +116,7 @@ paths:
type: array
style: form
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -129,7 +129,7 @@ paths:
$ref: '#/components/schemas/Pet'
type: array
description: successful operation
- 400:
+ "400":
description: Invalid tag value
security:
- petstore_auth:
@@ -159,7 +159,7 @@ paths:
type: integer
style: simple
responses:
- 400:
+ "400":
description: Invalid pet value
security:
- petstore_auth:
@@ -183,7 +183,7 @@ paths:
type: integer
style: simple
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -192,9 +192,9 @@ paths:
schema:
$ref: '#/components/schemas/Pet'
description: successful operation
- 400:
+ "400":
description: Invalid ID supplied
- 404:
+ "404":
description: Pet not found
security:
- api_key: []
@@ -228,7 +228,7 @@ paths:
type: string
type: object
responses:
- 405:
+ "405":
description: Invalid input
security:
- petstore_auth:
@@ -266,7 +266,7 @@ paths:
type: string
type: object
responses:
- 200:
+ "200":
content:
application/json:
schema:
@@ -285,7 +285,7 @@ paths:
description: Returns a map of status codes to quantities
operationId: get_inventory
responses:
- 200:
+ "200":
content:
application/json:
schema:
@@ -311,7 +311,7 @@ paths:
description: order placed for purchasing the pet
required: true
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -320,7 +320,7 @@ paths:
schema:
$ref: '#/components/schemas/Order'
description: successful operation
- 400:
+ "400":
description: Invalid Order
summary: Place an order for a pet
tags:
@@ -341,9 +341,9 @@ paths:
type: string
style: simple
responses:
- 400:
+ "400":
description: Invalid ID supplied
- 404:
+ "404":
description: Order not found
summary: Delete purchase order by ID
tags:
@@ -366,7 +366,7 @@ paths:
type: integer
style: simple
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -375,9 +375,9 @@ paths:
schema:
$ref: '#/components/schemas/Order'
description: successful operation
- 400:
+ "400":
description: Invalid ID supplied
- 404:
+ "404":
description: Order not found
summary: Find purchase order by ID
tags:
@@ -453,7 +453,7 @@ paths:
type: string
style: form
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -485,7 +485,7 @@ paths:
format: date-time
type: string
style: simple
- 400:
+ "400":
description: Invalid username/password supplied
summary: Logs user into the system
tags:
@@ -517,9 +517,9 @@ paths:
type: string
style: simple
responses:
- 400:
+ "400":
description: Invalid username supplied
- 404:
+ "404":
description: User not found
security:
- auth_cookie: []
@@ -539,7 +539,7 @@ paths:
type: string
style: simple
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -548,9 +548,9 @@ paths:
schema:
$ref: '#/components/schemas/User'
description: successful operation
- 400:
+ "400":
description: Invalid username supplied
- 404:
+ "404":
description: User not found
summary: Get user by user name
tags:
@@ -576,9 +576,9 @@ paths:
description: Updated user object
required: true
responses:
- 400:
+ "400":
description: Invalid user supplied
- 404:
+ "404":
description: User not found
security:
- auth_cookie: []
diff --git a/samples/openapi3/server/petstore/python-flask/openapi_server/openapi/openapi.yaml b/samples/openapi3/server/petstore/python-flask/openapi_server/openapi/openapi.yaml
index aa04dfb3cb1..922e0b4af69 100644
--- a/samples/openapi3/server/petstore/python-flask/openapi_server/openapi/openapi.yaml
+++ b/samples/openapi3/server/petstore/python-flask/openapi_server/openapi/openapi.yaml
@@ -26,7 +26,7 @@ paths:
requestBody:
$ref: '#/components/requestBodies/Pet'
responses:
- 405:
+ "405":
description: Invalid input
security:
- petstore_auth:
@@ -41,11 +41,11 @@ paths:
requestBody:
$ref: '#/components/requestBodies/Pet'
responses:
- 400:
+ "400":
description: Invalid ID supplied
- 404:
+ "404":
description: Pet not found
- 405:
+ "405":
description: Validation exception
security:
- petstore_auth:
@@ -76,7 +76,7 @@ paths:
type: array
style: form
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -89,7 +89,7 @@ paths:
$ref: '#/components/schemas/Pet'
type: array
description: successful operation
- 400:
+ "400":
description: Invalid status value
security:
- petstore_auth:
@@ -116,7 +116,7 @@ paths:
type: array
style: form
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -129,7 +129,7 @@ paths:
$ref: '#/components/schemas/Pet'
type: array
description: successful operation
- 400:
+ "400":
description: Invalid tag value
security:
- petstore_auth:
@@ -159,7 +159,7 @@ paths:
type: integer
style: simple
responses:
- 400:
+ "400":
description: Invalid pet value
security:
- petstore_auth:
@@ -183,7 +183,7 @@ paths:
type: integer
style: simple
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -192,9 +192,9 @@ paths:
schema:
$ref: '#/components/schemas/Pet'
description: successful operation
- 400:
+ "400":
description: Invalid ID supplied
- 404:
+ "404":
description: Pet not found
security:
- api_key: []
@@ -228,7 +228,7 @@ paths:
type: string
type: object
responses:
- 405:
+ "405":
description: Invalid input
security:
- petstore_auth:
@@ -266,7 +266,7 @@ paths:
type: string
type: object
responses:
- 200:
+ "200":
content:
application/json:
schema:
@@ -285,7 +285,7 @@ paths:
description: Returns a map of status codes to quantities
operationId: get_inventory
responses:
- 200:
+ "200":
content:
application/json:
schema:
@@ -311,7 +311,7 @@ paths:
description: order placed for purchasing the pet
required: true
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -320,7 +320,7 @@ paths:
schema:
$ref: '#/components/schemas/Order'
description: successful operation
- 400:
+ "400":
description: Invalid Order
summary: Place an order for a pet
tags:
@@ -341,9 +341,9 @@ paths:
type: string
style: simple
responses:
- 400:
+ "400":
description: Invalid ID supplied
- 404:
+ "404":
description: Order not found
summary: Delete purchase order by ID
tags:
@@ -366,7 +366,7 @@ paths:
type: integer
style: simple
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -375,9 +375,9 @@ paths:
schema:
$ref: '#/components/schemas/Order'
description: successful operation
- 400:
+ "400":
description: Invalid ID supplied
- 404:
+ "404":
description: Order not found
summary: Find purchase order by ID
tags:
@@ -453,7 +453,7 @@ paths:
type: string
style: form
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -485,7 +485,7 @@ paths:
format: date-time
type: string
style: simple
- 400:
+ "400":
description: Invalid username/password supplied
summary: Logs user into the system
tags:
@@ -517,9 +517,9 @@ paths:
type: string
style: simple
responses:
- 400:
+ "400":
description: Invalid username supplied
- 404:
+ "404":
description: User not found
security:
- auth_cookie: []
@@ -539,7 +539,7 @@ paths:
type: string
style: simple
responses:
- 200:
+ "200":
content:
application/xml:
schema:
@@ -548,9 +548,9 @@ paths:
schema:
$ref: '#/components/schemas/User'
description: successful operation
- 400:
+ "400":
description: Invalid username supplied
- 404:
+ "404":
description: User not found
summary: Get user by user name
tags:
@@ -576,9 +576,9 @@ paths:
description: Updated user object
required: true
responses:
- 400:
+ "400":
description: Invalid user supplied
- 404:
+ "404":
description: User not found
security:
- auth_cookie: []