forked from loafle/openapi-generator-original
[BUG][python] Support named arrays (#6493)
* [python] Support named arrays * Fix named array type * Use ModelSimple * Reset samples * Regenerated * Animal farm test * Array of enums * Clean-up * Clean-up * Clean-up * Fix array type generation * simplify * array model is not alias * Array model has one value field * ensure up-to-date * ./bin/utils/ensure-up-to-date --batch * Solve issue with missing import for array model * regenerate
This commit is contained in:
@@ -421,14 +421,12 @@ public class PythonClientExperimentalCodegen extends PythonClientCodegen {
|
||||
|
||||
Schema modelSchema = ModelUtils.getSchema(this.openAPI, cm.name);
|
||||
CodegenProperty modelProperty = fromProperty("value", modelSchema);
|
||||
|
||||
if (cm.isEnum || cm.isAlias) {
|
||||
if (!modelProperty.isEnum && !modelProperty.hasValidation) {
|
||||
if (!modelProperty.isEnum && !modelProperty.hasValidation && !cm.isArrayModel) {
|
||||
// remove these models because they are aliases and do not have any enums or validations
|
||||
modelSchemasToRemove.put(cm.name, modelSchema);
|
||||
}
|
||||
} else if (cm.isArrayModel && !modelProperty.isEnum && !modelProperty.hasValidation) {
|
||||
// remove any ArrayModels which lack validation and enums
|
||||
modelSchemasToRemove.put(cm.name, modelSchema);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -829,10 +827,10 @@ public class PythonClientExperimentalCodegen extends PythonClientCodegen {
|
||||
result.unescapedDescription = simpleModelName(name);
|
||||
|
||||
// make non-object type models have one property so we can use it to store enums and validations
|
||||
if (result.isAlias || result.isEnum) {
|
||||
if (result.isAlias || result.isEnum || result.isArrayModel) {
|
||||
Schema modelSchema = ModelUtils.getSchema(this.openAPI, result.name);
|
||||
CodegenProperty modelProperty = fromProperty("value", modelSchema);
|
||||
if (modelProperty.isEnum == true || modelProperty.hasValidation == true) {
|
||||
if (modelProperty.isEnum == true || modelProperty.hasValidation == true || result.isArrayModel) {
|
||||
// these models are non-object models with enums and/or validations
|
||||
// add a single property to the model so we can have a way to access validations
|
||||
result.isAlias = true;
|
||||
@@ -847,7 +845,6 @@ public class PythonClientExperimentalCodegen extends PythonClientCodegen {
|
||||
postProcessModelProperty(result, prop);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,12 @@ from {{packageName}}.model_utils import ( # noqa: F401
|
||||
{{> python-experimental/model_templates/model_simple }}
|
||||
{{/isAlias}}
|
||||
{{^isAlias}}
|
||||
{{#isArrayModel}}
|
||||
{{> python-experimental/model_templates/model_simple }}
|
||||
{{/isArrayModel}}
|
||||
{{^isArrayModel}}
|
||||
{{> python-experimental/model_templates/model_normal }}
|
||||
{{/isArrayModel}}
|
||||
{{/isAlias}}
|
||||
{{/interfaces}}
|
||||
{{#interfaces}}
|
||||
|
||||
@@ -270,7 +270,7 @@ public class PythonClientExperimentalTest {
|
||||
Assert.assertEquals(cm.classname, "sample.Sample");
|
||||
Assert.assertEquals(cm.classVarName, "sample");
|
||||
Assert.assertEquals(cm.description, "an array model");
|
||||
Assert.assertEquals(cm.vars.size(), 0);
|
||||
Assert.assertEquals(cm.vars.size(), 1); // there is one value for Childer definition
|
||||
Assert.assertEquals(cm.parent, "list");
|
||||
Assert.assertEquals(cm.imports.size(), 1);
|
||||
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("children.Children")).size(), 1);
|
||||
|
||||
@@ -1099,6 +1099,19 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HealthCheckResult'
|
||||
/fake/array-of-enums:
|
||||
get:
|
||||
tags:
|
||||
- fake
|
||||
summary: Array of Enums
|
||||
operationId: getArrayOfEnums
|
||||
responses:
|
||||
200:
|
||||
description: Got named array of enums
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ArrayOfEnums'
|
||||
servers:
|
||||
- url: 'http://{server}.swagger.io:{port}/v2'
|
||||
description: petstore server
|
||||
@@ -2074,6 +2087,10 @@ components:
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
ArrayOfEnums:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/OuterEnum'
|
||||
DateTimeTest:
|
||||
type: string
|
||||
default: '2010-01-01T10:10:10.000111+01:00'
|
||||
|
||||
@@ -11,6 +11,7 @@ docs/AdditionalPropertiesNumber.md
|
||||
docs/AdditionalPropertiesObject.md
|
||||
docs/AdditionalPropertiesString.md
|
||||
docs/Animal.md
|
||||
docs/AnimalFarm.md
|
||||
docs/AnotherFakeApi.md
|
||||
docs/ApiResponse.md
|
||||
docs/ArrayOfArrayOfNumberOnly.md
|
||||
@@ -93,6 +94,7 @@ petstore_api/model/additional_properties_number.py
|
||||
petstore_api/model/additional_properties_object.py
|
||||
petstore_api/model/additional_properties_string.py
|
||||
petstore_api/model/animal.py
|
||||
petstore_api/model/animal_farm.py
|
||||
petstore_api/model/api_response.py
|
||||
petstore_api/model/array_of_array_of_number_only.py
|
||||
petstore_api/model/array_of_number_only.py
|
||||
|
||||
@@ -131,6 +131,7 @@ Class | Method | HTTP request | Description
|
||||
- [additional_properties_object.AdditionalPropertiesObject](docs/AdditionalPropertiesObject.md)
|
||||
- [additional_properties_string.AdditionalPropertiesString](docs/AdditionalPropertiesString.md)
|
||||
- [animal.Animal](docs/Animal.md)
|
||||
- [animal_farm.AnimalFarm](docs/AnimalFarm.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)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# animal_farm.AnimalFarm
|
||||
|
||||
## Properties
|
||||
Name | Type | Description | Notes
|
||||
------------ | ------------- | ------------- | -------------
|
||||
**value** | [**[animal.Animal]**](Animal.md) | |
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
# 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
|
||||
import nulltype # noqa: F401
|
||||
|
||||
from petstore_api.model_utils import ( # noqa: F401
|
||||
ApiTypeError,
|
||||
ModelComposed,
|
||||
ModelNormal,
|
||||
ModelSimple,
|
||||
cached_property,
|
||||
change_keys_js_to_python,
|
||||
convert_js_args_to_python_args,
|
||||
date,
|
||||
datetime,
|
||||
file_type,
|
||||
int,
|
||||
none_type,
|
||||
str,
|
||||
validate_get_composed_info,
|
||||
)
|
||||
try:
|
||||
from petstore_api.model import animal
|
||||
except ImportError:
|
||||
animal = sys.modules[
|
||||
'petstore_api.model.animal']
|
||||
|
||||
|
||||
class AnimalFarm(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 = {
|
||||
}
|
||||
|
||||
validations = {
|
||||
}
|
||||
|
||||
additional_properties_type = None
|
||||
|
||||
_nullable = False
|
||||
|
||||
@cached_property
|
||||
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': ([animal.Animal],), # noqa: E501
|
||||
}
|
||||
|
||||
@cached_property
|
||||
def discriminator():
|
||||
return None
|
||||
|
||||
_composed_schemas = None
|
||||
|
||||
required_properties = set([
|
||||
'_data_store',
|
||||
'_check_type',
|
||||
'_spec_property_naming',
|
||||
'_path_to_item',
|
||||
'_configuration',
|
||||
'_visited_composed_classes',
|
||||
])
|
||||
|
||||
@convert_js_args_to_python_args
|
||||
def __init__(self, value, *args, **kwargs): # noqa: E501
|
||||
"""animal_farm.AnimalFarm - a model defined in OpenAPI
|
||||
|
||||
Args:
|
||||
value ([animal.Animal]):
|
||||
|
||||
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
|
||||
_spec_property_naming (bool): True if the variable names in the input data
|
||||
are serialized names, as specified in the OpenAPI document.
|
||||
False if the variable names in the input data
|
||||
are pythonic names, e.g. snake case (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.
|
||||
_visited_composed_classes (tuple): This stores a tuple of
|
||||
classes that we have traveled through so that
|
||||
if we see that class again we will not use its
|
||||
discriminator again.
|
||||
When traveling through a discriminator, the
|
||||
composed schema that is
|
||||
is traveled through is added to this set.
|
||||
For example if Animal has a discriminator
|
||||
petType and we pass in "Dog", and the class Dog
|
||||
allOf includes Animal, we move through Animal
|
||||
once using the discriminator, and pick Dog.
|
||||
Then in Dog, we will make an instance of the
|
||||
Animal class but this time we won't travel
|
||||
through its discriminator because we passed in
|
||||
_visited_composed_classes = (Animal,)
|
||||
"""
|
||||
|
||||
_check_type = kwargs.pop('_check_type', True)
|
||||
_spec_property_naming = kwargs.pop('_spec_property_naming', False)
|
||||
_path_to_item = kwargs.pop('_path_to_item', ())
|
||||
_configuration = kwargs.pop('_configuration', None)
|
||||
_visited_composed_classes = kwargs.pop('_visited_composed_classes', ())
|
||||
|
||||
if args:
|
||||
raise ApiTypeError(
|
||||
"Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
|
||||
args,
|
||||
self.__class__.__name__,
|
||||
),
|
||||
path_to_item=_path_to_item,
|
||||
valid_classes=(self.__class__,),
|
||||
)
|
||||
|
||||
self._data_store = {}
|
||||
self._check_type = _check_type
|
||||
self._spec_property_naming = _spec_property_naming
|
||||
self._path_to_item = _path_to_item
|
||||
self._configuration = _configuration
|
||||
self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
|
||||
|
||||
self.value = value
|
||||
for var_name, var_value in six.iteritems(kwargs):
|
||||
if var_name not in self.attribute_map and \
|
||||
self._configuration is not None and \
|
||||
self._configuration.discard_unknown_keys and \
|
||||
self.additional_properties_type is None:
|
||||
# discard variable.
|
||||
continue
|
||||
setattr(self, var_name, var_value)
|
||||
@@ -20,6 +20,7 @@ from petstore_api.model.additional_properties_number import AdditionalProperties
|
||||
from petstore_api.model.additional_properties_object import AdditionalPropertiesObject
|
||||
from petstore_api.model.additional_properties_string import AdditionalPropertiesString
|
||||
from petstore_api.model.animal import Animal
|
||||
from petstore_api.model.animal_farm import AnimalFarm
|
||||
from petstore_api.model.api_response import ApiResponse
|
||||
from petstore_api.model.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
|
||||
from petstore_api.model.array_of_number_only import ArrayOfNumberOnly
|
||||
|
||||
@@ -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 __future__ import absolute_import
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
import petstore_api
|
||||
try:
|
||||
from petstore_api.model import animal
|
||||
except ImportError:
|
||||
animal = sys.modules[
|
||||
'petstore_api.model.animal']
|
||||
from petstore_api.model.animal_farm import AnimalFarm
|
||||
|
||||
|
||||
class TestAnimalFarm(unittest.TestCase):
|
||||
"""AnimalFarm unit test stubs"""
|
||||
|
||||
def setUp(self):
|
||||
pass
|
||||
|
||||
def tearDown(self):
|
||||
pass
|
||||
|
||||
def testAnimalFarm(self):
|
||||
"""Test AnimalFarm"""
|
||||
# FIXME: construct object with mandatory attributes with example values
|
||||
# model = AnimalFarm() # noqa: E501
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -5,11 +5,13 @@ README.md
|
||||
docs/AdditionalPropertiesClass.md
|
||||
docs/Address.md
|
||||
docs/Animal.md
|
||||
docs/AnimalFarm.md
|
||||
docs/AnotherFakeApi.md
|
||||
docs/ApiResponse.md
|
||||
docs/Apple.md
|
||||
docs/AppleReq.md
|
||||
docs/ArrayOfArrayOfNumberOnly.md
|
||||
docs/ArrayOfEnums.md
|
||||
docs/ArrayOfNumberOnly.md
|
||||
docs/ArrayTest.md
|
||||
docs/Banana.md
|
||||
@@ -109,10 +111,12 @@ petstore_api/model/__init__.py
|
||||
petstore_api/model/additional_properties_class.py
|
||||
petstore_api/model/address.py
|
||||
petstore_api/model/animal.py
|
||||
petstore_api/model/animal_farm.py
|
||||
petstore_api/model/api_response.py
|
||||
petstore_api/model/apple.py
|
||||
petstore_api/model/apple_req.py
|
||||
petstore_api/model/array_of_array_of_number_only.py
|
||||
petstore_api/model/array_of_enums.py
|
||||
petstore_api/model/array_of_number_only.py
|
||||
petstore_api/model/array_test.py
|
||||
petstore_api/model/banana.py
|
||||
|
||||
@@ -87,6 +87,7 @@ Class | Method | HTTP request | Description
|
||||
*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* | [**get_array_of_enums**](docs/FakeApi.md#get_array_of_enums) | **GET** /fake/array-of-enums | Array of Enums
|
||||
*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
|
||||
@@ -125,10 +126,12 @@ Class | Method | HTTP request | Description
|
||||
- [additional_properties_class.AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md)
|
||||
- [address.Address](docs/Address.md)
|
||||
- [animal.Animal](docs/Animal.md)
|
||||
- [animal_farm.AnimalFarm](docs/AnimalFarm.md)
|
||||
- [api_response.ApiResponse](docs/ApiResponse.md)
|
||||
- [apple.Apple](docs/Apple.md)
|
||||
- [apple_req.AppleReq](docs/AppleReq.md)
|
||||
- [array_of_array_of_number_only.ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md)
|
||||
- [array_of_enums.ArrayOfEnums](docs/ArrayOfEnums.md)
|
||||
- [array_of_number_only.ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md)
|
||||
- [array_test.ArrayTest](docs/ArrayTest.md)
|
||||
- [banana.Banana](docs/Banana.md)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# animal_farm.AnimalFarm
|
||||
|
||||
## Properties
|
||||
Name | Type | Description | Notes
|
||||
------------ | ------------- | ------------- | -------------
|
||||
**value** | [**[animal.Animal]**](Animal.md) | |
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# array_of_enums.ArrayOfEnums
|
||||
|
||||
## Properties
|
||||
Name | Type | Description | Notes
|
||||
------------ | ------------- | ------------- | -------------
|
||||
**value** | [**[outer_enum.OuterEnum, none_type]**](OuterEnum.md) | |
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ Method | HTTP request | Description
|
||||
[**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 |
|
||||
[**get_array_of_enums**](FakeApi.md#get_array_of_enums) | **GET** /fake/array-of-enums | Array of Enums
|
||||
[**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
|
||||
@@ -331,6 +332,64 @@ No authorization required
|
||||
|
||||
[[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_array_of_enums**
|
||||
> array_of_enums.ArrayOfEnums get_array_of_enums()
|
||||
|
||||
Array of Enums
|
||||
|
||||
### Example
|
||||
|
||||
```python
|
||||
from __future__ import print_function
|
||||
import time
|
||||
import petstore_api
|
||||
from petstore_api.api import fake_api
|
||||
from petstore_api.model import array_of_enums
|
||||
from pprint import pprint
|
||||
# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2
|
||||
# See configuration.py for a list of all supported configuration parameters.
|
||||
configuration = petstore_api.Configuration(
|
||||
host = "http://petstore.swagger.io:80/v2"
|
||||
)
|
||||
|
||||
|
||||
# Enter a context with an instance of the API client
|
||||
with petstore_api.ApiClient() as api_client:
|
||||
# Create an instance of the API class
|
||||
api_instance = fake_api.FakeApi(api_client)
|
||||
|
||||
# example, this endpoint has no required or optional parameters
|
||||
try:
|
||||
# Array of Enums
|
||||
api_response = api_instance.get_array_of_enums()
|
||||
pprint(api_response)
|
||||
except petstore_api.ApiException as e:
|
||||
print("Exception when calling FakeApi->get_array_of_enums: %s\n" % e)
|
||||
```
|
||||
|
||||
### Parameters
|
||||
This endpoint does not need any parameter.
|
||||
|
||||
### Return type
|
||||
|
||||
[**array_of_enums.ArrayOfEnums**](ArrayOfEnums.md)
|
||||
|
||||
### Authorization
|
||||
|
||||
No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Accept**: application/json
|
||||
|
||||
### HTTP response details
|
||||
| Status code | Description | Response headers |
|
||||
|-------------|-------------|------------------|
|
||||
**200** | Got named array of enums | - |
|
||||
|
||||
[[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)
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ from petstore_api.model_utils import ( # noqa: F401
|
||||
)
|
||||
from petstore_api.model import health_check_result
|
||||
from petstore_api.model import outer_composite
|
||||
from petstore_api.model import array_of_enums
|
||||
from petstore_api.model import file_schema_test_class
|
||||
from petstore_api.model import user
|
||||
from petstore_api.model import client
|
||||
@@ -600,6 +601,109 @@ class FakeApi(object):
|
||||
callable=__fake_outer_string_serialize
|
||||
)
|
||||
|
||||
def __get_array_of_enums(
|
||||
self,
|
||||
**kwargs
|
||||
):
|
||||
"""Array of Enums # 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_array_of_enums(async_req=True)
|
||||
>>> result = thread.get()
|
||||
|
||||
|
||||
Keyword Args:
|
||||
_return_http_data_only (bool): response data without head status
|
||||
code and headers. Default is True.
|
||||
_preload_content (bool): if False, the urllib3.HTTPResponse object
|
||||
will be returned without reading/decoding response data.
|
||||
Default is True.
|
||||
_request_timeout (float/tuple): 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.
|
||||
_check_input_type (bool): specifies if type checking
|
||||
should be done one the data sent to the server.
|
||||
Default is True.
|
||||
_check_return_type (bool): specifies if type checking
|
||||
should be done one the data received from the server.
|
||||
Default is True.
|
||||
_host_index (int): specifies the index of the server
|
||||
that we want to use.
|
||||
Default is 0.
|
||||
async_req (bool): execute request asynchronously
|
||||
|
||||
Returns:
|
||||
array_of_enums.ArrayOfEnums
|
||||
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_array_of_enums = Endpoint(
|
||||
settings={
|
||||
'response_type': (array_of_enums.ArrayOfEnums,),
|
||||
'auth': [],
|
||||
'endpoint_path': '/fake/array-of-enums',
|
||||
'operation_id': 'get_array_of_enums',
|
||||
'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_array_of_enums
|
||||
)
|
||||
|
||||
def __test_body_with_file_schema(
|
||||
self,
|
||||
file_schema_test_class_file_schema_test_class,
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
# 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
|
||||
import nulltype # noqa: F401
|
||||
|
||||
from petstore_api.model_utils import ( # noqa: F401
|
||||
ApiTypeError,
|
||||
ModelComposed,
|
||||
ModelNormal,
|
||||
ModelSimple,
|
||||
cached_property,
|
||||
change_keys_js_to_python,
|
||||
convert_js_args_to_python_args,
|
||||
date,
|
||||
datetime,
|
||||
file_type,
|
||||
int,
|
||||
none_type,
|
||||
str,
|
||||
validate_get_composed_info,
|
||||
)
|
||||
try:
|
||||
from petstore_api.model import animal
|
||||
except ImportError:
|
||||
animal = sys.modules[
|
||||
'petstore_api.model.animal']
|
||||
|
||||
|
||||
class AnimalFarm(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 = {
|
||||
}
|
||||
|
||||
validations = {
|
||||
}
|
||||
|
||||
additional_properties_type = None
|
||||
|
||||
_nullable = False
|
||||
|
||||
@cached_property
|
||||
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': ([animal.Animal],), # noqa: E501
|
||||
}
|
||||
|
||||
@cached_property
|
||||
def discriminator():
|
||||
return None
|
||||
|
||||
_composed_schemas = None
|
||||
|
||||
required_properties = set([
|
||||
'_data_store',
|
||||
'_check_type',
|
||||
'_spec_property_naming',
|
||||
'_path_to_item',
|
||||
'_configuration',
|
||||
'_visited_composed_classes',
|
||||
])
|
||||
|
||||
@convert_js_args_to_python_args
|
||||
def __init__(self, value, *args, **kwargs): # noqa: E501
|
||||
"""animal_farm.AnimalFarm - a model defined in OpenAPI
|
||||
|
||||
Args:
|
||||
value ([animal.Animal]):
|
||||
|
||||
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
|
||||
_spec_property_naming (bool): True if the variable names in the input data
|
||||
are serialized names, as specified in the OpenAPI document.
|
||||
False if the variable names in the input data
|
||||
are pythonic names, e.g. snake case (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.
|
||||
_visited_composed_classes (tuple): This stores a tuple of
|
||||
classes that we have traveled through so that
|
||||
if we see that class again we will not use its
|
||||
discriminator again.
|
||||
When traveling through a discriminator, the
|
||||
composed schema that is
|
||||
is traveled through is added to this set.
|
||||
For example if Animal has a discriminator
|
||||
petType and we pass in "Dog", and the class Dog
|
||||
allOf includes Animal, we move through Animal
|
||||
once using the discriminator, and pick Dog.
|
||||
Then in Dog, we will make an instance of the
|
||||
Animal class but this time we won't travel
|
||||
through its discriminator because we passed in
|
||||
_visited_composed_classes = (Animal,)
|
||||
"""
|
||||
|
||||
_check_type = kwargs.pop('_check_type', True)
|
||||
_spec_property_naming = kwargs.pop('_spec_property_naming', False)
|
||||
_path_to_item = kwargs.pop('_path_to_item', ())
|
||||
_configuration = kwargs.pop('_configuration', None)
|
||||
_visited_composed_classes = kwargs.pop('_visited_composed_classes', ())
|
||||
|
||||
if args:
|
||||
raise ApiTypeError(
|
||||
"Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
|
||||
args,
|
||||
self.__class__.__name__,
|
||||
),
|
||||
path_to_item=_path_to_item,
|
||||
valid_classes=(self.__class__,),
|
||||
)
|
||||
|
||||
self._data_store = {}
|
||||
self._check_type = _check_type
|
||||
self._spec_property_naming = _spec_property_naming
|
||||
self._path_to_item = _path_to_item
|
||||
self._configuration = _configuration
|
||||
self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
|
||||
|
||||
self.value = value
|
||||
for var_name, var_value in six.iteritems(kwargs):
|
||||
if var_name not in self.attribute_map and \
|
||||
self._configuration is not None and \
|
||||
self._configuration.discard_unknown_keys and \
|
||||
self.additional_properties_type is None:
|
||||
# discard variable.
|
||||
continue
|
||||
setattr(self, var_name, var_value)
|
||||
@@ -0,0 +1,173 @@
|
||||
# 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
|
||||
import nulltype # noqa: F401
|
||||
|
||||
from petstore_api.model_utils import ( # noqa: F401
|
||||
ApiTypeError,
|
||||
ModelComposed,
|
||||
ModelNormal,
|
||||
ModelSimple,
|
||||
cached_property,
|
||||
change_keys_js_to_python,
|
||||
convert_js_args_to_python_args,
|
||||
date,
|
||||
datetime,
|
||||
file_type,
|
||||
int,
|
||||
none_type,
|
||||
str,
|
||||
validate_get_composed_info,
|
||||
)
|
||||
try:
|
||||
from petstore_api.model import outer_enum
|
||||
except ImportError:
|
||||
outer_enum = sys.modules[
|
||||
'petstore_api.model.outer_enum']
|
||||
|
||||
|
||||
class ArrayOfEnums(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 = {
|
||||
}
|
||||
|
||||
validations = {
|
||||
}
|
||||
|
||||
additional_properties_type = None
|
||||
|
||||
_nullable = False
|
||||
|
||||
@cached_property
|
||||
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': ([outer_enum.OuterEnum, none_type],), # noqa: E501
|
||||
}
|
||||
|
||||
@cached_property
|
||||
def discriminator():
|
||||
return None
|
||||
|
||||
_composed_schemas = None
|
||||
|
||||
required_properties = set([
|
||||
'_data_store',
|
||||
'_check_type',
|
||||
'_spec_property_naming',
|
||||
'_path_to_item',
|
||||
'_configuration',
|
||||
'_visited_composed_classes',
|
||||
])
|
||||
|
||||
@convert_js_args_to_python_args
|
||||
def __init__(self, value, *args, **kwargs): # noqa: E501
|
||||
"""array_of_enums.ArrayOfEnums - a model defined in OpenAPI
|
||||
|
||||
Args:
|
||||
value ([outer_enum.OuterEnum, 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
|
||||
_spec_property_naming (bool): True if the variable names in the input data
|
||||
are serialized names, as specified in the OpenAPI document.
|
||||
False if the variable names in the input data
|
||||
are pythonic names, e.g. snake case (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.
|
||||
_visited_composed_classes (tuple): This stores a tuple of
|
||||
classes that we have traveled through so that
|
||||
if we see that class again we will not use its
|
||||
discriminator again.
|
||||
When traveling through a discriminator, the
|
||||
composed schema that is
|
||||
is traveled through is added to this set.
|
||||
For example if Animal has a discriminator
|
||||
petType and we pass in "Dog", and the class Dog
|
||||
allOf includes Animal, we move through Animal
|
||||
once using the discriminator, and pick Dog.
|
||||
Then in Dog, we will make an instance of the
|
||||
Animal class but this time we won't travel
|
||||
through its discriminator because we passed in
|
||||
_visited_composed_classes = (Animal,)
|
||||
"""
|
||||
|
||||
_check_type = kwargs.pop('_check_type', True)
|
||||
_spec_property_naming = kwargs.pop('_spec_property_naming', False)
|
||||
_path_to_item = kwargs.pop('_path_to_item', ())
|
||||
_configuration = kwargs.pop('_configuration', None)
|
||||
_visited_composed_classes = kwargs.pop('_visited_composed_classes', ())
|
||||
|
||||
if args:
|
||||
raise ApiTypeError(
|
||||
"Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
|
||||
args,
|
||||
self.__class__.__name__,
|
||||
),
|
||||
path_to_item=_path_to_item,
|
||||
valid_classes=(self.__class__,),
|
||||
)
|
||||
|
||||
self._data_store = {}
|
||||
self._check_type = _check_type
|
||||
self._spec_property_naming = _spec_property_naming
|
||||
self._path_to_item = _path_to_item
|
||||
self._configuration = _configuration
|
||||
self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
|
||||
|
||||
self.value = value
|
||||
for var_name, var_value in six.iteritems(kwargs):
|
||||
if var_name not in self.attribute_map and \
|
||||
self._configuration is not None and \
|
||||
self._configuration.discard_unknown_keys and \
|
||||
self.additional_properties_type is None:
|
||||
# discard variable.
|
||||
continue
|
||||
setattr(self, var_name, var_value)
|
||||
@@ -14,10 +14,12 @@
|
||||
from petstore_api.model.additional_properties_class import AdditionalPropertiesClass
|
||||
from petstore_api.model.address import Address
|
||||
from petstore_api.model.animal import Animal
|
||||
from petstore_api.model.animal_farm import AnimalFarm
|
||||
from petstore_api.model.api_response import ApiResponse
|
||||
from petstore_api.model.apple import Apple
|
||||
from petstore_api.model.apple_req import AppleReq
|
||||
from petstore_api.model.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
|
||||
from petstore_api.model.array_of_enums import ArrayOfEnums
|
||||
from petstore_api.model.array_of_number_only import ArrayOfNumberOnly
|
||||
from petstore_api.model.array_test import ArrayTest
|
||||
from petstore_api.model.banana import Banana
|
||||
|
||||
@@ -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 __future__ import absolute_import
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
import petstore_api
|
||||
try:
|
||||
from petstore_api.model import animal
|
||||
except ImportError:
|
||||
animal = sys.modules[
|
||||
'petstore_api.model.animal']
|
||||
from petstore_api.model.animal_farm import AnimalFarm
|
||||
|
||||
|
||||
class TestAnimalFarm(unittest.TestCase):
|
||||
"""AnimalFarm unit test stubs"""
|
||||
|
||||
def setUp(self):
|
||||
pass
|
||||
|
||||
def tearDown(self):
|
||||
pass
|
||||
|
||||
def testAnimalFarm(self):
|
||||
"""Test AnimalFarm"""
|
||||
# FIXME: construct object with mandatory attributes with example values
|
||||
# model = AnimalFarm() # noqa: E501
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -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 __future__ import absolute_import
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
import petstore_api
|
||||
try:
|
||||
from petstore_api.model import outer_enum
|
||||
except ImportError:
|
||||
outer_enum = sys.modules[
|
||||
'petstore_api.model.outer_enum']
|
||||
from petstore_api.model.array_of_enums import ArrayOfEnums
|
||||
|
||||
|
||||
class TestArrayOfEnums(unittest.TestCase):
|
||||
"""ArrayOfEnums unit test stubs"""
|
||||
|
||||
def setUp(self):
|
||||
pass
|
||||
|
||||
def tearDown(self):
|
||||
pass
|
||||
|
||||
def testArrayOfEnums(self):
|
||||
"""Test ArrayOfEnums"""
|
||||
# FIXME: construct object with mandatory attributes with example values
|
||||
# model = ArrayOfEnums() # noqa: E501
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -21,7 +21,9 @@ from dateutil.parser import parse
|
||||
from collections import namedtuple
|
||||
|
||||
import petstore_api
|
||||
from petstore_api.model import array_of_enums
|
||||
from petstore_api.model import format_test
|
||||
from petstore_api.model import outer_enum
|
||||
import petstore_api.configuration
|
||||
|
||||
HOST = 'http://petstore.swagger.io/v2'
|
||||
@@ -42,6 +44,14 @@ class ApiClientTests(unittest.TestCase):
|
||||
config.disabled_client_side_validations = 'foo'
|
||||
config.disabled_client_side_validations = ""
|
||||
|
||||
def test_array_of_enums(self):
|
||||
data = [
|
||||
"placed", None
|
||||
]
|
||||
response = MockResponse(data=json.dumps(data))
|
||||
deserialized = self.api_client.deserialize(response, (array_of_enums.ArrayOfEnums, ), True)
|
||||
assert isinstance(deserialized, array_of_enums.ArrayOfEnums)
|
||||
assert array_of_enums.ArrayOfEnums([outer_enum.OuterEnum(v) for v in data]) == deserialized
|
||||
|
||||
def checkRaiseRegex(self, expected_exception, expected_regex):
|
||||
if sys.version_info < (3, 0):
|
||||
|
||||
Reference in New Issue
Block a user