def test_save_file(self): """ 通过给定的xml文件名, 对xml对象进行初始化 """ xml_content = ''' <root name="hello world">hello</root> ''' xml = CXml() xml.load_xml(xml_content) xml.save_file(self.test_filename, encoding=CXml.Encoding_UTF8) assert True
class CQuality(CResource): __xml_obj: CXml # 根节点 __xml_root_node = None # 整体质量节点 __node_total = None # 数据质量节点 __node_data = None # 数据的总体质量节点 __node_data_items = None # 数据的每一个记录的质量节点, 用于矢量数据检验 __node_data_records = None # 元数据质量节点 __node_metadata = None # 业务元数据质量节点 __node_metadata_bus = None # 数据本身的元数据质量节点 __node_metadata_data = None __XPath_Root = '/root' __XPath_Total = '{0}/total'.format(__XPath_Root) __XPath_MetaData = '{0}/metadata'.format(__XPath_Root) __XPath_MetaData_Data = '{0}/data'.format(__XPath_MetaData) __XPath_MetaData_Bus = '{0}/business'.format(__XPath_MetaData) __XPath_Data = '{0}/data'.format(__XPath_Root) __XPath_Data_Items = '{0}/items'.format(__XPath_Data) def __init__(self): self.__xml_obj = CXml() self.__xml_root_node = self.__xml_obj.new_xml(self.Name_Root) self.__node_total = CXml.create_element(self.__xml_root_node, self.Name_Total) self.__node_data = CXml.create_element(self.__xml_root_node, self.Name_Data) self.__node_data_items = CXml.create_element(self.__node_data, self.Name_Items) self.__node_data_records = CXml.create_element(self.__node_data, self.Name_Records) self.__node_metadata = CXml.create_element(self.__xml_root_node, self.Name_MetaData) self.__node_metadata_bus = CXml.create_element(self.__node_metadata, self.Name_Business) self.__node_metadata_data = CXml.create_element( self.__node_metadata, self.Name_Data) def __append_quality_info(self, xml_node, audit_result: dict): quality_id = CUtils.dict_value_by_name(audit_result, self.Name_ID, '') quality_title = CUtils.dict_value_by_name(audit_result, self.Name_Title, '') quality_group = CUtils.dict_value_by_name(audit_result, self.Name_Group, self.QA_Group_Data_Integrity) quality_result = CUtils.dict_value_by_name(audit_result, self.Name_Result, self.QA_Result_Pass) quality_memo = CUtils.dict_value_by_name(audit_result, self.Name_Message, '') temp_node = CXml.node_xpath_one( xml_node, './{0}[@id="{1}"]'.format(self.Name_Item, quality_id)) if temp_node is not None: CXml.remove(temp_node) temp_node = CXml.create_element(xml_node, self.Name_Item) CXml.set_attr(temp_node, self.Name_ID, quality_id) CXml.set_attr(temp_node, self.Name_Group, quality_group) CXml.set_attr(temp_node, self.Name_Title, quality_title) CXml.set_attr(temp_node, self.Name_Result, quality_result) CXml.set_element_text(temp_node, quality_memo) def append_total_quality(self, audit_result: dict): """ 设置总体的质量信息 . 质量标识: 重复的质量标识, 仅仅保留一个 . 质量标题: 中文简述 . 质量类型: 信息:提示;警告:警示;错误:错误, 不能继续 . 质量描述: 质量的详细描述 :param audit_result: :return: """ self.__append_quality_info(self.__node_total, audit_result) def append_data_quality(self, audit_result: dict): """ 设置数据的总体质量 :param audit_result: :return: """ self.__append_quality_info(self.__node_data_items, audit_result) def append_data_records_quality(self, record_index, audit_result: dict): """ 设置数据的每一个记录的质量信息 :param record_index: :param audit_result: :return: """ temp_node = CXml.node_xpath_one( self.__node_data_records, './{0}[@index="{1}"]'.format(self.Name_Record, record_index)) if temp_node is None: temp_node = CXml.create_element(self.__node_data_records, self.Name_Record) self.__append_quality_info(temp_node, audit_result) def append_metadata_data_quality(self, audit_result: dict): """ 设置实体的元数据质量检验结果 :param audit_result: :return: """ self.__append_quality_info(self.__node_metadata_data, audit_result) def append_metadata_bus_quality(self, audit_result: dict): """ 设置业务的元数据质量检验结果 :param audit_result: :return: """ self.__append_quality_info(self.__node_metadata_bus, audit_result) def save_as(self, file_name_with_path): """ 将质检结果保存为文件 :param file_name_with_path: :return: """ self.__xml_obj.save_file(file_name_with_path) def to_xml(self) -> str: """ 将质检结果导出为xml文本 :return: """ return self.__xml_obj.to_xml() def summary(self) -> str: json_obj = CJson() json_obj.set_value_of_name( self.Name_Total, self.__quality_result_of_level(self.__XPath_Total)) metadata_qa_s = { self.Name_Data: self.__quality_result_of_level(self.__XPath_MetaData_Data), self.Name_Business: self.__quality_result_of_level(self.__XPath_MetaData_Bus) } json_obj.set_value_of_name(self.Name_MetaData, metadata_qa_s) json_obj.set_value_of_name( self.Name_Data, { self.Name_Items: self.__quality_result_of_level(self.__XPath_Data_Items) }) return json_obj.to_json() def __quality_result_of_level(self, xpath: str): if self.__xml_obj.xpath_one('{0}/*[@{1}="{2}"]'.format( xpath, self.Name_Result, self.QA_Result_Error)) is not None: return self.QA_Result_Error elif self.__xml_obj.xpath_one('{0}/*[@{1}="{2}"]'.format( xpath, self.Name_Result, self.QA_Result_Warn)) is not None: return self.QA_Result_Warn else: return self.QA_Result_Pass