From 7fae5845b6192f87acb9a5655b9cec45bf2a7e92 Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Mon, 15 Jun 2020 16:53:17 -0400 Subject: [PATCH 1/9] switch enums to uppercase, allow case insensitive enum retrieval --- README.md | 2 +- autorest/codegen/templates/enum.py.jinja2 | 2 +- .../templates/enum_container.py.jinja2 | 20 +++- autorest/namer/name_converter.py | 15 ++- ...ng_running_operation_test_service_enums.py | 100 +++++++++++------- .../_auto_rest_paging_test_service_enums.py | 44 +++++--- .../_storage_management_client_enums.py | 72 ++++++++----- .../models/_multiapi_service_client_enums.py | 30 ++++-- .../models/_multiapi_service_client_enums.py | 30 ++++-- .../models/_multiapi_service_client_enums.py | 30 ++++-- .../models/_multiapi_service_client_enums.py | 30 ++++-- ...to_rest_swagger_bat_array_service_enums.py | 44 +++++--- ...to_rest_swagger_bat_array_service_enums.py | 44 +++++--- .../_auto_rest_complex_test_service_enums.py | 42 +++++--- .../_auto_rest_swagger_bat_service_enums.py | 28 ++++- .../models/_pet_store_inc_enums.py | 44 +++++--- ...o_rest_swagger_bat_header_service_enums.py | 28 ++++- .../models/_media_types_client_enums.py | 30 ++++-- ..._resource_flattening_test_service_enums.py | 44 +++++--- .../models/_non_string_enums_client_enums.py | 44 +++++--- .../_auto_rest_url_test_service_enums.py | 28 ++++- ..._auto_rest_swagger_batxml_service_enums.py | 96 ++++++++++------- 22 files changed, 599 insertions(+), 248 deletions(-) diff --git a/README.md b/README.md index 980fbf8e990..982ea2510c6 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ modelerfour: operation: snakecase operationGroup: pascalcase choice: pascalcase - choiceValue: snakecase + choiceValue: uppercase constant: snakecase constantParameter: snakecase type: pascalcase diff --git a/autorest/codegen/templates/enum.py.jinja2 b/autorest/codegen/templates/enum.py.jinja2 index c4365ba766a..95f6b6996e2 100644 --- a/autorest/codegen/templates/enum.py.jinja2 +++ b/autorest/codegen/templates/enum.py.jinja2 @@ -1,5 +1,5 @@ -class {{ enum.name }}({{ enum.enum_type.type_annotation }}, Enum): +class {{ enum.name }}({{ enum.enum_type.type_annotation }}, Enum, metaclass=CaseInsensitiveEnumMeta): {% if enum.description %} """{{ enum.description | wordwrap(width=95, break_long_words=False, wrapstring='\n ') }} """ diff --git a/autorest/codegen/templates/enum_container.py.jinja2 b/autorest/codegen/templates/enum_container.py.jinja2 index c1de41512fa..28c3610cfd5 100644 --- a/autorest/codegen/templates/enum_container.py.jinja2 +++ b/autorest/codegen/templates/enum_container.py.jinja2 @@ -1,7 +1,25 @@ # coding=utf-8 {{ code_model.options['license_header'] }} -from enum import Enum +from enum import Enum, EnumMeta + +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + {% for enum in code_model.enums.values() | sort %} {% include "enum.py.jinja2" %} {% endfor %} \ No newline at end of file diff --git a/autorest/namer/name_converter.py b/autorest/namer/name_converter.py index 9668fca4542..376fb241775 100644 --- a/autorest/namer/name_converter.py +++ b/autorest/namer/name_converter.py @@ -82,7 +82,7 @@ def _convert_schemas(schemas: Dict[str, Any]) -> None: def _convert_enum_schema(schema: Dict[str, Any]) -> None: NameConverter._convert_language_default_pascal_case(schema) for choice in schema["choices"]: - NameConverter._convert_language_default_python_case(choice, pad_string=PadType.Enum) + NameConverter._convert_language_default_python_case(choice, pad_string=PadType.Enum, all_upper=True) @staticmethod def _convert_object_schema(schema: Dict[str, Any]) -> None: @@ -99,7 +99,11 @@ def _convert_object_schema(schema: Dict[str, Any]) -> None: @staticmethod def _convert_language_default_python_case( - schema: Dict[str, Any], *, pad_string: Optional[PadType] = None, convert_name: bool = False + schema: Dict[str, Any], + *, + pad_string: Optional[PadType] = None, + convert_name: bool = False, + all_upper: bool = False ) -> None: if not schema.get("language") or schema["language"].get("python"): return @@ -117,7 +121,12 @@ def _convert_language_default_python_case( schema_python_name = NameConverter._to_valid_python_name( name=schema_name, pad_string=pad_string, convert_name=convert_name ) - schema['language']['python']['name'] = schema_python_name.lower() + # need to add the lower in case certain words, like LRO, are overriden to + # always return LRO. Without .lower(), for example, begin_lro would be + # begin_LRO + schema['language']['python']['name'] = ( + schema_python_name.upper() if all_upper else schema_python_name.lower() + ) schema_description = schema["language"]["default"]["description"].strip() if pad_string == PadType.Method and not schema_description and not schema["language"]["default"].get("summary"): diff --git a/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py b/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py index 2d162975e60..893a1be39fc 100644 --- a/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py +++ b/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py @@ -6,48 +6,66 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class OperationResultStatus(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class OperationResultStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): """The status of the request """ - succeeded = "Succeeded" - failed = "Failed" - canceled = "canceled" - accepted = "Accepted" - creating = "Creating" - created = "Created" - updating = "Updating" - updated = "Updated" - deleting = "Deleting" - deleted = "Deleted" - ok = "OK" - -class ProductPropertiesProvisioningStateValues(str, Enum): - - succeeded = "Succeeded" - failed = "Failed" - canceled = "canceled" - accepted = "Accepted" - creating = "Creating" - created = "Created" - updating = "Updating" - updated = "Updated" - deleting = "Deleting" - deleted = "Deleted" - ok = "OK" - -class SubProductPropertiesProvisioningStateValues(str, Enum): - - succeeded = "Succeeded" - failed = "Failed" - canceled = "canceled" - accepted = "Accepted" - creating = "Creating" - created = "Created" - updating = "Updating" - updated = "Updated" - deleting = "Deleting" - deleted = "Deleted" - ok = "OK" + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "canceled" + ACCEPTED = "Accepted" + CREATING = "Creating" + CREATED = "Created" + UPDATING = "Updating" + UPDATED = "Updated" + DELETING = "Deleting" + DELETED = "Deleted" + OK = "OK" + +class ProductPropertiesProvisioningStateValues(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "canceled" + ACCEPTED = "Accepted" + CREATING = "Creating" + CREATED = "Created" + UPDATING = "Updating" + UPDATED = "Updated" + DELETING = "Deleting" + DELETED = "Deleted" + OK = "OK" + +class SubProductPropertiesProvisioningStateValues(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "canceled" + ACCEPTED = "Accepted" + CREATING = "Creating" + CREATED = "Created" + UPDATING = "Updating" + UPDATED = "Updated" + DELETING = "Deleting" + DELETED = "Deleted" + OK = "OK" diff --git a/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py b/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py index 3cf5fca696a..f31f31389a0 100644 --- a/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py +++ b/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py @@ -6,20 +6,38 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class OperationResultStatus(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class OperationResultStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): """The status of the request """ - succeeded = "Succeeded" - failed = "Failed" - canceled = "canceled" - accepted = "Accepted" - creating = "Creating" - created = "Created" - updating = "Updating" - updated = "Updated" - deleting = "Deleting" - deleted = "Deleted" - ok = "OK" + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "canceled" + ACCEPTED = "Accepted" + CREATING = "Creating" + CREATED = "Created" + UPDATING = "Updating" + UPDATED = "Updated" + DELETING = "Deleting" + DELETED = "Deleted" + OK = "OK" diff --git a/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py b/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py index 2eb67ea74d4..4d3bd691e7f 100644 --- a/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py +++ b/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py @@ -6,54 +6,72 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class AccountStatus(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class AccountStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Gets the status indicating whether the primary location of the storage account is available or unavailable. """ - available = "Available" - unavailable = "Unavailable" + AVAILABLE = "Available" + UNAVAILABLE = "Unavailable" -class AccountType(str, Enum): +class AccountType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Gets or sets the account type. """ - standard_lrs = "Standard_LRS" - standard_zrs = "Standard_ZRS" - standard_grs = "Standard_GRS" - standard_ragrs = "Standard_RAGRS" - premium_lrs = "Premium_LRS" + STANDARD_LRS = "Standard_LRS" + STANDARD_ZRS = "Standard_ZRS" + STANDARD_GRS = "Standard_GRS" + STANDARD_RAGRS = "Standard_RAGRS" + PREMIUM_LRS = "Premium_LRS" -class KeyName(str, Enum): +class KeyName(str, Enum, metaclass=CaseInsensitiveEnumMeta): - key1 = "key1" - key2 = "key2" + KEY1 = "key1" + KEY2 = "key2" -class ProvisioningState(str, Enum): +class ProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Gets the status of the storage account at the time the operation was called. """ - creating = "Creating" - resolving_dns = "ResolvingDNS" - succeeded = "Succeeded" + CREATING = "Creating" + RESOLVING_DNS = "ResolvingDNS" + SUCCEEDED = "Succeeded" -class Reason(str, Enum): +class Reason(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Gets the reason that a storage account name could not be used. The Reason element is only returned if NameAvailable is false. """ - account_name_invalid = "AccountNameInvalid" - already_exists = "AlreadyExists" + ACCOUNT_NAME_INVALID = "AccountNameInvalid" + ALREADY_EXISTS = "AlreadyExists" -class UsageUnit(str, Enum): +class UsageUnit(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Gets the unit of measurement. """ - count = "Count" - bytes = "Bytes" - seconds = "Seconds" - percent = "Percent" - counts_per_second = "CountsPerSecond" - bytes_per_second = "BytesPerSecond" + COUNT = "Count" + BYTES = "Bytes" + SECONDS = "Seconds" + PERCENT = "Percent" + COUNTS_PER_SECOND = "CountsPerSecond" + BYTES_PER_SECOND = "BytesPerSecond" diff --git a/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py index bf4c202fc64..ab1dd684b80 100644 --- a/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py @@ -6,13 +6,31 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class ContentType(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Content type for upload """ - application_pdf = "application/pdf" #: Content Type 'application/pdf'. - image_jpeg = "image/jpeg" #: Content Type 'image/jpeg'. - image_png = "image/png" #: Content Type 'image/png'. - image_tiff = "image/tiff" #: Content Type 'image/tiff'. + APPLICATION_PDF = "application/pdf" #: Content Type 'application/pdf'. + IMAGE_JPEG = "image/jpeg" #: Content Type 'image/jpeg'. + IMAGE_PNG = "image/png" #: Content Type 'image/png'. + IMAGE_TIFF = "image/tiff" #: Content Type 'image/tiff'. diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py index bf4c202fc64..ab1dd684b80 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py @@ -6,13 +6,31 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class ContentType(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Content type for upload """ - application_pdf = "application/pdf" #: Content Type 'application/pdf'. - image_jpeg = "image/jpeg" #: Content Type 'image/jpeg'. - image_png = "image/png" #: Content Type 'image/png'. - image_tiff = "image/tiff" #: Content Type 'image/tiff'. + APPLICATION_PDF = "application/pdf" #: Content Type 'application/pdf'. + IMAGE_JPEG = "image/jpeg" #: Content Type 'image/jpeg'. + IMAGE_PNG = "image/png" #: Content Type 'image/png'. + IMAGE_TIFF = "image/tiff" #: Content Type 'image/tiff'. diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py index bf4c202fc64..ab1dd684b80 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py @@ -6,13 +6,31 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class ContentType(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Content type for upload """ - application_pdf = "application/pdf" #: Content Type 'application/pdf'. - image_jpeg = "image/jpeg" #: Content Type 'image/jpeg'. - image_png = "image/png" #: Content Type 'image/png'. - image_tiff = "image/tiff" #: Content Type 'image/tiff'. + APPLICATION_PDF = "application/pdf" #: Content Type 'application/pdf'. + IMAGE_JPEG = "image/jpeg" #: Content Type 'image/jpeg'. + IMAGE_PNG = "image/png" #: Content Type 'image/png'. + IMAGE_TIFF = "image/tiff" #: Content Type 'image/tiff'. diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py index bf4c202fc64..ab1dd684b80 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py @@ -6,13 +6,31 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class ContentType(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Content type for upload """ - application_pdf = "application/pdf" #: Content Type 'application/pdf'. - image_jpeg = "image/jpeg" #: Content Type 'image/jpeg'. - image_png = "image/png" #: Content Type 'image/png'. - image_tiff = "image/tiff" #: Content Type 'image/tiff'. + APPLICATION_PDF = "application/pdf" #: Content Type 'application/pdf'. + IMAGE_JPEG = "image/jpeg" #: Content Type 'image/jpeg'. + IMAGE_PNG = "image/png" #: Content Type 'image/png'. + IMAGE_TIFF = "image/tiff" #: Content Type 'image/tiff'. diff --git a/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py index 4b64c54e379..5f03dd16938 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py @@ -6,22 +6,40 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class Enum0(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) - foo1 = "foo1" - foo2 = "foo2" - foo3 = "foo3" + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None -class Enum1(str, Enum): - foo1 = "foo1" - foo2 = "foo2" - foo3 = "foo3" -class FooEnum(str, Enum): +class Enum0(str, Enum, metaclass=CaseInsensitiveEnumMeta): - foo1 = "foo1" - foo2 = "foo2" - foo3 = "foo3" + FOO1 = "foo1" + FOO2 = "foo2" + FOO3 = "foo3" + +class Enum1(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + FOO1 = "foo1" + FOO2 = "foo2" + FOO3 = "foo3" + +class FooEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + FOO1 = "foo1" + FOO2 = "foo2" + FOO3 = "foo3" diff --git a/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py index 4b64c54e379..5f03dd16938 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py @@ -6,22 +6,40 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class Enum0(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) - foo1 = "foo1" - foo2 = "foo2" - foo3 = "foo3" + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None -class Enum1(str, Enum): - foo1 = "foo1" - foo2 = "foo2" - foo3 = "foo3" -class FooEnum(str, Enum): +class Enum0(str, Enum, metaclass=CaseInsensitiveEnumMeta): - foo1 = "foo1" - foo2 = "foo2" - foo3 = "foo3" + FOO1 = "foo1" + FOO2 = "foo2" + FOO3 = "foo3" + +class Enum1(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + FOO1 = "foo1" + FOO2 = "foo2" + FOO3 = "foo3" + +class FooEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + FOO1 = "foo1" + FOO2 = "foo2" + FOO3 = "foo3" diff --git a/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py index b9d88c1ac49..710e1c3a0ce 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py @@ -6,21 +6,39 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class CMYKColors(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) - cyan = "cyan" - magenta = "Magenta" - yellow = "YELLOW" - blac_k = "blacK" + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None -class GoblinSharkColor(str, Enum): + + +class CMYKColors(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + CYAN = "cyan" + MAGENTA = "Magenta" + YELLOW = "YELLOW" + BLAC_K = "blacK" + +class GoblinSharkColor(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Colors possible """ - pink = "pink" - gray = "gray" - brown = "brown" - upper_red = "RED" #: Uppercase RED. - lower_red = "red" #: Lowercase RED. + PINK = "pink" + GRAY = "gray" + BROWN = "brown" + UPPER_RED = "RED" #: Uppercase RED. + LOWER_RED = "red" #: Lowercase RED. diff --git a/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py index 67fdfa68878..2d626f73f38 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py @@ -6,10 +6,28 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class Colors(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) - red_color = "red color" - green_color = "green-color" - blue_color = "blue_color" + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class Colors(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + RED_COLOR = "red color" + GREEN_COLOR = "green-color" + BLUE_COLOR = "blue_color" diff --git a/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py b/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py index a2e79e51dcb..549ddff05a7 100644 --- a/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py @@ -6,22 +6,40 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class DaysOfWeekExtensibleEnum(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class DaysOfWeekExtensibleEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Type of Pet """ - monday = "Monday" - tuesday = "Tuesday" - wednesday = "Wednesday" - thursday = "Thursday" - friday = "Friday" - saturday = "Saturday" - sunday = "Sunday" + MONDAY = "Monday" + TUESDAY = "Tuesday" + WEDNESDAY = "Wednesday" + THURSDAY = "Thursday" + FRIDAY = "Friday" + SATURDAY = "Saturday" + SUNDAY = "Sunday" -class IntEnum(str, Enum): +class IntEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): - one = "1" #: one. - two = "2" #: two. - three = "3" #: three. + ONE = "1" #: one. + TWO = "2" #: two. + THREE = "3" #: three. diff --git a/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py index 6e32ff19be6..7cb201f3398 100644 --- a/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py @@ -6,10 +6,28 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class GreyscaleColors(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) - white = "White" - black = "black" - grey = "GREY" + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class GreyscaleColors(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + WHITE = "White" + BLACK = "black" + GREY = "GREY" diff --git a/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py b/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py index bf4c202fc64..ab1dd684b80 100644 --- a/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py @@ -6,13 +6,31 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class ContentType(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Content type for upload """ - application_pdf = "application/pdf" #: Content Type 'application/pdf'. - image_jpeg = "image/jpeg" #: Content Type 'image/jpeg'. - image_png = "image/png" #: Content Type 'image/png'. - image_tiff = "image/tiff" #: Content Type 'image/tiff'. + APPLICATION_PDF = "application/pdf" #: Content Type 'application/pdf'. + IMAGE_JPEG = "image/jpeg" #: Content Type 'image/jpeg'. + IMAGE_PNG = "image/png" #: Content Type 'image/png'. + IMAGE_TIFF = "image/tiff" #: Content Type 'image/tiff'. diff --git a/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py index c5eeb5243c9..4f7fabf9ff5 100644 --- a/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py @@ -6,18 +6,36 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class FlattenedProductPropertiesProvisioningStateValues(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) - succeeded = "Succeeded" - failed = "Failed" - canceled = "canceled" - accepted = "Accepted" - creating = "Creating" - created = "Created" - updating = "Updating" - updated = "Updated" - deleting = "Deleting" - deleted = "Deleted" - ok = "OK" + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class FlattenedProductPropertiesProvisioningStateValues(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "canceled" + ACCEPTED = "Accepted" + CREATING = "Creating" + CREATED = "Created" + UPDATING = "Updating" + UPDATED = "Updated" + DELETING = "Deleting" + DELETED = "Deleted" + OK = "OK" diff --git a/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py b/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py index 00e7458ac8f..aa85e7d35b9 100644 --- a/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py @@ -6,24 +6,42 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class FloatEnum(float, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class FloatEnum(float, Enum, metaclass=CaseInsensitiveEnumMeta): """List of float enums """ - two_hundred4 = 200.4 - four_hundred_three4 = 403.4 - four_hundred_five3 = 405.3 - four_hundred_six2 = 406.2 - four_hundred_twenty_nine1 = 429.1 + TWO_HUNDRED4 = 200.4 + FOUR_HUNDRED_THREE4 = 403.4 + FOUR_HUNDRED_FIVE3 = 405.3 + FOUR_HUNDRED_SIX2 = 406.2 + FOUR_HUNDRED_TWENTY_NINE1 = 429.1 -class IntEnum(int, Enum): +class IntEnum(int, Enum, metaclass=CaseInsensitiveEnumMeta): """List of integer enums """ - two_hundred = 200 - four_hundred_three = 403 - four_hundred_five = 405 - four_hundred_six = 406 - four_hundred_twenty_nine = 429 + TWO_HUNDRED = 200 + FOUR_HUNDRED_THREE = 403 + FOUR_HUNDRED_FIVE = 405 + FOUR_HUNDRED_SIX = 406 + FOUR_HUNDRED_TWENTY_NINE = 429 diff --git a/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py index d5a760f9f0e..df57809ebd6 100644 --- a/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py @@ -6,10 +6,28 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class UriColor(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) - red_color = "red color" - green_color = "green color" - blue_color = "blue color" + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + + +class UriColor(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + RED_COLOR = "red color" + GREEN_COLOR = "green color" + BLUE_COLOR = "blue color" diff --git a/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py index 02609f5b44b..f85abc8fa0a 100644 --- a/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py @@ -6,58 +6,76 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta -class AccessTier(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) - p4 = "P4" - p6 = "P6" - p10 = "P10" - p20 = "P20" - p30 = "P30" - p40 = "P40" - p50 = "P50" - hot = "Hot" - cool = "Cool" - archive = "Archive" + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None -class ArchiveStatus(str, Enum): - rehydrate_pending_to_hot = "rehydrate-pending-to-hot" - rehydrate_pending_to_cool = "rehydrate-pending-to-cool" -class BlobType(str, Enum): +class AccessTier(str, Enum, metaclass=CaseInsensitiveEnumMeta): - block_blob = "BlockBlob" - page_blob = "PageBlob" - append_blob = "AppendBlob" + P4 = "P4" + P6 = "P6" + P10 = "P10" + P20 = "P20" + P30 = "P30" + P40 = "P40" + P50 = "P50" + HOT = "Hot" + COOL = "Cool" + ARCHIVE = "Archive" -class CopyStatusType(str, Enum): +class ArchiveStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): - pending = "pending" - success = "success" - aborted = "aborted" - failed = "failed" + REHYDRATE_PENDING_TO_HOT = "rehydrate-pending-to-hot" + REHYDRATE_PENDING_TO_COOL = "rehydrate-pending-to-cool" -class LeaseDurationType(str, Enum): +class BlobType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - infinite = "infinite" - fixed = "fixed" + BLOCK_BLOB = "BlockBlob" + PAGE_BLOB = "PageBlob" + APPEND_BLOB = "AppendBlob" -class LeaseStateType(str, Enum): +class CopyStatusType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - available = "available" - leased = "leased" - expired = "expired" - breaking = "breaking" - broken = "broken" + PENDING = "pending" + SUCCESS = "success" + ABORTED = "aborted" + FAILED = "failed" -class LeaseStatusType(str, Enum): +class LeaseDurationType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - locked = "locked" - unlocked = "unlocked" + INFINITE = "infinite" + FIXED = "fixed" -class PublicAccessType(str, Enum): +class LeaseStateType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - container = "container" - blob = "blob" + AVAILABLE = "available" + LEASED = "leased" + EXPIRED = "expired" + BREAKING = "breaking" + BROKEN = "broken" + +class LeaseStatusType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + LOCKED = "locked" + UNLOCKED = "unlocked" + +class PublicAccessType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + CONTAINER = "container" + BLOB = "blob" From f572785518830d750ed60fc38982968e975f5fa5 Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Mon, 15 Jun 2020 17:00:54 -0400 Subject: [PATCH 2/9] add tests --- .../asynctests/test_non_string_enums.py | 8 ++++---- .../asynctests/test_string_tests.py | 10 +++++----- .../AcceptanceTests/test_non_string_enums.py | 12 ++++++++---- test/vanilla/AcceptanceTests/test_string_tests.py | 14 +++++++++----- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/test/vanilla/AcceptanceTests/asynctests/test_non_string_enums.py b/test/vanilla/AcceptanceTests/asynctests/test_non_string_enums.py index cd9844031d4..8dfff6af69f 100644 --- a/test/vanilla/AcceptanceTests/asynctests/test_non_string_enums.py +++ b/test/vanilla/AcceptanceTests/asynctests/test_non_string_enums.py @@ -41,20 +41,20 @@ class TestNonStringEnums(object): @pytest.mark.asyncio async def test_put_int_enum(self, client): - result = await client.int.put(IntEnum.two_hundred) + result = await client.int.put(IntEnum.TWO_HUNDRED) assert result == "Nice job posting an int enum" @pytest.mark.asyncio async def test_get_int_enum(self, client): result = await client.int.get() - assert result == IntEnum.four_hundred_twenty_nine.value + assert result == IntEnum.FOUR_HUNDRED_TWENTY_NINE.value @pytest.mark.asyncio async def test_put_float_enum(self, client): - result = await client.float.put(FloatEnum.two_hundred4) + result = await client.float.put(FloatEnum.TWO_HUNDRED4) assert result == "Nice job posting a float enum" @pytest.mark.asyncio async def test_get_float_enum(self, client): result = await client.float.get() - assert result == FloatEnum.four_hundred_twenty_nine1.value + assert result == FloatEnum.FOUR_HUNDRED_TWENTY_NINE1.value diff --git a/test/vanilla/AcceptanceTests/asynctests/test_string_tests.py b/test/vanilla/AcceptanceTests/asynctests/test_string_tests.py index 2eacb5a9dd5..467b68377a9 100644 --- a/test/vanilla/AcceptanceTests/asynctests/test_string_tests.py +++ b/test/vanilla/AcceptanceTests/asynctests/test_string_tests.py @@ -114,9 +114,9 @@ async def test_get_not_provided(self, client): @pytest.mark.asyncio async def test_enum_not_expandable(self, client): - assert Colors.red_color == (await client.enum.get_not_expandable()) + assert Colors.RED_COLOR == (await client.enum.get_not_expandable()) await client.enum.put_not_expandable('red color') - await client.enum.put_not_expandable(Colors.red_color) + await client.enum.put_not_expandable(Colors.RED_COLOR) with pytest.raises(HttpResponseError): await client.enum.put_not_expandable('not a colour') @@ -135,15 +135,15 @@ async def test_get_null_base64_url_encoded(self, client): @pytest.mark.asyncio async def test_enum_referenced(self, client): - await client.enum.put_referenced(Colors.red_color) + await client.enum.put_referenced(Colors.RED_COLOR) await client.enum.put_referenced("red color") - assert (await client.enum.get_referenced()) == Colors.red_color + assert (await client.enum.get_referenced()) == Colors.RED_COLOR @pytest.mark.asyncio async def test_enum_referenced_constant(self, client): await client.enum.put_referenced_constant() - assert (await client.enum.get_referenced_constant()).color_constant == Colors.green_color.value + assert (await client.enum.get_referenced_constant()).color_constant == Colors.GREEN_COLOR.value def test_patch_file(self): from bodystring.models import PatchAddedModel diff --git a/test/vanilla/AcceptanceTests/test_non_string_enums.py b/test/vanilla/AcceptanceTests/test_non_string_enums.py index 5fc4a948801..6cebeaefef2 100644 --- a/test/vanilla/AcceptanceTests/test_non_string_enums.py +++ b/test/vanilla/AcceptanceTests/test_non_string_enums.py @@ -38,17 +38,21 @@ def client(): class TestNonStringEnums(object): def test_put_int_enum(self, client): - result = client.int.put(IntEnum.two_hundred) + result = client.int.put(IntEnum.TWO_HUNDRED) assert result == "Nice job posting an int enum" def test_get_int_enum(self, client): result = client.int.get() - assert result == IntEnum.four_hundred_twenty_nine.value + assert result == IntEnum.FOUR_HUNDRED_TWENTY_NINE.value def test_put_float_enum(self, client): - result = client.float.put(FloatEnum.two_hundred4) + result = client.float.put(FloatEnum.TWO_HUNDRED4) assert result == "Nice job posting a float enum" def test_get_float_enum(self, client): result = client.float.get() - assert result == FloatEnum.four_hundred_twenty_nine1.value + assert result == FloatEnum.FOUR_HUNDRED_TWENTY_NINE1.value + + def test_lowercase_enum_retrieval(self): + assert FloatEnum.four_hundred_twenty_nine1 == FloatEnum.FOUR_HUNDRED_TWENTY_NINE1 + assert 429.1 == FloatEnum.FOUR_HUNDRED_TWENTY_NINE1 \ No newline at end of file diff --git a/test/vanilla/AcceptanceTests/test_string_tests.py b/test/vanilla/AcceptanceTests/test_string_tests.py index f492627b258..8687d8ac87d 100644 --- a/test/vanilla/AcceptanceTests/test_string_tests.py +++ b/test/vanilla/AcceptanceTests/test_string_tests.py @@ -105,9 +105,9 @@ def test_get_not_provided(self, client): assert client.string.get_not_provided() is None def test_enum_not_expandable(self, client): - assert Colors.red_color == client.enum.get_not_expandable() + assert Colors.RED_COLOR == client.enum.get_not_expandable() client.enum.put_not_expandable('red color') - client.enum.put_not_expandable(Colors.red_color) + client.enum.put_not_expandable(Colors.RED_COLOR) # Autorest v3 is switching behavior here. Old Autorest would have thrown a serialization error, # but now we allow the user to pass strings as enums, so the raised exception is different. with pytest.raises(HttpResponseError): @@ -124,14 +124,18 @@ def test_get_null_base64_url_encoded(self, client): assert client.string.get_null_base64_url_encoded() is None def test_enum_referenced(self, client): - client.enum.put_referenced(Colors.red_color) + client.enum.put_referenced(Colors.RED_COLOR) client.enum.put_referenced("red color") - assert client.enum.get_referenced() == Colors.red_color + assert client.enum.get_referenced() == Colors.RED_COLOR def test_enum_referenced_constant(self, client): client.enum.put_referenced_constant() - assert client.enum.get_referenced_constant().color_constant == Colors.green_color.value + assert client.enum.get_referenced_constant().color_constant == Colors.GREEN_COLOR.value def test_patch_file(self): from bodystring.models import PatchAddedModel + + def test_lowercase_enum_retrieval(self): + assert Colors.green_color == Colors.GREEN_COLOR + assert "green-color" == Colors.GREEN_COLOR From 3fc074c86116b7950c985d54442f5ad84d08b6cd Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Mon, 15 Jun 2020 17:04:12 -0400 Subject: [PATCH 3/9] update changelog --- ChangeLog.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ChangeLog.md b/ChangeLog.md index 517f501d6c4..4ad56c84dca 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -9,6 +9,11 @@ Modelerfour version: 4.13.351 `AzureKeyCredentialPolicy`. The value passed in will be the default authentication policy in the client's config, so users using the generated library will use that auth policy unless they pass in a separate one through kwargs #686 +**Bug Fixes** + +- Make enum names all upper case. This fixes issues that arise if the name of an enum is also a method that can be applied to, say, a string. +For example, if an enum's name is count. Made sure this fix will not break users currently accessing with lower case enum names #692 + ### 2020-06-08 - 5.1.0-preview.2 Modelerfour version: 4.13.351 From 3d5727f57aaa9d2637faf1773677e5b528b473ac Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Mon, 15 Jun 2020 17:07:33 -0400 Subject: [PATCH 4/9] fix whitespace --- autorest/codegen/templates/enum_container.py.jinja2 | 1 - .../_auto_rest_long_running_operation_test_service_enums.py | 1 - .../Paging/paging/models/_auto_rest_paging_test_service_enums.py | 1 - .../storage/models/_storage_management_client_enums.py | 1 - .../multiapi/v3/models/_multiapi_service_client_enums.py | 1 - .../v3/models/_multiapi_service_client_enums.py | 1 - .../multiapinoasync/v3/models/_multiapi_service_client_enums.py | 1 - .../submodule/v3/models/_multiapi_service_client_enums.py | 1 - .../models/_auto_rest_swagger_bat_array_service_enums.py | 1 - .../array/models/_auto_rest_swagger_bat_array_service_enums.py | 1 - .../bodycomplex/models/_auto_rest_complex_test_service_enums.py | 1 - .../bodystring/models/_auto_rest_swagger_bat_service_enums.py | 1 - .../extensibleenumsswagger/models/_pet_store_inc_enums.py | 1 - .../header/models/_auto_rest_swagger_bat_header_service_enums.py | 1 - .../MediaTypes/mediatypes/models/_media_types_client_enums.py | 1 - .../models/_auto_rest_resource_flattening_test_service_enums.py | 1 - .../nonstringenums/models/_non_string_enums_client_enums.py | 1 - .../Url/url/models/_auto_rest_url_test_service_enums.py | 1 - .../xmlservice/models/_auto_rest_swagger_batxml_service_enums.py | 1 - 19 files changed, 19 deletions(-) diff --git a/autorest/codegen/templates/enum_container.py.jinja2 b/autorest/codegen/templates/enum_container.py.jinja2 index 28c3610cfd5..c22f61a477c 100644 --- a/autorest/codegen/templates/enum_container.py.jinja2 +++ b/autorest/codegen/templates/enum_container.py.jinja2 @@ -19,7 +19,6 @@ class CaseInsensitiveEnumMeta(EnumMeta): except KeyError: raise AttributeError(name) from None - {% for enum in code_model.enums.values() | sort %} {% include "enum.py.jinja2" %} {% endfor %} \ No newline at end of file diff --git a/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py b/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py index 893a1be39fc..ea00c213582 100644 --- a/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py +++ b/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class OperationResultStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): """The status of the request """ diff --git a/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py b/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py index f31f31389a0..741228821dd 100644 --- a/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py +++ b/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class OperationResultStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): """The status of the request """ diff --git a/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py b/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py index 4d3bd691e7f..65d6820c2b4 100644 --- a/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py +++ b/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class AccountStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Gets the status indicating whether the primary location of the storage account is available or unavailable. diff --git a/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py index ab1dd684b80..575c5259901 100644 --- a/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Content type for upload """ diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py index ab1dd684b80..575c5259901 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Content type for upload """ diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py index ab1dd684b80..575c5259901 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Content type for upload """ diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py index ab1dd684b80..575c5259901 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Content type for upload """ diff --git a/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py index 5f03dd16938..d6482ca9310 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class Enum0(str, Enum, metaclass=CaseInsensitiveEnumMeta): FOO1 = "foo1" diff --git a/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py index 5f03dd16938..d6482ca9310 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class Enum0(str, Enum, metaclass=CaseInsensitiveEnumMeta): FOO1 = "foo1" diff --git a/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py index 710e1c3a0ce..bebb1723dce 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class CMYKColors(str, Enum, metaclass=CaseInsensitiveEnumMeta): CYAN = "cyan" diff --git a/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py index 2d626f73f38..c8186256e79 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class Colors(str, Enum, metaclass=CaseInsensitiveEnumMeta): RED_COLOR = "red color" diff --git a/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py b/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py index 549ddff05a7..a36e8dda2dd 100644 --- a/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class DaysOfWeekExtensibleEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Type of Pet """ diff --git a/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py index 7cb201f3398..39d547f1d9b 100644 --- a/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class GreyscaleColors(str, Enum, metaclass=CaseInsensitiveEnumMeta): WHITE = "White" diff --git a/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py b/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py index ab1dd684b80..575c5259901 100644 --- a/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Content type for upload """ diff --git a/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py index 4f7fabf9ff5..165153e82f6 100644 --- a/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class FlattenedProductPropertiesProvisioningStateValues(str, Enum, metaclass=CaseInsensitiveEnumMeta): SUCCEEDED = "Succeeded" diff --git a/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py b/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py index aa85e7d35b9..a5ed3576f1e 100644 --- a/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class FloatEnum(float, Enum, metaclass=CaseInsensitiveEnumMeta): """List of float enums """ diff --git a/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py index df57809ebd6..137e16341c4 100644 --- a/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class UriColor(str, Enum, metaclass=CaseInsensitiveEnumMeta): RED_COLOR = "red color" diff --git a/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py index f85abc8fa0a..c545e498461 100644 --- a/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py @@ -25,7 +25,6 @@ def __getattr__(cls, name): raise AttributeError(name) from None - class AccessTier(str, Enum, metaclass=CaseInsensitiveEnumMeta): P4 = "P4" From 85eebed2cdf101d70eef8999d39c4879c2b15546 Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Fri, 26 Jun 2020 16:52:34 -0400 Subject: [PATCH 5/9] add with_metaclass from six --- autorest/codegen/templates/enum.py.jinja2 | 2 +- .../templates/enum_container.py.jinja2 | 1 + ...ng_running_operation_test_service_enums.py | 7 +++-- .../_auto_rest_paging_test_service_enums.py | 3 +- .../_storage_management_client_enums.py | 13 ++++---- .../models/_multiapi_service_client_enums.py | 3 +- .../models/_multiapi_service_client_enums.py | 3 +- .../models/_multiapi_service_client_enums.py | 30 +++++++++++++++---- .../models/_multiapi_service_client_enums.py | 3 +- .../models/_multiapi_service_client_enums.py | 3 +- ...to_rest_swagger_bat_array_service_enums.py | 7 +++-- ...to_rest_swagger_bat_array_service_enums.py | 7 +++-- .../_auto_rest_complex_test_service_enums.py | 5 ++-- .../_auto_rest_swagger_bat_service_enums.py | 3 +- .../models/_pet_store_inc_enums.py | 5 ++-- ...o_rest_swagger_bat_header_service_enums.py | 3 +- .../models/_media_types_client_enums.py | 3 +- ..._resource_flattening_test_service_enums.py | 3 +- .../models/_non_string_enums_client_enums.py | 5 ++-- .../_auto_rest_url_test_service_enums.py | 3 +- ..._auto_rest_swagger_batxml_service_enums.py | 17 ++++++----- 21 files changed, 83 insertions(+), 46 deletions(-) diff --git a/autorest/codegen/templates/enum.py.jinja2 b/autorest/codegen/templates/enum.py.jinja2 index 95f6b6996e2..f41c8ad1f01 100644 --- a/autorest/codegen/templates/enum.py.jinja2 +++ b/autorest/codegen/templates/enum.py.jinja2 @@ -1,5 +1,5 @@ -class {{ enum.name }}({{ enum.enum_type.type_annotation }}, Enum, metaclass=CaseInsensitiveEnumMeta): +class {{ enum.name }}(with_metaclass(CaseInsensitiveEnumMeta, {{ enum.enum_type.type_annotation }}, Enum)): {% if enum.description %} """{{ enum.description | wordwrap(width=95, break_long_words=False, wrapstring='\n ') }} """ diff --git a/autorest/codegen/templates/enum_container.py.jinja2 b/autorest/codegen/templates/enum_container.py.jinja2 index c22f61a477c..0508c01f6a0 100644 --- a/autorest/codegen/templates/enum_container.py.jinja2 +++ b/autorest/codegen/templates/enum_container.py.jinja2 @@ -2,6 +2,7 @@ {{ code_model.options['license_header'] }} from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): diff --git a/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py b/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py index ea00c213582..85c8be3f75f 100644 --- a/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py +++ b/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class OperationResultStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class OperationResultStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """The status of the request """ @@ -41,7 +42,7 @@ class OperationResultStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): DELETED = "Deleted" OK = "OK" -class ProductPropertiesProvisioningStateValues(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class ProductPropertiesProvisioningStateValues(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): SUCCEEDED = "Succeeded" FAILED = "Failed" @@ -55,7 +56,7 @@ class ProductPropertiesProvisioningStateValues(str, Enum, metaclass=CaseInsensit DELETED = "Deleted" OK = "OK" -class SubProductPropertiesProvisioningStateValues(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class SubProductPropertiesProvisioningStateValues(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): SUCCEEDED = "Succeeded" FAILED = "Failed" diff --git a/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py b/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py index 741228821dd..91513fffb70 100644 --- a/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py +++ b/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class OperationResultStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class OperationResultStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """The status of the request """ diff --git a/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py b/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py index 65d6820c2b4..fef8b1b130b 100644 --- a/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py +++ b/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class AccountStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class AccountStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Gets the status indicating whether the primary location of the storage account is available or unavailable. """ @@ -33,7 +34,7 @@ class AccountStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): AVAILABLE = "Available" UNAVAILABLE = "Unavailable" -class AccountType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class AccountType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Gets or sets the account type. """ @@ -43,12 +44,12 @@ class AccountType(str, Enum, metaclass=CaseInsensitiveEnumMeta): STANDARD_RAGRS = "Standard_RAGRS" PREMIUM_LRS = "Premium_LRS" -class KeyName(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class KeyName(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): KEY1 = "key1" KEY2 = "key2" -class ProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class ProvisioningState(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Gets the status of the storage account at the time the operation was called. """ @@ -56,7 +57,7 @@ class ProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta): RESOLVING_DNS = "ResolvingDNS" SUCCEEDED = "Succeeded" -class Reason(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class Reason(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Gets the reason that a storage account name could not be used. The Reason element is only returned if NameAvailable is false. """ @@ -64,7 +65,7 @@ class Reason(str, Enum, metaclass=CaseInsensitiveEnumMeta): ACCOUNT_NAME_INVALID = "AccountNameInvalid" ALREADY_EXISTS = "AlreadyExists" -class UsageUnit(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class UsageUnit(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Gets the unit of measurement. """ diff --git a/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py index 575c5259901..dbc2306660b 100644 --- a/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py index 575c5259901..dbc2306660b 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py index bf4c202fc64..dbc2306660b 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py @@ -6,13 +6,31 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta +from six import with_metaclass -class ContentType(str, Enum): +class CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) from None + + +class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ - application_pdf = "application/pdf" #: Content Type 'application/pdf'. - image_jpeg = "image/jpeg" #: Content Type 'image/jpeg'. - image_png = "image/png" #: Content Type 'image/png'. - image_tiff = "image/tiff" #: Content Type 'image/tiff'. + APPLICATION_PDF = "application/pdf" #: Content Type 'application/pdf'. + IMAGE_JPEG = "image/jpeg" #: Content Type 'image/jpeg'. + IMAGE_PNG = "image/png" #: Content Type 'image/png'. + IMAGE_TIFF = "image/tiff" #: Content Type 'image/tiff'. diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py index 575c5259901..dbc2306660b 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py index 575c5259901..dbc2306660b 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py index d6482ca9310..ce32cd569ce 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,19 +26,19 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class Enum0(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class Enum0(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" FOO3 = "foo3" -class Enum1(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class Enum1(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" FOO3 = "foo3" -class FooEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class FooEnum(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" diff --git a/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py index d6482ca9310..ce32cd569ce 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,19 +26,19 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class Enum0(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class Enum0(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" FOO3 = "foo3" -class Enum1(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class Enum1(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" FOO3 = "foo3" -class FooEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class FooEnum(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" diff --git a/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py index bebb1723dce..101a1c4023d 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,14 +26,14 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class CMYKColors(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class CMYKColors(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): CYAN = "cyan" MAGENTA = "Magenta" YELLOW = "YELLOW" BLAC_K = "blacK" -class GoblinSharkColor(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class GoblinSharkColor(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Colors possible """ diff --git a/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py index c8186256e79..1d3dcb4dda1 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class Colors(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class Colors(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): RED_COLOR = "red color" GREEN_COLOR = "green-color" diff --git a/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py b/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py index a36e8dda2dd..b008b537f6f 100644 --- a/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class DaysOfWeekExtensibleEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class DaysOfWeekExtensibleEnum(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Type of Pet """ @@ -37,7 +38,7 @@ class DaysOfWeekExtensibleEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): SATURDAY = "Saturday" SUNDAY = "Sunday" -class IntEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class IntEnum(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): ONE = "1" #: one. TWO = "2" #: two. diff --git a/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py index 39d547f1d9b..b77df3ebd44 100644 --- a/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class GreyscaleColors(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class GreyscaleColors(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): WHITE = "White" BLACK = "black" diff --git a/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py b/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py index 575c5259901..dbc2306660b 100644 --- a/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class ContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py index 165153e82f6..fd5b6e6621a 100644 --- a/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class FlattenedProductPropertiesProvisioningStateValues(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class FlattenedProductPropertiesProvisioningStateValues(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): SUCCEEDED = "Succeeded" FAILED = "Failed" diff --git a/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py b/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py index a5ed3576f1e..bbf389460da 100644 --- a/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class FloatEnum(float, Enum, metaclass=CaseInsensitiveEnumMeta): +class FloatEnum(with_metaclass(CaseInsensitiveEnumMeta, float, Enum)): """List of float enums """ @@ -35,7 +36,7 @@ class FloatEnum(float, Enum, metaclass=CaseInsensitiveEnumMeta): FOUR_HUNDRED_SIX2 = 406.2 FOUR_HUNDRED_TWENTY_NINE1 = 429.1 -class IntEnum(int, Enum, metaclass=CaseInsensitiveEnumMeta): +class IntEnum(with_metaclass(CaseInsensitiveEnumMeta, int, Enum)): """List of integer enums """ diff --git a/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py index 137e16341c4..2a66b85c55f 100644 --- a/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class UriColor(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class UriColor(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): RED_COLOR = "red color" GREEN_COLOR = "green color" diff --git a/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py index c545e498461..f2fe3487f53 100644 --- a/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from six import with_metaclass class CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): @@ -25,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) from None -class AccessTier(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class AccessTier(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): P4 = "P4" P6 = "P6" @@ -38,30 +39,30 @@ class AccessTier(str, Enum, metaclass=CaseInsensitiveEnumMeta): COOL = "Cool" ARCHIVE = "Archive" -class ArchiveStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class ArchiveStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): REHYDRATE_PENDING_TO_HOT = "rehydrate-pending-to-hot" REHYDRATE_PENDING_TO_COOL = "rehydrate-pending-to-cool" -class BlobType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class BlobType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): BLOCK_BLOB = "BlockBlob" PAGE_BLOB = "PageBlob" APPEND_BLOB = "AppendBlob" -class CopyStatusType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class CopyStatusType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): PENDING = "pending" SUCCESS = "success" ABORTED = "aborted" FAILED = "failed" -class LeaseDurationType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class LeaseDurationType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): INFINITE = "infinite" FIXED = "fixed" -class LeaseStateType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class LeaseStateType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): AVAILABLE = "available" LEASED = "leased" @@ -69,12 +70,12 @@ class LeaseStateType(str, Enum, metaclass=CaseInsensitiveEnumMeta): BREAKING = "breaking" BROKEN = "broken" -class LeaseStatusType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class LeaseStatusType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): LOCKED = "locked" UNLOCKED = "unlocked" -class PublicAccessType(str, Enum, metaclass=CaseInsensitiveEnumMeta): +class PublicAccessType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): CONTAINER = "container" BLOB = "blob" From a46144411a06c1997b69db1fed48e57b9fb15f38 Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Fri, 26 Jun 2020 17:38:55 -0400 Subject: [PATCH 6/9] remove 'from None' in enum meta error raising --- autorest/codegen/templates/enum_container.py.jinja2 | 2 +- .../_auto_rest_long_running_operation_test_service_enums.py | 2 +- .../paging/models/_auto_rest_paging_test_service_enums.py | 2 +- .../storage/models/_storage_management_client_enums.py | 2 +- .../multiapi/v3/models/_multiapi_service_client_enums.py | 2 +- .../v3/models/_multiapi_service_client_enums.py | 2 +- .../v3/models/_multiapi_service_client_enums.py | 2 +- .../multiapinoasync/v3/models/_multiapi_service_client_enums.py | 2 +- .../submodule/v3/models/_multiapi_service_client_enums.py | 2 +- .../models/_auto_rest_swagger_bat_array_service_enums.py | 2 +- .../array/models/_auto_rest_swagger_bat_array_service_enums.py | 2 +- .../bodycomplex/models/_auto_rest_complex_test_service_enums.py | 2 +- .../bodystring/models/_auto_rest_swagger_bat_service_enums.py | 2 +- .../extensibleenumsswagger/models/_pet_store_inc_enums.py | 2 +- .../models/_auto_rest_swagger_bat_header_service_enums.py | 2 +- .../MediaTypes/mediatypes/models/_media_types_client_enums.py | 2 +- .../models/_auto_rest_resource_flattening_test_service_enums.py | 2 +- .../nonstringenums/models/_non_string_enums_client_enums.py | 2 +- .../Url/url/models/_auto_rest_url_test_service_enums.py | 2 +- .../models/_auto_rest_swagger_batxml_service_enums.py | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/autorest/codegen/templates/enum_container.py.jinja2 b/autorest/codegen/templates/enum_container.py.jinja2 index 0508c01f6a0..3235cb769a9 100644 --- a/autorest/codegen/templates/enum_container.py.jinja2 +++ b/autorest/codegen/templates/enum_container.py.jinja2 @@ -18,7 +18,7 @@ class CaseInsensitiveEnumMeta(EnumMeta): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) {% for enum in code_model.enums.values() | sort %} {% include "enum.py.jinja2" %} diff --git a/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py b/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py index 85c8be3f75f..f23f12d40fb 100644 --- a/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py +++ b/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class OperationResultStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py b/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py index 91513fffb70..733be6cfd49 100644 --- a/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py +++ b/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class OperationResultStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py b/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py index fef8b1b130b..cf692dd5dfc 100644 --- a/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py +++ b/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class AccountStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py index dbc2306660b..3d3965df070 100644 --- a/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py index dbc2306660b..3d3965df070 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py index dbc2306660b..3d3965df070 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py index dbc2306660b..3d3965df070 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py index dbc2306660b..3d3965df070 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py index ce32cd569ce..81fc17a8064 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class Enum0(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py index ce32cd569ce..81fc17a8064 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class Enum0(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py index 101a1c4023d..f2f749e5d52 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class CMYKColors(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py index 1d3dcb4dda1..52e47c89c67 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class Colors(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py b/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py index b008b537f6f..ec702c2fabc 100644 --- a/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class DaysOfWeekExtensibleEnum(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py index b77df3ebd44..d4e29bc90fa 100644 --- a/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class GreyscaleColors(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py b/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py index dbc2306660b..3d3965df070 100644 --- a/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py index fd5b6e6621a..534aa218308 100644 --- a/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class FlattenedProductPropertiesProvisioningStateValues(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py b/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py index bbf389460da..955a75c9484 100644 --- a/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class FloatEnum(with_metaclass(CaseInsensitiveEnumMeta, float, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py index 2a66b85c55f..a951a9ef704 100644 --- a/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class UriColor(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): diff --git a/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py index f2fe3487f53..7cbed2db52a 100644 --- a/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py @@ -23,7 +23,7 @@ def __getattr__(cls, name): try: return cls._member_map_[name.upper()] except KeyError: - raise AttributeError(name) from None + raise AttributeError(name) class AccessTier(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): From 76e34809076b25a9b9c0985af682671b22174aad Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Mon, 29 Jun 2020 12:16:04 -0400 Subject: [PATCH 7/9] CaseInsensitiveEnumMeta -> _CaseInsensitiveEnumMeta --- autorest/codegen/templates/enum.py.jinja2 | 2 +- .../codegen/templates/enum_container.py.jinja2 | 2 +- ...ong_running_operation_test_service_enums.py | 8 ++++---- .../_auto_rest_paging_test_service_enums.py | 4 ++-- .../models/_storage_management_client_enums.py | 14 +++++++------- .../models/_multiapi_service_client_enums.py | 4 ++-- .../models/_multiapi_service_client_enums.py | 4 ++-- .../models/_multiapi_service_client_enums.py | 4 ++-- .../models/_multiapi_service_client_enums.py | 4 ++-- .../models/_multiapi_service_client_enums.py | 4 ++-- ...uto_rest_swagger_bat_array_service_enums.py | 8 ++++---- ...uto_rest_swagger_bat_array_service_enums.py | 8 ++++---- .../_auto_rest_complex_test_service_enums.py | 6 +++--- .../_auto_rest_swagger_bat_service_enums.py | 4 ++-- .../models/_pet_store_inc_enums.py | 6 +++--- ...to_rest_swagger_bat_header_service_enums.py | 4 ++-- .../models/_media_types_client_enums.py | 4 ++-- ...t_resource_flattening_test_service_enums.py | 4 ++-- .../models/_non_string_enums_client_enums.py | 6 +++--- .../_auto_rest_url_test_service_enums.py | 4 ++-- .../_auto_rest_swagger_batxml_service_enums.py | 18 +++++++++--------- 21 files changed, 61 insertions(+), 61 deletions(-) diff --git a/autorest/codegen/templates/enum.py.jinja2 b/autorest/codegen/templates/enum.py.jinja2 index f41c8ad1f01..83273cbffdb 100644 --- a/autorest/codegen/templates/enum.py.jinja2 +++ b/autorest/codegen/templates/enum.py.jinja2 @@ -1,5 +1,5 @@ -class {{ enum.name }}(with_metaclass(CaseInsensitiveEnumMeta, {{ enum.enum_type.type_annotation }}, Enum)): +class {{ enum.name }}(with_metaclass(_CaseInsensitiveEnumMeta, {{ enum.enum_type.type_annotation }}, Enum)): {% if enum.description %} """{{ enum.description | wordwrap(width=95, break_long_words=False, wrapstring='\n ') }} """ diff --git a/autorest/codegen/templates/enum_container.py.jinja2 b/autorest/codegen/templates/enum_container.py.jinja2 index 3235cb769a9..5f35a581688 100644 --- a/autorest/codegen/templates/enum_container.py.jinja2 +++ b/autorest/codegen/templates/enum_container.py.jinja2 @@ -4,7 +4,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) diff --git a/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py b/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py index f23f12d40fb..05783dd69e8 100644 --- a/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py +++ b/test/azure/Expected/AcceptanceTests/Lro/lro/models/_auto_rest_long_running_operation_test_service_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class OperationResultStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class OperationResultStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """The status of the request """ @@ -42,7 +42,7 @@ class OperationResultStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): DELETED = "Deleted" OK = "OK" -class ProductPropertiesProvisioningStateValues(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class ProductPropertiesProvisioningStateValues(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): SUCCEEDED = "Succeeded" FAILED = "Failed" @@ -56,7 +56,7 @@ class ProductPropertiesProvisioningStateValues(with_metaclass(CaseInsensitiveEnu DELETED = "Deleted" OK = "OK" -class SubProductPropertiesProvisioningStateValues(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class SubProductPropertiesProvisioningStateValues(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): SUCCEEDED = "Succeeded" FAILED = "Failed" diff --git a/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py b/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py index 733be6cfd49..f11f0a2743b 100644 --- a/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py +++ b/test/azure/Expected/AcceptanceTests/Paging/paging/models/_auto_rest_paging_test_service_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class OperationResultStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class OperationResultStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """The status of the request """ diff --git a/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py b/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py index cf692dd5dfc..46dd427d43b 100644 --- a/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py +++ b/test/azure/Expected/AcceptanceTests/StorageManagementClient/storage/models/_storage_management_client_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class AccountStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class AccountStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Gets the status indicating whether the primary location of the storage account is available or unavailable. """ @@ -34,7 +34,7 @@ class AccountStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): AVAILABLE = "Available" UNAVAILABLE = "Unavailable" -class AccountType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class AccountType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Gets or sets the account type. """ @@ -44,12 +44,12 @@ class AccountType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): STANDARD_RAGRS = "Standard_RAGRS" PREMIUM_LRS = "Premium_LRS" -class KeyName(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class KeyName(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): KEY1 = "key1" KEY2 = "key2" -class ProvisioningState(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class ProvisioningState(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Gets the status of the storage account at the time the operation was called. """ @@ -57,7 +57,7 @@ class ProvisioningState(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): RESOLVING_DNS = "ResolvingDNS" SUCCEEDED = "Succeeded" -class Reason(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class Reason(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Gets the reason that a storage account name could not be used. The Reason element is only returned if NameAvailable is false. """ @@ -65,7 +65,7 @@ class Reason(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): ACCOUNT_NAME_INVALID = "AccountNameInvalid" ALREADY_EXISTS = "AlreadyExists" -class UsageUnit(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class UsageUnit(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Gets the unit of measurement. """ diff --git a/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py index 3d3965df070..0666ddf8a0b 100644 --- a/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/Multiapi/multiapi/v3/models/_multiapi_service_client_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class ContentType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py index 3d3965df070..0666ddf8a0b 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiCredentialDefaultPolicy/multiapicredentialdefaultpolicy/v3/models/_multiapi_service_client_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class ContentType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py index 3d3965df070..0666ddf8a0b 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiDataPlane/multiapidataplane/v3/models/_multiapi_service_client_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class ContentType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py index 3d3965df070..0666ddf8a0b 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiNoAsync/multiapinoasync/v3/models/_multiapi_service_client_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class ContentType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py b/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py index 3d3965df070..0666ddf8a0b 100644 --- a/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py +++ b/test/multiapi/Expected/AcceptanceTests/MultiapiWithSubmodule/multiapiwithsubmodule/submodule/v3/models/_multiapi_service_client_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class ContentType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py index 81fc17a8064..1ab22925d3f 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyArray/bodyarray/models/_auto_rest_swagger_bat_array_service_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,19 +26,19 @@ def __getattr__(cls, name): raise AttributeError(name) -class Enum0(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class Enum0(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" FOO3 = "foo3" -class Enum1(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class Enum1(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" FOO3 = "foo3" -class FooEnum(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class FooEnum(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" diff --git a/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py index 81fc17a8064..1ab22925d3f 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyArrayWithNamespaceFolders/vanilla/body/array/models/_auto_rest_swagger_bat_array_service_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,19 +26,19 @@ def __getattr__(cls, name): raise AttributeError(name) -class Enum0(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class Enum0(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" FOO3 = "foo3" -class Enum1(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class Enum1(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" FOO3 = "foo3" -class FooEnum(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class FooEnum(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): FOO1 = "foo1" FOO2 = "foo2" diff --git a/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py index f2f749e5d52..a496099ab4d 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyComplex/bodycomplex/models/_auto_rest_complex_test_service_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,14 +26,14 @@ def __getattr__(cls, name): raise AttributeError(name) -class CMYKColors(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class CMYKColors(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): CYAN = "cyan" MAGENTA = "Magenta" YELLOW = "YELLOW" BLAC_K = "blacK" -class GoblinSharkColor(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class GoblinSharkColor(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Colors possible """ diff --git a/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py b/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py index 52e47c89c67..944bb647105 100644 --- a/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/BodyString/bodystring/models/_auto_rest_swagger_bat_service_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class Colors(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class Colors(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): RED_COLOR = "red color" GREEN_COLOR = "green-color" diff --git a/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py b/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py index ec702c2fabc..e419229b59c 100644 --- a/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/ExtensibleEnums/extensibleenumsswagger/models/_pet_store_inc_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class DaysOfWeekExtensibleEnum(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class DaysOfWeekExtensibleEnum(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Type of Pet """ @@ -38,7 +38,7 @@ class DaysOfWeekExtensibleEnum(with_metaclass(CaseInsensitiveEnumMeta, str, Enum SATURDAY = "Saturday" SUNDAY = "Sunday" -class IntEnum(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class IntEnum(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): ONE = "1" #: one. TWO = "2" #: two. diff --git a/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py index d4e29bc90fa..8ffb2b38a6d 100644 --- a/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Header/header/models/_auto_rest_swagger_bat_header_service_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class GreyscaleColors(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class GreyscaleColors(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): WHITE = "White" BLACK = "black" diff --git a/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py b/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py index 3d3965df070..0666ddf8a0b 100644 --- a/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/MediaTypes/mediatypes/models/_media_types_client_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class ContentType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class ContentType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): """Content type for upload """ diff --git a/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py index 534aa218308..7578bb142cd 100644 --- a/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/ModelFlattening/modelflattening/models/_auto_rest_resource_flattening_test_service_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class FlattenedProductPropertiesProvisioningStateValues(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class FlattenedProductPropertiesProvisioningStateValues(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): SUCCEEDED = "Succeeded" FAILED = "Failed" diff --git a/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py b/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py index 955a75c9484..f72658a22e3 100644 --- a/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/NonStringEnums/nonstringenums/models/_non_string_enums_client_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class FloatEnum(with_metaclass(CaseInsensitiveEnumMeta, float, Enum)): +class FloatEnum(with_metaclass(_CaseInsensitiveEnumMeta, float, Enum)): """List of float enums """ @@ -36,7 +36,7 @@ class FloatEnum(with_metaclass(CaseInsensitiveEnumMeta, float, Enum)): FOUR_HUNDRED_SIX2 = 406.2 FOUR_HUNDRED_TWENTY_NINE1 = 429.1 -class IntEnum(with_metaclass(CaseInsensitiveEnumMeta, int, Enum)): +class IntEnum(with_metaclass(_CaseInsensitiveEnumMeta, int, Enum)): """List of integer enums """ diff --git a/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py index a951a9ef704..4f29e0e6732 100644 --- a/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Url/url/models/_auto_rest_url_test_service_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class UriColor(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class UriColor(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): RED_COLOR = "red color" GREEN_COLOR = "green color" diff --git a/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py b/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py index 7cbed2db52a..51ee11b0d10 100644 --- a/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py +++ b/test/vanilla/Expected/AcceptanceTests/Xml/xmlservice/models/_auto_rest_swagger_batxml_service_enums.py @@ -9,7 +9,7 @@ from enum import Enum, EnumMeta from six import with_metaclass -class CaseInsensitiveEnumMeta(EnumMeta): +class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name): return super().__getitem__(name.upper()) @@ -26,7 +26,7 @@ def __getattr__(cls, name): raise AttributeError(name) -class AccessTier(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class AccessTier(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): P4 = "P4" P6 = "P6" @@ -39,30 +39,30 @@ class AccessTier(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): COOL = "Cool" ARCHIVE = "Archive" -class ArchiveStatus(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class ArchiveStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): REHYDRATE_PENDING_TO_HOT = "rehydrate-pending-to-hot" REHYDRATE_PENDING_TO_COOL = "rehydrate-pending-to-cool" -class BlobType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class BlobType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): BLOCK_BLOB = "BlockBlob" PAGE_BLOB = "PageBlob" APPEND_BLOB = "AppendBlob" -class CopyStatusType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class CopyStatusType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): PENDING = "pending" SUCCESS = "success" ABORTED = "aborted" FAILED = "failed" -class LeaseDurationType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class LeaseDurationType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): INFINITE = "infinite" FIXED = "fixed" -class LeaseStateType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class LeaseStateType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): AVAILABLE = "available" LEASED = "leased" @@ -70,12 +70,12 @@ class LeaseStateType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): BREAKING = "breaking" BROKEN = "broken" -class LeaseStatusType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class LeaseStatusType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): LOCKED = "locked" UNLOCKED = "unlocked" -class PublicAccessType(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class PublicAccessType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): CONTAINER = "container" BLOB = "blob" From c60fcee1a5de26622720823828377313b130671e Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Tue, 30 Jun 2020 16:46:34 -0400 Subject: [PATCH 8/9] add unittest for enums with callable names --- test/unittests/test_enums.py | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 test/unittests/test_enums.py diff --git a/test/unittests/test_enums.py b/test/unittests/test_enums.py new file mode 100644 index 00000000000..6bc9ed1d4e9 --- /dev/null +++ b/test/unittests/test_enums.py @@ -0,0 +1,46 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +class _CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) + +class EnumsWithCallableNames(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Gets the unit of measurement. + """ + + COUNT = "count" + ENCODE = "encode" + FIND = "find" + JOIN = "join" + +def test_count(): + assert EnumsWithCallableNames.COUNT == "count" + assert callable(EnumsWithCallableNames.count) + +def test_encode(): + assert EnumsWithCallableNames.ENCODE == "encode" + assert callable(EnumsWithCallableNames.encode) + +def test_find(): + assert EnumsWithCallableNames.FIND == "find" + assert callable(EnumsWithCallableNames.find) + +def test_join(): + assert EnumsWithCallableNames.JOIN == "join" + assert callable(EnumsWithCallableNames.join) \ No newline at end of file From 3e2b2fcaafe479bcdf3063f09166ba033e66d20c Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Tue, 30 Jun 2020 18:08:20 -0400 Subject: [PATCH 9/9] add back imports --- test/unittests/test_enums.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/unittests/test_enums.py b/test/unittests/test_enums.py index 6bc9ed1d4e9..9da7228bd58 100644 --- a/test/unittests/test_enums.py +++ b/test/unittests/test_enums.py @@ -3,6 +3,8 @@ # Licensed under the MIT License. See License.txt in the project root for # license information. # -------------------------------------------------------------------------- +from enum import Enum, EnumMeta +from six import with_metaclass class _CaseInsensitiveEnumMeta(EnumMeta): def __getitem__(self, name):