我的HTTP客户端使用Python 请求库来访问CloudFlare代理的API。客户端将数字响应状态代码转换为HTTPStatus
枚举实例。简化......
import requests
from http import HTTPStatus
url = ...
response = requests.get(url)
status = HTTPStatus(response.status_code)
CloudFlare代理服务可以返回一些非官方的5xx HTTP状态代码:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#CloudFlare。这些导致HTTPStatus
引发ValueError
,因为522(连接超时)等代码不是Python HTTPStatus
中定义的lib/http/__init__.py
枚举的成员。< / p>
如何将非官方CloudFlare状态代码添加到HTTPStatus
枚举?或者,如何将HTTPStatus
枚举成员加载到其他枚举中以及非官方的CloudFlare状态代码?
Python 3.5 Enum
文档https://docs.python.org/3/library/enum.html描述了迄今为止阻碍我的限制。
第8.13.9节:只有在枚举时才允许对枚举进行子类化 枚举不定义任何成员。
第8.13.14.2节:关于
Enum
成员最有趣的事情是 他们是单身人士。EnumMeta
创建它们的所有内容 创建Enum
类本身,然后放置自定义__new__()
确保不会通过返回实例化任何新的实例 只有现有的成员实例。
答案 0 :(得分:0)
新的aenum library 1 有一个import aenum
from http import HTTPStatus
aenum.extend_enum(HTTPStatus, 'BAD_SPAM', 513, 'Too greasy')
aenum.extend_enum(HTTPStatus, 'BAD_EGGS', 514, 'Too green')
函数,可以将新成员添加到现有枚举中。
使用示例:
Enum
1 aenum library来自enum34 backport的作者/共同作者和Python 3.4 new IOSDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
数据类型。