def __getitem__(self, key): """ 单例字典魔术方法,返回键key对应的值 :param str key: 键参数 :return: 键对应的值 :rtype: str :raises: KeyError 键对应的值不存在 """ try: return dict.__getitem__(self, key) except KeyError: raise exception.EMissingParam("key [{}] not exist".format(key))
def get_action(self, name): """ 获取一个执行进度 :param str name: 执行进度名 :return: 执行进度 :rtype: Action :raises EMissingParam: 缺少参数异常 """ match_action = filter(lambda x: x.name == name, self.actions) try: action = match_action[0] except IndexError: raise exception.EMissingParam("action:{} not found".format(name)) return action
def on_message(self, message): """ 触发执行并返回结果,``on_execute_message`` 可能为同步或异步操作, 若为异步操作,则返回结果并非本次执行的结果, 需要根据ret中EXECUTOR_OPERATION_ID字段确定是哪个操作的结果 :param Message message: 消息对象 :return: 无返回 :rtype: None :raises ETypeMismatch: 返回值类型不匹配 :raises EMissingParam: 返回值缺字段 """ ret = self.on_execute_message(message) log.info("execute message return:{}".format(ret)) if not ret: return elif not isinstance(ret, dict): raise exception.ETypeMismatch() elif EXECUTOR_OPERATION_ID not in ret: raise exception.EMissingParam() else: message = OperationMessage("COMPLETE_MESSAGE", ret[EXECUTOR_OPERATION_ID], ret) self.send(message)
def test_singledict_getitem_exception(self): are.common.SingleDict._instance = None sd = are.common.SingleDict({"test": 1}) self.assertRaises(exception.EMissingParam("key [test2] not exist"))