如何在Python 3.5中向HTTPStatus添加自定义代码?

时间:2016-04-28 06:48:15

标签: python python-3.x enums

我的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__()   确保不会通过返回实例化任何新的实例   只有现有的成员实例。

1 个答案:

答案 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); 数据类型。