def __check_copy_src(file: Path): if not file.exists(): raise HappyPyException('文件不存在:%s' % file) if not file.is_file(): raise HappyPyException('"%s" 不能是文件夹或链接,必须是普通文件' % file) if not file.is_absolute(): raise HappyPyException('文件 "%s" 必须为绝对路径' % file)
def foo(message): global current_n if message != 'hello': raise HappyPyException('callback_succeed_once参数测试') if current_n < max_n: current_n += 1 raise HappyPyException('callback_succeed_once用于测试的异常') return current_n
def load(filename: str, happy_config_object: HappyConfigBase): if not isinstance(happy_config_object, HappyConfigBase): raise HappyPyException( 'happy_config_object 不是 HappyConfigBase 类的子类对象。') try: if not os.path.exists(filename): print("[Error] 配置文件 %s 不存在" % filename) exit(1) with open(filename, 'r', encoding='UTF-8') as f: content = f.readlines() HappyConfigParser._loads(''.join(content), happy_config_object) except Exception as e: print("[Error] 配置文件读取错误:%s" % str(e)) exit(1)
def __do_xxx_directive(cmd, name, is_check, expected_result, got_result, is_show_error) -> CheckDirectiveState: if not cmd: return CheckDirectiveState.NOT_RUNNING hlog.info('"%s" Directive: Running...' % name) hlog.info('"%s" Directive: %s' % (name, cmd)) result = get_exit_status_of_cmd(cmd, is_show_error=is_show_error, is_show_output=True) if is_check: # check 指令直接返回运行结果 return CheckDirectiveState.YES if result else CheckDirectiveState.NO if result != expected_result: # 与 test 指令期望不符 raise HappyPyException( '"%s" Directive: "%s"..."%s" expected, got "%s"' % (name, cmd, expected_result, got_result))
def load(filename: str, happy_config_object: HappyConfigBase): from configparser import ConfigParser # TODO 配置文件与HappyConfigBase定义不一致时,抛出异常 if not isinstance(happy_config_object, HappyConfigBase): raise HappyPyException( 'happy_config_object 不是 HappyConfigBase 类的子类对象。') try: if not os.path.exists(filename): print("[Error] 配置文件 %s 不存在" % filename) exit(1) cfg = ConfigParser() cfg.read(filename) class_attrs = happy_config_object.__dict__ section = happy_config_object.section for name, value in class_attrs.items(): if name == '_section': continue t = type(value) if t is str: v = cfg.get(section, name) exec("happy_config_object.%s='%s'" % (name, v)) elif t is int: v = cfg.getint(section, name) exec("happy_config_object.%s=%d" % (name, v)) elif t is bool: v = cfg.getboolean(section, name) exec("happy_config_object.%s=%s" % (name, v)) elif t is float: v = cfg.getfloat(section, name) exec("happy_config_object.%s=%f" % (name, v)) else: v = cfg.getboolean(section, name) exec("happy_config_object.%s=%s" % (name, v)) except Exception as e: print("[Error] 配置文件读取错误:%s" % str(e)) exit(1)
def __check_copy_set(self): # 不是复制命令 if self.__run.find('COPY ') != 0: return cmd_parts = self.__run.split(' ') if len(cmd_parts) != 3: raise HappyPyException('无效的复制命令:%s' % self.__run) copy_src = Path(sys.argv[0]).absolute().parent / 'local_files' / cmd_parts[1] copy_dst = PurePath(cmd_parts[2]) self.__check_copy_src(copy_src) self.__check_copy_dst(copy_dst) self.__is_copy_mode = True self.__copy_src = str(copy_src) self.__copy_dst = str(copy_dst)
def get_point(source): point = LabinxPoint() point.description = source['description'] if 'description' in source else '' for json_cmd in source['cmds']: cmd = LabinxCmd() cmd.description = json_cmd['description'] cmd.check = json_cmd['check'] if 'check' in json_cmd else '' cmd.test_true = json_cmd['test_true'] if 'test_true' in json_cmd else '' cmd.test_false = json_cmd['test_false'] if 'test_false' in json_cmd else '' if 'run' in json_cmd: cmd.set_run(json_cmd['run']) else: raise HappyPyException('缺少 run 参数') point.add(cmd) return point
def _loads(content: str, happy_config_object: HappyConfigBase): from configparser import ConfigParser if not isinstance(happy_config_object, HappyConfigBase): raise HappyPyException( 'happy_config_object 不是 HappyConfigBase 类的子类对象。') try: cfg = ConfigParser() cfg.read_string(content) class_attrs = happy_config_object.__dict__ section = happy_config_object.section for name, value in class_attrs.items(): if name == '_section': continue t = type(value) if t is str: v = cfg.get(section, name) exec("happy_config_object.%s='%s'" % (name, v)) elif t is int: v = cfg.getint(section, name) exec("happy_config_object.%s=%d" % (name, v)) elif t is bool: v = cfg.getboolean(section, name) exec("happy_config_object.%s=%s" % (name, v)) elif t is float: v = cfg.getfloat(section, name) exec("happy_config_object.%s=%f" % (name, v)) elif t is list: v = cfg.get(section, name).split(',') exec("happy_config_object.%s=%s" % (name, v)) else: v = cfg.getboolean(section, name) exec("happy_config_object.%s=%s" % (name, v)) except Exception as e: print("[Error] 配置文件读取错误:%s" % str(e)) exit(1)
def test_hpe(self): try: raise HappyPyException('自定义错误') except HappyPyException as e: self.assertEqual('自定义错误', str(e))
def __check_copy_dst(file: PurePath): if not file.is_absolute(): raise HappyPyException('文件 "%s" 必须为绝对路径' % file)