def db_file2object(self): """ :return: """ db_object_confirm = self.ds_file_or_path.value_by_name(0, 'dsf_object_confirm', self.Object_Confirm_IUnKnown) db_object_id = CUtils.one_id() if (db_object_confirm == self.Object_Confirm_IKnown) or (db_object_confirm == self.Object_Confirm_Maybe): db_object_size = self.ds_file_or_path.value_by_name(0, 'dsffilesize', 0) db_path_modify_time = self.ds_file_or_path.value_by_name(0, 'dsffilemodifytime', '') if CUtils.equal_ignore_case(CUtils.any_2_str(db_path_modify_time), CUtils.any_2_str(self.file_modify_time)) and ( db_object_size == self.file_size): CLogger().info('文件[{0}]的大小和最后修改时间, 和库中登记的都没有变化, 对象识别将被忽略! '.format(self.file_name_with_full_path)) return else: # 删除对象记录, 清理对象字段 db_object_id = self.ds_file_or_path.value_by_name(0, 'dsf_object_id', '') db_object_type = self.ds_file_or_path.value_by_name(0, 'dsf_object_type', '') CLogger().debug( '系统发现文件[{0}]的大小或最后修改时间有变化, 将删除它关联的对象{1}.{2}, 重新识别'.format( self.file_main_name, db_object_type, db_object_id ) ) self.db_delete_object_by_id(db_object_id) object_confirm = self.Object_Confirm_IUnKnown object_name = None object_type = None classified_obj = CPluginsMng.plugins_classified(self) if classified_obj is not None: object_confirm = classified_obj.classified_object_confirm() object_name = classified_obj.classified_object_name() object_type = classified_obj.get_id() if (object_confirm == self.Object_Confirm_IUnKnown) or (object_confirm == self.Object_Confirm_IKnown_Not): sql_update_file_object = ''' update dm2_storage_file set dsf_object_confirm = :dsf_object_confirm, dsf_object_id = null, dsf_object_type = null , dsffilevalid = -1, dsffilesize = :dsfFileSize, dsffilemodifytime = :fileModifyTime where dsfid = :dsfid ''' CFactory().give_me_db(self.db_server_id).execute( sql_update_file_object, { 'dsfid': self.my_id, 'dsf_object_confirm': object_confirm, 'dsfFileSize': self.file_size, 'fileModifyTime': CUtils.any_2_str(self.file_modify_time) } ) else: sql_insert_object = ''' insert into dm2_storage_object(dsoid, dsoobjectname, dsoobjecttype, dsodatatype, dsoalphacode, dsoaliasname, dsoparentobjid, dso_ib_id) values(:dsoid, :dsoobjectname, :dsoobjecttype, :dsodatatype, :dsoalphacode, :dsoaliasname, :dsoparentobjid, :dso_ib_id) ''' new_dso_id = db_object_id sql_update_file_object = ''' update dm2_storage_file set dsf_object_confirm = :dsf_object_confirm, dsf_object_id = :dsf_object_id, dsf_object_type = :dsf_object_type , dsffilevalid = -1, dsffilesize = :dsfFileSize, dsffilemodifytime = :fileModifyTime where dsfid = :dsfid ''' engine = CFactory().give_me_db(self.db_server_id) session = engine.give_me_session() try: params = dict() params['dsoid'] = new_dso_id params['dsoobjectname'] = object_name params['dsoobjecttype'] = object_type params['dsodatatype'] = self.FileType_File params['dsoalphacode'] = CUtils.alpha_text(object_name) params['dsoaliasname'] = object_name params['dsoparentobjid'] = self.owner_obj_id params['dso_ib_id'] = self.ds_file_or_path.value_by_name(0, 'dsf_ib_id', None) engine.session_execute(session, sql_insert_object, params) params = dict() params['dsfid'] = self.my_id params['dsf_object_confirm'] = object_confirm params['dsf_object_id'] = new_dso_id params['dsf_object_type'] = object_type params['dsfFileSize'] = self.file_size params['fileModifyTime'] = CUtils.any_2_str(self.file_modify_time) engine.session_execute(session, sql_update_file_object, params) engine.session_commit(session) except Exception as error: CLogger().warning('数据库处理出现异常, 错误信息为: {0}'.format(error.__str__())) engine.session_rollback(session) finally: engine.session_close(session)
def parser_metadata_custom(self, parser: CMetaDataParser) -> str: """ 自定义的元数据解析, 在所有质检和其他处理之后触发 :param parser: :return: """ meta_data_json = parser.metadata.metadata_json() if meta_data_json is None: return CResult.merge_result( self.Success, '数据[{0}]的质检和空间等元数据解析完毕, 但子图层解析有误, 无法获取JSON格式的元数据! '.format( self.file_info.file_name_with_full_path, ) ) json_data_source = meta_data_json.xpath_one('datasource', None) layer_list = meta_data_json.xpath_one(self.Name_Layers, None) if layer_list is None: return CResult.merge_result( self.Success, '数据[{0}]的质检和空间等元数据解析完毕, 但子图层解析有误, 元数据中无法找到layers节点! '.format( self.file_info.file_name_with_full_path, ) ) mdb_ib_id = CFactory().give_me_db(self.file_info.db_server_id).one_value( ''' select dso_ib_id from dm2_storage_object where dsoid = :object_id ''', { 'object_id': parser.object_id } ) error_message_list = [] table = CTable() table.load_info(self.file_info.db_server_id, self.TableName_DM_Object) for layer in layer_list: layer_name = CUtils.dict_value_by_name(layer, self.Name_Name, '') if CUtils.equal_ignore_case(layer_name, ''): continue layer_alias_name = CUtils.dict_value_by_name(layer, self.Name_Description, layer_name) layer_metadata_json = CJson() layer_metadata_json.set_value_of_name('datasource', json_data_source) layer_metadata_json.set_value_of_name('layer_count', 1) layer_metadata_json.set_value_of_name('layers', [layer]) layer_metadata_text = layer_metadata_json.to_json() try: sql_find_layer_existed = ''' select dsoid as layer_id_existed from dm2_storage_object where upper(dsoobjectname) = upper(:layer_name) and dsoparentobjid = :object_id ''' layer_id_existed = CFactory().give_me_db(self.file_info.db_server_id).one_value( sql_find_layer_existed, { 'layer_name': layer_name, 'object_id': parser.object_id } ) if layer_id_existed is None: layer_id_existed = CUtils.one_id() table.column_list.reset() table.column_list.column_by_name('dsoid').set_value(layer_id_existed) table.column_list.column_by_name('dsoobjectname').set_value(layer_name) table.column_list.column_by_name('dsoobjecttype').set_value( CUtils.dict_value_by_name( self.get_information(), self.Plugins_Info_Child_Layer_Plugins_Name, '' ) ) table.column_list.column_by_name('dsodatatype').set_value( CUtils.dict_value_by_name( self.get_information(), self.Plugins_Info_Child_Layer_Data_Type, '' ) ) table.column_list.column_by_name('dsoalphacode').set_value(CUtils.alpha_text(layer_name)) table.column_list.column_by_name('dsoaliasname').set_value(layer_alias_name) table.column_list.column_by_name('dsoparentobjid').set_value(parser.object_id) table.column_list.column_by_name('dso_ib_id').set_value(mdb_ib_id) table.column_list.column_by_name('dsometadatatext').set_value(layer_metadata_text) table.column_list.column_by_name('dsometadatajson').set_value(layer_metadata_text) table.column_list.column_by_name('dsometadataparsestatus').set_value(self.ProcStatus_InQueue) table.column_list.column_by_name('dsotagsparsestatus').set_value(self.ProcStatus_InQueue) table.column_list.column_by_name('dsodetailparsestatus').set_value(self.ProcStatus_InQueue) result = table.save_data() if not CResult.result_success(result): error_message_list.append( '图层[{0}]的创建过程出现错误, 详细信息为: {1}'.format( layer_name, CResult.result_message(result) ) ) except Exception as error: error_message_list.append('图层[{0}]的创建过程出现错误, 详细信息为: {1}'.format(layer_name, error.__str__())) if len(error_message_list) > 0: return CResult.merge_result( self.Failure, '数据[{0}]的质检和空间等元数据解析完毕, 但子图层解析有误, 详细情况如下: \n{1}'.format( self.file_info.file_name_with_full_path, CUtils.list_2_str(error_message_list, '', '\n', '', True) ) ) else: return CResult.merge_result( self.Success, '数据[{0}]的自定义元数据解析完毕! '.format( self.file_info.file_name_with_full_path, ) )
def test_alpha_text(self): text_alpha = r'你好 abc中国' print(text_alpha) result_alpha = CUtils.alpha_text(text_alpha) print(result_alpha) assert result_alpha == 'nhabczg'