如何使用webargs从查询参数按值解析枚举?

2024-05-16 06:19:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下一个枚举:

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


Tags: falsenewvaluestatus模式argsenumquery
1条回答
网友
1楼 · 发布于 2024-05-16 06:19:52
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类型

相关问题 更多 >