Skip to content

Commit 464d692

Browse files
authored
Merge pull request #225 from nekitmish/fix-strenum-type-inspection
Inspect StrEnum as an Enum, not string
2 parents 069b363 + fa1d11c commit 464d692

File tree

4 files changed

+36
-8
lines changed

4 files changed

+36
-8
lines changed

poetry.lock

+24-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "winter"
3-
version = "9.6.3"
3+
version = "9.6.4"
44
homepage = "https://github.com/WinterFramework/winter"
55
description = "Web Framework inspired by Spring Framework"
66
authors = ["Alexander Egorov <[email protected]>"]
@@ -42,6 +42,7 @@ python-dateutil = "2.8.0"
4242
injector = "0.15.0"
4343
SQLAlchemy = "~=1.3"
4444
typing-extensions = "^3.10.0"
45+
StrEnum = "^0.4.8"
4546

4647
[tool.poetry.dev-dependencies]
4748
codecov = ">=2.0.9"

tests/winter_openapi/test_type_inspection.py

+8
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from dataclasses import dataclass
55
from enum import Enum
66
from enum import IntEnum
7+
from enum import auto
78
from typing import Any
89
from typing import Generic
910
from typing import List
@@ -14,6 +15,7 @@
1415

1516
import pytest
1617
from drf_yasg import openapi
18+
from strenum import StrEnum
1719

1820
from winter.core.utils import TypeWrapper
1921
from winter.data.pagination import Page
@@ -51,6 +53,11 @@ class StringValueEnum(Enum):
5153
GREEN = 'green'
5254

5355

56+
class StringEnum(StrEnum):
57+
RED = auto()
58+
GREEN = auto()
59+
60+
5461
class MixedValueEnum(Enum):
5562
RED = 123
5663
GREEN = 'green'
@@ -90,6 +97,7 @@ class CustomPage(Page, Generic[CustomPageItem]):
9097
(IntegerEnum, TypeInfo(openapi.TYPE_INTEGER, enum=[1, 2])),
9198
(IntegerValueEnum, TypeInfo(openapi.TYPE_INTEGER, enum=[1, 2])),
9299
(StringValueEnum, TypeInfo(openapi.TYPE_STRING, enum=['red', 'green'])),
100+
(StringEnum, TypeInfo(openapi.TYPE_STRING, enum=['RED', 'GREEN'])),
93101
(MixedValueEnum, TypeInfo(openapi.TYPE_STRING, enum=[123, 'green'])),
94102
(List[IntegerValueEnum], TypeInfo(openapi.TYPE_ARRAY, child=TypeInfo(openapi.TYPE_INTEGER, enum=[1, 2]))),
95103
(List[StringValueEnum], TypeInfo(openapi.TYPE_ARRAY, child=TypeInfo(openapi.TYPE_STRING, enum=['red', 'green']))),

winter_openapi/type_inspection.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from typing import Type
1717

1818
from drf_yasg import openapi
19+
from strenum import StrEnum
1920

2021
from winter.core.utils import has_nested_type
2122
from winter.core.utils.typing import get_origin_type, get_generic_args
@@ -194,7 +195,7 @@ def inspect_iterable(hint_class) -> TypeInfo:
194195
return TypeInfo(openapi.TYPE_ARRAY, child=child_type_info)
195196

196197

197-
@register_type_inspector(enum.IntEnum, enum.Enum)
198+
@register_type_inspector(enum.IntEnum, StrEnum, enum.Enum)
198199
def inspect_enum(enum_class: Type[enum.Enum]) -> TypeInfo:
199200
enum_values = [entry.value for entry in enum_class]
200201
# Try to infer type based on enum values

0 commit comments

Comments
 (0)