如何使用 webargs 从查询参数中按值解析枚举?
How to parse enums by value from query parameters using webargs?
我有下一个枚举:
class EStatus(enum.IntEnum):
NEW = 0
MODIFIED = 1
和模式:
ARGS = {
'status': EnumField(EStatus, by_value=True, required=False)
}
在 Flask 中,我用 webargs
:
声明了 GET 方法
@use_args(ARGS, location='query')
def get(self, args: Dict[str, any]):
return []
它失败并出现错误:
{'messages': {'query': {'status': ['Invalid enum value 1']}}, 'schema': <GeneratedSchema(many=False)>, 'headers': None}
我在调试器中检查过,发现 EnumField
调用了 EStatus(value)
。问题是我的值是 str
类型,因为它来自查询参数。
如何在调用 EStatus(value)
之前将其 EnumField
转换为 int
?
class EStatus(enum.IntEnum):
NEW = 0
MODIFIED = 1
@staticmethod
def from_str(e_status: str):
e_status = e_status.upper()
if e_status in EStatus.__members__:
return EStatus[e_status]
else:
raise ValueError(f'{e_status} is not a valid EStatus.')
#You can use above from_str like below,
EStatus e_status = EStatus.from_str('NEW')
print(e_status.name)
print(e_status.value)
希望对于您的问题,您应该能够使用 from_str staticmethod 将 str 转换为 Enum 类型。
我有下一个枚举:
class EStatus(enum.IntEnum):
NEW = 0
MODIFIED = 1
和模式:
ARGS = {
'status': EnumField(EStatus, by_value=True, required=False)
}
在 Flask 中,我用 webargs
:
@use_args(ARGS, location='query')
def get(self, args: Dict[str, any]):
return []
它失败并出现错误:
{'messages': {'query': {'status': ['Invalid enum value 1']}}, 'schema': <GeneratedSchema(many=False)>, 'headers': None}
我在调试器中检查过,发现 EnumField
调用了 EStatus(value)
。问题是我的值是 str
类型,因为它来自查询参数。
如何在调用 EStatus(value)
之前将其 EnumField
转换为 int
?
class EStatus(enum.IntEnum):
NEW = 0
MODIFIED = 1
@staticmethod
def from_str(e_status: str):
e_status = e_status.upper()
if e_status in EStatus.__members__:
return EStatus[e_status]
else:
raise ValueError(f'{e_status} is not a valid EStatus.')
#You can use above from_str like below,
EStatus e_status = EStatus.from_str('NEW')
print(e_status.name)
print(e_status.value)
希望对于您的问题,您应该能够使用 from_str staticmethod 将 str 转换为 Enum 类型。