def get_mission_info(self): mission_flag = CUtils.one_id() mission_seize_sql = self.get_mission_seize_sql() mission_info_sql = self.get_mission_info_sql() if mission_seize_sql is None: return None if mission_info_sql is None: return None mission_seize_sql = mission_seize_sql.replace( self.SYSTEM_NAME_MISSION_ID, mission_flag) mission_info_sql = mission_info_sql.replace( self.SYSTEM_NAME_MISSION_ID, mission_flag) try: factory = CFactory() db = factory.give_me_db(self.get_mission_db_id()) db.execute(mission_seize_sql) except: CLogger().debug( '任务抢占查询语句有误, 请修正! 详细错误信息为: {0}'.format(mission_seize_sql)) return CDataSet() try: return db.one_row(mission_info_sql) except: CLogger().debug( '任务抢占查询语句有误, 请修正! 详细错误信息为: {0}'.format(mission_info_sql)) return CDataSet()
def __init__(self, file_type, file_name_with_full_path, storage_id, file_or_path_id, parent_id, owner_obj_id, db_server_id, rule_content): """ :param file_name_with_full_path: :param root_path: :param storage_id: 必须提供 :param file_or_path_id: 如果为None, 则首先根据文件相对路径和storage_id, 查找数据库中登记的标识, 如果不存在, 则自行创建uuid; 如果不为空, 则表明数据库中已经存储该文件标识 """ self.__storage_id = storage_id self.my_id = file_or_path_id self.__db_server_id = db_server_id self.__parent_id = parent_id self.__owner_obj_id = owner_obj_id if self.__storage_id is not None: self._ds_storage = CFactory().give_me_db( self.__db_server_id).one_row( ''' select dstid, dsttitle, dm2_storage.dstownerpath, dm2_storage.dstunipath , coalesce(dm2_storage.dstownerpath, dm2_storage.dstunipath) as root_path , dstotheroption from dm2_storage where dstid = :dstID ''', {'dstid': self.storage_id}) else: self._ds_storage = CDataSet() root_path = self._ds_storage.value_by_name(0, 'root_path', '') super().__init__(file_type, file_name_with_full_path, root_path, rule_content) self.custom_init()
def session_one_row(self, session: Session, sql, params=None) -> CDataSet: """ 执行sql, 返回第一行符合要求的记录 :param session: :param sql: :param params: :return: """ cursor = session.execute( sql, self._prepare_params_of_execute_sql(session.get_bind(), sql, params)) data = cursor.fetchone() if data is None: return CDataSet() else: row_data = [data] return CDataSet(row_data)
def session_all_row(self, session: Session, sql, params=None) -> CDataSet: """ 执行sql, 返回所有符合要求的记录 :param session: :param sql: :param params: :return: """ cursor = session.execute( sql, self._prepare_params_of_execute_sql(session.get_bind(), sql, params)) data = cursor.fetchall() return CDataSet(data)
def one_row(self, sql, params=None) -> CDataSet: """ 执行sql, 返回第一行符合要求的记录 :param sql: :param params: :return: """ eng = self.engine() try: session_maker = sessionmaker(bind=eng) session = session_maker() try: cursor = session.execute( sql, self._prepare_params_of_execute_sql(eng, sql, params)) data = cursor.fetchone() if data is None: return CDataSet() else: row_data = [data] return CDataSet(row_data) finally: session.close() finally: eng.dispose()
def all_row(self, sql, params=None) -> CDataSet: """ 执行sql, 返回所有符合要求的记录 :param sql: :param params: :return: """ eng = self.engine() try: session_maker = sessionmaker(bind=eng) session = session_maker() try: cursor = session.execute( sql, self._prepare_params_of_execute_sql(eng, sql, params)) data = cursor.fetchall() return CDataSet(data) except: raise DBSQLExecuteException(self._db_conn_id, sql) finally: session.close() finally: eng.dispose()
def search(self, module_name: str, search_json_obj: CJson, other_option: dict = None) -> CDataSet: """ 根据搜索条件json, 检索符合要求的对象, 并以数据集的方式返回如下字段: 1. object_id 1. object_name 1. object_type 1. object_data_type 1. object_parent_id 1. object_size 1. object_lastmodifytime :param module_name: 模块名称 :param search_json_obj: :param other_option: :return: """ if search_json_obj is None: return CDataSet() params_search = dict() sql_from = '' sql_where = '' if (not CUtils.equal_ignore_case(module_name, self.ModuleName_MetaData)) and \ (not CUtils.equal_ignore_case(module_name, '')): # sql_where = "dm2_storage_object.dso_da_result#>>'{{{0},result}}'='pass'".format(module_name) sql_from = ', dm2_storage_obj_na ' sql_where = " dm2_storage_obj_na.dson_app_id = 'module_name' " condition_obj_access = search_json_obj.xpath_one(self.Name_Access, self.DataAccess_Pass) if not CUtils.equal_ignore_case(condition_obj_access, ''): condition = "dm2_storage_obj_na.dson_object_access = '{0}'".format(CUtils.any_2_str(condition_obj_access)) sql_where = CUtils.str_append(sql_where, condition, ' and ') condition_inbound_id = search_json_obj.xpath_one(self.Name_InBound, None) if not CUtils.equal_ignore_case(condition_inbound_id, ''): condition = "dm2_storage_obj.dso_ib_id = '{0}'".format(CUtils.any_2_str(condition_inbound_id)) sql_where = CUtils.str_append(sql_where, condition, ' and ') condition_tag = search_json_obj.xpath_one(self.Name_Tag, None) if condition_tag is not None: if isinstance(condition_tag, list): condition = CUtils.list_2_str(condition_tag, "'", ", ", "'", True) else: condition = CUtils.list_2_str([condition_tag], "'", ", ", "'", True) if not CUtils.equal_ignore_case(condition, ''): condition = 'dm2_storage_object.dsotags @ > array[{0}]:: CHARACTER VARYING[]'.format(condition) sql_where = CUtils.str_append(sql_where, condition, ' and ') condition_id = search_json_obj.xpath_one(self.Name_ID, None) if condition_id is not None: if isinstance(condition_id, list): condition = self.__condition_list_2_sql('dm2_storage_object_def.dsodid', condition_id, True) else: condition = self.__condition_value_like_2_sql('dm2_storage_object_def.dsodid', condition_id, True) sql_where = CUtils.str_append(sql_where, condition, ' and ') condition_name = search_json_obj.xpath_one(self.Name_Name, None) if condition_name is not None: if isinstance(condition_name, list): condition = self.__condition_list_2_sql('dm2_storage_object_def.dsodname', condition_name, True) else: condition = self.__condition_value_like_2_sql('dm2_storage_object_def.dsodname', condition_name, True) sql_where = CUtils.str_append(sql_where, condition, ' and ') condition_type = search_json_obj.xpath_one(self.Name_Type, None) if condition_type is not None: if isinstance(condition_type, list): condition = self.__condition_list_2_sql('dm2_storage_object_def.dsodtype', condition_type, True) else: condition = self.__condition_value_like_2_sql('dm2_storage_object_def.dsodtype', condition_type, True) sql_where = CUtils.str_append(sql_where, condition, ' and ') condition_group = search_json_obj.xpath_one(self.Name_Group, None) if condition_group is not None: if isinstance(condition_group, list): condition = self.__condition_list_2_sql('dm2_storage_object_def.dsodgroup', condition_group, True) else: condition = self.__condition_value_like_2_sql('dm2_storage_object_def.dsodgroup', condition_group, True) sql_where = CUtils.str_append(sql_where, condition, ' and ') if not CUtils.equal_ignore_case(sql_where, ''): sql_where = ' and {0}'.format(sql_where) sql_search = ''' select dm2_storage_object.dsoid as object_id , dm2_storage_object.dsoobjectname as object_name , dm2_storage_object.dsoobjecttype as object_type , dm2_storage_object.dsodatatype as object_data_type , dm2_storage_object.dsoparentobjid as object_parent_id , dm2_storage_object.dso_volumn_now as object_size , dm2_storage_object.dso_obj_lastmodifytime as object_lastmodifytime from dm2_storage_object, dm2_storage_object_def {0} where dm2_storage_object.dsoobjecttype = dm2_storage_object_def.dsodid and dm2_storage_object.dsoid = dm2_storage_obj_na.dson_object_id {1} '''.format(sql_from, sql_where) return CFactory().give_me_db(self.db_server_id).all_row(sql_search)
class CDMFilePathInfoEx(CFileInfoEx): __db_server_id = None __parent_id = None __owner_obj_id = None __storage_id = None __my_id = None _ds_storage = None _ds_file_or_path = None @property def my_id(self): return self.__my_id @my_id.setter def my_id(self, value): self.__my_id = value @property def storage_id(self): return self.__storage_id @property def ds_storage(self): return self._ds_storage @property def ds_file_or_path(self): return self._ds_file_or_path @property def db_server_id(self): return self.__db_server_id @property def parent_id(self): return self.__parent_id @property def owner_obj_id(self): """ 所属对象 :return: """ return self.__owner_obj_id def __init__(self, file_type, file_name_with_full_path, storage_id, file_or_path_id, parent_id, owner_obj_id, db_server_id, rule_content): """ :param file_name_with_full_path: :param root_path: :param storage_id: 必须提供 :param file_or_path_id: 如果为None, 则首先根据文件相对路径和storage_id, 查找数据库中登记的标识, 如果不存在, 则自行创建uuid; 如果不为空, 则表明数据库中已经存储该文件标识 """ self.__storage_id = storage_id self.my_id = file_or_path_id self.__db_server_id = db_server_id self.__parent_id = parent_id self.__owner_obj_id = owner_obj_id if self.__storage_id is not None: self._ds_storage = CFactory().give_me_db( self.__db_server_id).one_row( ''' select dstid, dsttitle, dm2_storage.dstownerpath, dm2_storage.dstunipath , coalesce(dm2_storage.dstownerpath, dm2_storage.dstunipath) as root_path , dstotheroption from dm2_storage where dstid = :dstID ''', {'dstid': self.storage_id}) else: self._ds_storage = CDataSet() root_path = self._ds_storage.value_by_name(0, 'root_path', '') super().__init__(file_type, file_name_with_full_path, root_path, rule_content) self.custom_init() def custom_init(self): """ 自定义初始化方法 :return: """ pass def db_init_object_of_directory_by_id(self, dir_id): sql_update_path_object = ''' update dm2_storage_directory set dsd_object_confirm = 0, dsd_object_id = null, dsd_object_type = null , dsdscanfilestatus = 1, dsdscandirstatus = 1, dsd_directory_valid = -1 where dsdid = :dsdid ''' CFactory().give_me_db(self.db_server_id).execute( sql_update_path_object, {'dsdid': dir_id}) def db_delete_object_by_id(self, object_id): if object_id == '' or object_id is None: return sql_delete_object_by_id = ''' delete from dm2_storage_object where dsoid = :dsoID ''' sql_delete_object_details_by_id = ''' delete from dm2_storage_obj_detail where dodid = :dsoID ''' engine = CFactory().give_me_db(self.db_server_id) session = engine.give_me_session() try: engine.session_execute(session, sql_delete_object_details_by_id, {'dsoid': object_id}) engine.session_execute(session, sql_delete_object_by_id, {'dsoid': object_id}) engine.session_commit(session) except Exception as error: CLogger().warning('数据库处理出现异常, 错误信息为: {0}'.format(error.__str__())) engine.session_rollback(session) finally: engine.session_close(session) def white_black_valid(self): """ 检查指定文件是否符合白名单, 黑名单验证 """ ds_storage_option = self._ds_storage.value_by_name( 0, 'dstotheroption', None) if ds_storage_option == '' or ds_storage_option is None: return True dir_filter_white_list = CJson.json_attr_value( ds_storage_option, self.Path_SO_Inbound_Filter_Dir_WhiteList, '') dir_filter_black_list = CJson.json_attr_value( ds_storage_option, self.Path_SO_Inbound_Filter_Dir_BlackList, '') file_filter_white_list = CJson.json_attr_value( ds_storage_option, self.Path_SO_Inbound_Filter_File_WhiteList, '') file_filter_black_list = CJson.json_attr_value( ds_storage_option, self.Path_SO_Inbound_Filter_File_BlackList, '') result = True if self.file_type != self.FileType_Unknown: if (dir_filter_white_list != '') and (dir_filter_black_list != ''): result = CFile.file_match( self.file_path_with_rel_path, dir_filter_white_list) and (not CFile.file_match( self.file_path_with_rel_path, dir_filter_black_list)) elif dir_filter_white_list != '': result = CFile.file_match(self.file_path_with_rel_path, dir_filter_white_list) elif dir_filter_black_list != '': result = not CFile.file_match(self.file_path_with_rel_path, dir_filter_black_list) if not result: return result if self.file_type == self.FileType_File: if (file_filter_white_list != '') and (file_filter_black_list != ''): return CFile.file_match( self.file_name_without_path, file_filter_white_list) and (not CFile.file_match( self.file_name_without_path, file_filter_black_list)) elif file_filter_white_list != '': return CFile.file_match(self.file_name_without_path, file_filter_white_list) elif file_filter_black_list != '': return not CFile.file_match(self.file_name_without_path, file_filter_black_list) else: return True else: return True