コード例 #1
0
ファイル: c_fileInfo.py プロジェクト: ieasysoft/imetadata
    def __init__(self, file_type, file_name_with_full_path):
        self.__file_name_with_full_path = file_name_with_full_path

        self.__file_name_without_path = CFile.file_name(
            self.file_name_with_full_path)
        self.__file_main_name = CFile.file_main_name(
            self.file_name_with_full_path)
        self.__file_ext = CFile.file_ext(self.file_name_with_full_path)
        self.__file_path = CFile.file_path(self.file_name_with_full_path)

        self.__file_main_name_with_full_path = CFile.join_file(
            self.file_path, self.file_main_name)

        self.__file_type = file_type
        self.__file_existed = CFile.file_or_path_exist(
            self.file_name_with_full_path)
        if self.__file_existed:
            if CFile.is_file(self.file_name_with_full_path):
                self.__file_size = CFile.file_size(
                    self.file_name_with_full_path)

            self.__file_create_time = CFile.file_create_time(
                self.file_name_with_full_path)
            self.__file_access_time = CFile.file_access_time(
                self.file_name_with_full_path)
            self.__file_modify_time = CFile.file_modify_time(
                self.file_name_with_full_path)
コード例 #2
0
ファイル: c_detailParser.py プロジェクト: ieasysoft/imetadata
    def __inbound_object_detail_of_schema(self, list_file_fullname):
        sql_detail_insert = '''
        INSERT INTO dm2_storage_obj_detail(
            dodid, dodobjectid, dodfilename, dodfileext, dodfilesize, 
            dodfilecreatetime, dodfilemodifytime, 
            dodlastmodifytime, dodfiletype)
        VALUES (
            :dodid, :dodobjectid, :dodfilename, :dodfileext, :dodfilesize, 
            :dodfilecreatetime, :dodfilemodifytime, now(), 
            :dodfiletype)
        '''

        sql_detail_insert_params_list = []

        # query_storage_id = self.file_info.storage_id
        query_file_relation_name = self.file_info.file_name_with_rel_path
        for item_file_name_with_path in list_file_fullname:
            CLogger().debug(item_file_name_with_path)
            if not CFile.file_or_path_exist(item_file_name_with_path):
                continue

            params = dict()
            file_relation_name = CFile.file_relation_path(
                item_file_name_with_path, self.file_info.root_path)
            if CUtils.equal_ignore_case(query_file_relation_name,
                                        file_relation_name):
                params['dodid'] = self.object_id
            else:
                params['dodid'] = CUtils.one_id()
            # 文件类型
            params['dodfiletype'] = self.FileType_File
            if CFile.is_dir(item_file_name_with_path):
                params['dodfiletype'] = self.FileType_Dir
            params['dodobjectid'] = self.object_id
            params['dodfilename'] = CFile.unify(file_relation_name)
            params['dodfileext'] = CFile.file_ext(item_file_name_with_path)
            params['dodfilesize'] = CFile.file_size(item_file_name_with_path)
            params['dodfilecreatetime'] = CFile.file_create_time(
                item_file_name_with_path)
            params['dodfilemodifytime'] = CFile.file_modify_time(
                item_file_name_with_path)
            # params['dodstorageid'] = query_storage_id
            # params['dodfilerelationname'] = CFile.file_relation_path(
            #     item_file_name_with_path,
            #     self.file_info.root_path)
            sql_params_tuple = (sql_detail_insert, params)
            sql_detail_insert_params_list.append(sql_params_tuple)

        if len(sql_detail_insert_params_list) > 0:
            try:
                CFactory().give_me_db(
                    self.file_info.db_server_id).execute_batch(
                        sql_detail_insert_params_list)
            except Exception as error:
                CLogger().warning('数据库处理出现异常, 错误信息为: {0}'.format(
                    error.__str__()))
                return CResult.merge_result(self.Failure, '处理失败!')
        return CResult.merge_result(self.Success, '处理完毕!')
