diff --git a/modules/openapi-generator/src/test/resources/3_0/python-experimental/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml b/modules/openapi-generator/src/test/resources/3_0/python-experimental/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml index d9d9b0a83ec..374035a6b1a 100644 --- a/modules/openapi-generator/src/test/resources/3_0/python-experimental/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/python-experimental/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml @@ -2905,4 +2905,15 @@ components: type: string enum: - move - - copy \ No newline at end of file + - copy + AdditionalPropertiesValidator: + type: object + allOf: + - type: object + additionalProperties: true + - type: object + additionalProperties: + minLength: 3 + - type: object + additionalProperties: + maxLength: 5 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/python-experimental/.openapi-generator/FILES b/samples/openapi3/client/petstore/python-experimental/.openapi-generator/FILES index 2ccf2ed52ea..c3d0876acf2 100644 --- a/samples/openapi3/client/petstore/python-experimental/.openapi-generator/FILES +++ b/samples/openapi3/client/petstore/python-experimental/.openapi-generator/FILES @@ -10,6 +10,7 @@ docs/apis/tags/PetApi.md docs/apis/tags/StoreApi.md docs/apis/tags/UserApi.md docs/models/AdditionalPropertiesClass.md +docs/models/AdditionalPropertiesValidator.md docs/models/AdditionalPropertiesWithArrayOfEnums.md docs/models/Address.md docs/models/Animal.md @@ -140,6 +141,8 @@ petstore_api/exceptions.py petstore_api/model/__init__.py petstore_api/model/additional_properties_class.py petstore_api/model/additional_properties_class.pyi +petstore_api/model/additional_properties_validator.py +petstore_api/model/additional_properties_validator.pyi petstore_api/model/additional_properties_with_array_of_enums.py petstore_api/model/additional_properties_with_array_of_enums.pyi petstore_api/model/address.py diff --git a/samples/openapi3/client/petstore/python-experimental/README.md b/samples/openapi3/client/petstore/python-experimental/README.md index 4e49dd54c7c..f53c782d23f 100644 --- a/samples/openapi3/client/petstore/python-experimental/README.md +++ b/samples/openapi3/client/petstore/python-experimental/README.md @@ -223,6 +223,7 @@ Class | Method | HTTP request | Description ## Documentation For Models - [AdditionalPropertiesClass](docs/models/AdditionalPropertiesClass.md) + - [AdditionalPropertiesValidator](docs/models/AdditionalPropertiesValidator.md) - [AdditionalPropertiesWithArrayOfEnums](docs/models/AdditionalPropertiesWithArrayOfEnums.md) - [Address](docs/models/Address.md) - [Animal](docs/models/Animal.md) diff --git a/samples/openapi3/client/petstore/python-experimental/docs/models/AdditionalPropertiesValidator.md b/samples/openapi3/client/petstore/python-experimental/docs/models/AdditionalPropertiesValidator.md new file mode 100644 index 00000000000..601107887d7 --- /dev/null +++ b/samples/openapi3/client/petstore/python-experimental/docs/models/AdditionalPropertiesValidator.md @@ -0,0 +1,8 @@ +# petstore_api.model.additional_properties_validator.AdditionalPropertiesValidator + +Type | Description | Notes +------------- | ------------- | ------------- +**object** | | + +[[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/petstore_api/model/additional_properties_validator.py b/samples/openapi3/client/petstore/python-experimental/petstore_api/model/additional_properties_validator.py new file mode 100644 index 00000000000..b2b2292d2ef --- /dev/null +++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/model/additional_properties_validator.py @@ -0,0 +1,198 @@ +# 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 decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from petstore_api import schemas # noqa: F401 + + +class AdditionalPropertiesValidator( + schemas.ComposedBase, + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + + class MetaOapg: + + + class all_of_0( + schemas.DictSchema + ): + + + class MetaOapg: + additional_properties = schemas.AnyTypeSchema + + def __getitem__(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + # dict_instance[name] accessor + return super().__getitem__(name) + + def get_item_oapg(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + return super().get_item_oapg(name) + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[MetaOapg.additional_properties, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes, ], + ) -> 'all_of_0': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) + + + class all_of_1( + schemas.DictSchema + ): + + + class MetaOapg: + + + class additional_properties( + schemas.AnyTypeSchema, + ): + + + class MetaOapg: + min_length = 3 + + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'additional_properties': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) + + def __getitem__(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + # dict_instance[name] accessor + return super().__getitem__(name) + + def get_item_oapg(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + return super().get_item_oapg(name) + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[MetaOapg.additional_properties, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes, ], + ) -> 'all_of_1': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) + + + class all_of_2( + schemas.DictSchema + ): + + + class MetaOapg: + + + class additional_properties( + schemas.AnyTypeSchema, + ): + + + class MetaOapg: + max_length = 5 + + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'additional_properties': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) + + def __getitem__(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + # dict_instance[name] accessor + return super().__getitem__(name) + + def get_item_oapg(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + return super().get_item_oapg(name) + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[MetaOapg.additional_properties, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes, ], + ) -> 'all_of_2': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) + + @classmethod + @property + @functools.cache + def all_of(cls): + # 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 because 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 [ + cls.all_of_0, + cls.all_of_1, + cls.all_of_2, + ] + + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'AdditionalPropertiesValidator': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) diff --git a/samples/openapi3/client/petstore/python-experimental/petstore_api/model/additional_properties_validator.pyi b/samples/openapi3/client/petstore/python-experimental/petstore_api/model/additional_properties_validator.pyi new file mode 100644 index 00000000000..e98beb3584b --- /dev/null +++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/model/additional_properties_validator.pyi @@ -0,0 +1,196 @@ +# 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 decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from petstore_api import schemas # noqa: F401 + + +class AdditionalPropertiesValidator( + schemas.ComposedBase, + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + + class MetaOapg: + + + class all_of_0( + schemas.DictSchema + ): + + + class MetaOapg: + additional_properties = schemas.AnyTypeSchema + + def __getitem__(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + # dict_instance[name] accessor + return super().__getitem__(name) + + def get_item_oapg(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + return super().get_item_oapg(name) + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[MetaOapg.additional_properties, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes, ], + ) -> 'all_of_0': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) + + + class all_of_1( + schemas.DictSchema + ): + + + class MetaOapg: + + + class additional_properties( + schemas.AnyTypeSchema, + ): + + + class MetaOapg: + + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'additional_properties': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) + + def __getitem__(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + # dict_instance[name] accessor + return super().__getitem__(name) + + def get_item_oapg(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + return super().get_item_oapg(name) + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[MetaOapg.additional_properties, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes, ], + ) -> 'all_of_1': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) + + + class all_of_2( + schemas.DictSchema + ): + + + class MetaOapg: + + + class additional_properties( + schemas.AnyTypeSchema, + ): + + + class MetaOapg: + + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'additional_properties': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) + + def __getitem__(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + # dict_instance[name] accessor + return super().__getitem__(name) + + def get_item_oapg(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + return super().get_item_oapg(name) + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[MetaOapg.additional_properties, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes, ], + ) -> 'all_of_2': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) + + @classmethod + @property + @functools.cache + def all_of(cls): + # 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 because 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 [ + cls.all_of_0, + cls.all_of_1, + cls.all_of_2, + ] + + + def __new__( + cls, + *args: typing.Union[dict, frozendict.frozendict, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'AdditionalPropertiesValidator': + return super().__new__( + cls, + *args, + _configuration=_configuration, + **kwargs, + ) 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 index cabc3300124..276418c1e73 100644 --- a/samples/openapi3/client/petstore/python-experimental/petstore_api/models/__init__.py +++ b/samples/openapi3/client/petstore/python-experimental/petstore_api/models/__init__.py @@ -12,6 +12,7 @@ # sys.setrecursionlimit(n) from petstore_api.model.additional_properties_class import AdditionalPropertiesClass +from petstore_api.model.additional_properties_validator import AdditionalPropertiesValidator from petstore_api.model.additional_properties_with_array_of_enums import AdditionalPropertiesWithArrayOfEnums from petstore_api.model.address import Address from petstore_api.model.animal import Animal diff --git a/samples/openapi3/client/petstore/python-experimental/test/test_models/test_additional_properties_validator.py b/samples/openapi3/client/petstore/python-experimental/test/test_models/test_additional_properties_validator.py new file mode 100644 index 00000000000..fa0fe198d79 --- /dev/null +++ b/samples/openapi3/client/petstore/python-experimental/test/test_models/test_additional_properties_validator.py @@ -0,0 +1,25 @@ +# 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 unittest + +import petstore_api +from petstore_api.model.additional_properties_validator import AdditionalPropertiesValidator +from petstore_api import configuration + + +class TestAdditionalPropertiesValidator(unittest.TestCase): + """AdditionalPropertiesValidator unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/openapi3/client/petstore/python-experimental/tests_manual/test_additional_properties_validator.py b/samples/openapi3/client/petstore/python-experimental/tests_manual/test_additional_properties_validator.py new file mode 100644 index 00000000000..0410365a021 --- /dev/null +++ b/samples/openapi3/client/petstore/python-experimental/tests_manual/test_additional_properties_validator.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 +""" + +import unittest + +from petstore_api.model.additional_properties_validator import AdditionalPropertiesValidator +from petstore_api import schemas, exceptions + + +class TestAdditionalPropertiesValidator(unittest.TestCase): + """AdditionalPropertiesValidator unit test stubs""" + + def test_additional_properties_validator(self): + with self.assertRaises(exceptions.ApiValueError): + AdditionalPropertiesValidator(tooShort='ab') + + with self.assertRaises(exceptions.ApiValueError): + AdditionalPropertiesValidator(tooLong='abcdef') + + inst = AdditionalPropertiesValidator(addProp='abc') + add_prop = inst['addProp'] + assert add_prop == 'abc' + assert isinstance(add_prop, str) + assert isinstance(add_prop, schemas.AnyTypeSchema) + assert isinstance(add_prop, AdditionalPropertiesValidator.MetaOapg.all_of[1].MetaOapg.additional_properties) + assert isinstance(add_prop, AdditionalPropertiesValidator.MetaOapg.all_of[2].MetaOapg.additional_properties) + assert not isinstance(add_prop, schemas.UnsetAnyTypeSchema) + + +if __name__ == '__main__': + unittest.main()