Source code for poco.utils.hrpc.utils

# coding=utf-8
from __future__ import unicode_literals

from functools import wraps

from hrpc.exceptions import RpcRemoteException
from hrpc.object_proxy import safe_repr
from poco.exceptions import PocoTargetRemovedException


[docs]def transform_node_has_been_removed_exception(func): """ 将HRpcRemoteException.NodeHasBeenRemovedException转换成PocoTargetRemovedException :param func: 仅限getattr和setattr两个接口方法 :return: """ @wraps(func) def wrapped(self, nodes, name, *args, **kwargs): """ :param self: :param nodes: UI object proxy :param name: attribute name :param args: :param kwargs: :return: """ tolerance_exc_types = ( 'NodeHasBeenRemovedException', 'RemoteObjectNotFoundException', ) try: return func(self, nodes, name, *args, **kwargs) except RpcRemoteException as e: for t in tolerance_exc_types: if e.error_type == t or e.error_type.endswith('.' + t): raise PocoTargetRemovedException('{}: {}'.format(func.__name__, name), safe_repr(nodes)) else: raise return wrapped