Пример #1
0
    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()
Пример #2
0
    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()
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
 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()
Пример #6
0
 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()
Пример #7
0
    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)
Пример #8
0
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