generic模块说明

generic模块主要定义一些公共的基础通用类。

NullObj(空对象定义类)

NullObj为空对象定义类,用于支持可动态增加属性的使用场景。

普通用法

# 定义需含属性的对象
_obj = NullObj()

# 动态增加属性和值
_obj.attr1 = 'attr1_value'
_obj.attr2 = (5, 6, 7)
_obj.attr3 = NullObj()  # 属性嵌套属性
_obj.attr3.prop = 'level 2 value'

# 访问属性
for item in _obj.attr2:
	print(_obj.attr3.prop + str(item)

与dict对象相互转换

# dict转换为NullObj
_dict = {
	'attr1': 'attr1_value',
	'attr2': (5, 6, 7),
	'attr3': {'prop': 'level 2 value'},  # 如果还有字典,则会生成嵌套属性
}
_obj = NullObj.get_nullobj_from_dict(_dict)
# 访问对象值
print(_obj.attr3.prop)

# NullObj转换为dict,可以指定某些属性不参加转换
_dict = NullObj.get_object_attr_dict(_obj, ignored_key='attr2')

json字符串转换

主要用于支持base_tools.string_tool.StringTool的json对象转换方法:object_to_json和json_to_object。

# 创建对象
_obj = NullObj()
_obj.attr1 = 'attr1_value'
_obj.attr2 = (5, 6, 7)

# 与json直接转换
_json_str = _obj.__json__()
_new_obj = NullObj.__fromjson__(_json_str)

# 通过StringTool处理
_json_str = StringTool.object_to_json(_obj)
_new_obj = StringTool.json_to_object(_json_str, class_ref=NullObj)  # 需指定对象类型

CResult(通用错误类)

通用错误类定义,便于规范所有的错误信息返回判断标准,该类继承自NullObj,因此可直接在该类的实例对象上直接添加属性用于各类返回值。

注意:CResult是HiveNetCore中的基础类,大部分函数交互都会使用该类进行返回处理,建议严格按照这个规则进行编码

错误类的主要属性包括:

  • code - 错误码,’00000’代表成功,参照HiveNet的错误码规范

  • msg - 错误信息描述,如果i18n_obj不为None时,该参数传入的是国际化的消息ID;如果传入msg=None,则代表自动通过code查找HiveNet的错误码具体的错误描述(需要增加或修改错误码映射,可到包安装目录的HiveNetCore.hivenet_error_code目录下修改错误码映射及国际化文件,格式参考simple_i18n)

  • error - 发生异常时的异常类型type的字符串

  • trace_str - 错误追踪堆栈日志,异常时的traceback.format_exc()

  • i18n_msg_paras - 与msg配套使用,可通过$1,$2等占位符进行消息内容的变量替换

创建并使用CResult

# 如果错误码是使用HiveNet错误码规范的情况,msg可以自动获取并填写
_result = CResult(code='00000')
# 补充其他返回值
_result.attr = '其他返回值'

# 判断是否成功,注意该方法只适用HiveNet错误码规范
if not _result.is_success():
	print('失败:' + _result.msg)

# 自定义错误码,使用占位符的方式
_result = CResult(code='-1', msg='run error: $1', error=str(type(Exception)), i18n_msg_paras=('EX Model'))

配合exception_tool使用错误码

_result = CResult(code='00000')
with ExceptionTools.ignored_CResult(result_obj=_result, error_map={ZeroDivisionError: ('10001', 'zero division error')},expect=(ValueError),logger=None,self_log_msg=''):
	# 当遇到异常时可以自动匹配并修改错误类的值
	i = 1/0
	i = i + 1000

json字符串转换

主要用于支持base_tools.string_tool.StringTool的json对象转换方法:object_to_json和json_to_object。与NullObj类似,不再重复说明,但注意这种方式转换,不支持国际化控件的转换处理。