コード例 #3
0
    def check_all_ib_file_or_path_existed(self, ib_id):
        """
        判断待入库数据的元数据, 与实体数据是否相符
        . 返回CResult
            . 如果全部相符, 则返回True
            . 如果有任何一个不符, 则返回False, 且把不符的文件名通过信息返回
        :param ib_id:
        :return:
        """
        invalid_file_list = []
        more_failure_file = False
        sql_all_ib_file = '''
        select 
            coalesce(dm2_storage.dstownerpath, dm2_storage.dstunipath) || dm2_storage_file.dsffilerelationname as file_name
            , dm2_storage_file.dsffilesize as file_size
            , dm2_storage_file.dsffilemodifytime as file_modify_time
        from dm2_storage_file left join dm2_storage
            on dm2_storage.dstid = dm2_storage_file.dsfstorageid
        where dsf_ib_id = :ib_id       
        '''
        params_all_ib_file = {'ib_id': ib_id}
        ds_ib_file = CFactory().give_me_db(self.get_mission_db_id()).all_row(
            sql_all_ib_file, params_all_ib_file)
        for ds_ib_file_index in range(ds_ib_file.size()):
            file_valid = True
            file_name = ds_ib_file.value_by_name(ds_ib_file_index, 'file_name',
                                                 '')
            if not CUtils.equal_ignore_case(file_name, ''):
                if not CFile.file_or_path_exist(file_name):
                    file_valid = False
                elif not CUtils.equal_ignore_case(
                        CFile.file_modify_time(file_name),
                        ds_ib_file.value_by_name(ds_ib_file_index,
                                                 'file_modify_time', '')):
                    file_valid = False
                elif CFile.file_size(file_name) != ds_ib_file.value_by_name(
                        ds_ib_file_index, 'file_size', 0):
                    file_valid = False
            if not file_valid:
                if len(invalid_file_list) <= 3:
                    invalid_file_list.append(file_name)
                else:
                    more_failure_file = True
                    break

        if len(invalid_file_list) > 0:
            message = ''
            for invalid_file in invalid_file_list:
                message = CUtils.str_append(message, invalid_file)
            if more_failure_file:
                message = CUtils.str_append(message, '...')
            message = CUtils.str_append(message, '上述数据与库中记录不统一, 请重新扫描入库! ')

            return CResult.merge_result(self.Failure, message)
        else:
            return CResult.merge_result(self.Success, '所有文件均存在, 且与库中记录统一! ')
コード例 #4
0
 def is_raster_file_integrity(cls, raster_file_with_path: str) -> bool:
     """
     判断影像数据的文件完整性,img
         xxx.img	文件	栅格数据可读	错误
         xxx.ige	文件	img小于1M时必须存在	警告
     @param raster_file_with_path:
     @return:
     """
     file_ext = CFile.file_ext(raster_file_with_path)
     if file_ext.lower() == 'img':
         size = CFile.file_size(raster_file_with_path)
         if size < 1024 * 1024:
             file_main_name = CFile.file_main_name(raster_file_with_path)
             file_path = CFile.file_path(raster_file_with_path)
             ige = CFile.join_file(file_path, file_main_name + '.ige')
             if not CFile.file_or_path_exist(ige):
                 return False
     return True
コード例 #5
0
ファイル: c_audit.py プロジェクト: ieasysoft/imetadata
    def __a_check_file_size__(cls, result_template: dict,
                              file_name_with_path: str, size_min: int,
                              size_max: int):
        """
        根据规则, 验证文件大小的合法性
        :param result_template 检查结果的模板
        :param file_name_with_path: 文件名
        :param size_min: 最小要求, -1表示忽略比较
        :param size_max: 最大要求, -1表示忽略比较
        :return:
        """
        result_dict = copy.deepcopy(result_template)

        file_size = CFile.file_size(file_name_with_path)

        if size_min != -1 and size_min != -1:
            if size_min <= file_size <= size_max:
                result_dict[
                    cls.
                    Name_Message] = '文件[{0}]的大小[{1}]在指定的[{2}-{3}]范围内, 符合要求!'.format(
                        CFile.file_name(file_name_with_path), file_size,
                        size_min, size_max)
                result_dict[cls.Name_Result] = cls.QA_Result_Pass
            else:
                result_dict[
                    cls.
                    Name_Message] = '文件[{0}]的大小[{1}]在指定的[{2}-{3}]范围外, 请检查!'.format(
                        CFile.file_name(file_name_with_path), file_size,
                        size_min, size_max)
        elif size_min != -1:
            if size_min <= file_size:
                result_dict[
                    cls.
                    Name_Message] = '文件[{0}]的大小[{1}]大于最小值[{2}], 符合要求!'.format(
                        CFile.file_name(file_name_with_path), file_size,
                        size_min)
                result_dict[cls.Name_Result] = cls.QA_Result_Pass
            else:
                result_dict[
                    cls.
                    Name_Message] = '文件[{0}]的大小[{1}]低于最小值[{2}], 请检查!'.format(
                        CFile.file_name(file_name_with_path), file_size,
                        size_min)
        elif size_max != -1:
            if size_max >= file_size:
                result_dict[
                    cls.
                    Name_Message] = '文件[{0}]的大小[{1}]低于最大值[{2}], 符合要求!'.format(
                        CFile.file_name(file_name_with_path), file_size,
                        size_max)
                result_dict[cls.Name_Result] = cls.QA_Result_Pass
            else:
                result_dict[
                    cls.
                    Name_Message] = '文件[{0}]的大小[{1}]超过最大值[{2}], 请检查!'.format(
                        CFile.file_name(file_name_with_path), file_size,
                        size_max)
        else:
            result_dict[
                cls.Name_Message] = '文件[{0}]的大小[{1}]未给定限定范围, 默认符合要求!'.format(
                    CFile.file_name(file_name_with_path), file_size)
            result_dict[cls.Name_Result] = cls.QA_Result_Pass

        return result_dict