1 Star 0 Fork 0

os4us/bili2.0

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
json_rsp_ctrl.py 2.61 KB
一键复制 编辑 原始数据 按行查看 历史
yjqiang 提交于 2019-12-31 11:50 . 处理繁忙频繁
import enum
import attr
import pampy
@enum.unique
class JsonRspType(enum.IntEnum):
UNDEFINED = 0
OK = 1
LOGOUT = 2
IGNORE = 3
class In:
__slots__ = ('_value',)
def __init__(self, value):
self._value = value
def __call__(self, value):
return self._value in value
def patterns_actions(_, __, value):
if isinstance(value, (tuple, list)):
if not len(value) % 2:
iterator = iter(value)
for pattern, action in zip(iterator, iterator):
if not isinstance(action, JsonRspType):
raise ValueError(f'action 必须为 JsonRspType({action})')
return
raise ValueError('必须 pattern、action 配对')
raise ValueError('必须是 tuple 或 list')
BASE_CTRL = (
{'code': 0}, JsonRspType.OK, # 目前为止,0 肯定成功,如果例外,自己另写
{'code': 1024}, JsonRspType.IGNORE,
{'msg': In('操作太快')}, JsonRspType.IGNORE,
{'msg': In('繁忙')}, JsonRspType.IGNORE,
{'msg': In('频繁')}, JsonRspType.IGNORE,
{'message': In('繁忙')}, JsonRspType.IGNORE,
{'message': In('频繁')}, JsonRspType.IGNORE,
{'msg': In('登录')}, JsonRspType.LOGOUT,
{'msg': In('login')}, JsonRspType.LOGOUT,
)
@attr.s(slots=True, frozen=True)
class Ctrl:
extend = attr.ib(
validator=attr.validators.optional(patterns_actions))
# 是否支持全局的那个配置(1024之类的)
base = attr.ib(
default=BASE_CTRL,
validator=attr.validators.optional(patterns_actions)
)
# 如果都不匹配该怎么办
default = attr.ib(
default=JsonRspType.IGNORE,
validator=attr.validators.instance_of(JsonRspType)
)
def verify(self, dict_var: dict) -> JsonRspType:
if self.base is not None:
result = pampy.match(dict_var, *self.base, default=JsonRspType.UNDEFINED)
if result != JsonRspType.UNDEFINED:
return result
if self.extend is not None:
result = pampy.match(dict_var, *self.extend, default=JsonRspType.UNDEFINED)
if result != JsonRspType.UNDEFINED:
return result
return self.default
DEFAULT_CTRL = Ctrl(
extend=None,
base=BASE_CTRL,
default=JsonRspType.OK
)
ZERO_ONLY_CTRL = Ctrl(
extend=(
{'code': 0}, JsonRspType.OK,
),
base=None,
default=JsonRspType.IGNORE
)
# 经观察不少情况下 -101 表示未登录({"code":-101},没有其他东西)
LOGOUT_101_CTRL = Ctrl(
extend=(
{'code': -101}, JsonRspType.LOGOUT,
),
base=BASE_CTRL,
default=JsonRspType.OK
)
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/hustytang/bili2.0.git
git@gitee.com:hustytang/bili2.0.git
hustytang
bili2.0
bili2.0
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385