Example #1
0
def restore_from_obj(input_dir='./', file_treeobj='HEAD', output_dir='./restore/'):
    """
    восстановление папок
    param:
        file_treeobj - файл TreeObject с которого начнется восстановление папок и
                            файлов в виде 'f8/378c9d4b73baf88a4074f3d4b45fb0bc68c52c'
    return:
    """

    with open(input_dir + file_treeobj, 'r') as f:
        tree_lines = f.readlines()

    # print(tree_lines)
    for el in tree_lines:
        item = get_from_text(el)
        if item[1] == 'tree':
            dir_name = output_dir + item[3]
            # print(f'Create TREE = {dir_name}')
            os.mkdir(dir_name)
            sha1_dir = item[2]
            output_dir_new = dir_name + '/'
            file_treeobj_new = sha1_dir[:2] + '/' + sha1_dir[2:]
            restore_from_obj(input_dir=input_dir, file_treeobj=file_treeobj_new, output_dir=output_dir_new)
        else:
            if item[1] == 'blob':
                filename = item[3]
                # print(f'Create BLOB = {filename}')
                bobj = BlobObject()
                bobj.sha1 = item[2]
                bobj.restore(input_directory=input_dir, output_file=output_dir + filename)
Example #2
0
 def test_check_FileErrorFound(self):
     """
     BlobOblect: проверка на обработку ошибки на не существования файла
     :return:
     """
     bobj = BlobObject(filename='11', output_dir='')
     self.assertRaises(FileNotFoundError, bobj.save)
Example #3
0
 def test_check_FileSize(self):
     """
     BlobOblect: проверка на правильное определение размера файла
     :return:
     """
     b_obj = BlobObject(filename=self.current_dir_test +
                        '/test-files/image_670610.png',
                        output_dir='')
     self.assertEqual(b_obj.size, 670610)
Example #4
0
 def test_check_valid_blobobj_file(self):
     """
     BlobOblect: проверка соответствия хеша содержимому файла который корректный
     :return:
     """
     b_obj = BlobObject(filename=self.current_dir_test +
                        '/test-files/text_for_blobobj.txt',
                        output_dir=self.output_dir)
     b_obj.sha1 = 'c79c497f5012c3065de47887d819ecca426ac697'
     res = b_obj.check_exist_blob(check_dir=self.current_dir_test +
                                  '/test-files/out-etalon/valid-blobobj/')
     self.assertEqual(res, True)
Example #5
0
 def test_check_novalid_blobobj_file(self):
     """
     BlobOblect: проверка соответствия хеша содержимому файла который НЕ корректный
     :return:
     """
     b_obj = BlobObject(filename=self.current_dir_test +
                        '/test-files/text_for_blobobj.txt',
                        output_dir=self.output_dir)
     b_obj.sha1 = 'c79c497f5012c3065de47887d819ecca426ac697'
     self.assertRaises(BaseException,
                       b_obj.check_exist_blob,
                       check_dir=self.current_dir_test +
                       '/test-files/out-etalon/novalid-blobobj/')
Example #6
0
 def test_restore_textfile(self):
     """
     BlobOblect: проверка корректно ли восстановился текстовый файл, т.е. совпадает размер, хеш и сам вид файла
     :return:
     """
     b_obj = BlobObject(filename=self.current_dir_test +
                        '/test-files/text_for_blobobj.txt',
                        output_dir=self.output_dir)
     b_obj.save()
     b_obj.restore(input_directory=self.output_dir,
                   output_file=self.output_dir + 'restore_text.txt')
     size_restore = os.path.getsize(self.output_dir + 'restore_text.txt')
     self.assertEqual(b_obj.size, size_restore)
Example #7
0
    def test_restore_imagefile(self):
        """
        BlobOblect: проверка корректно ли восстановился файл изображения png, т.е. совпадает размер, хеш и сам вид файла
        :return:
        """

        b_obj = BlobObject(filename=self.current_dir_test +
                           '/test-files/image_670610.png',
                           output_dir=self.output_dir)
        b_obj.save()
        b_obj.restore(input_directory=self.output_dir,
                      output_file=self.output_dir + 'restore_image.png')
        size_restore = os.path.getsize(self.output_dir + 'restore_image.png')
        self.assertEqual(b_obj.size, size_restore)
Example #8
0
 def save(self, output_dir='./'):
     """
     получение данных
     """
     result = ''
     if isfile(join(self.name, self.input_name)):
         self.obj = BlobObject(filename=self.input_name, output_dir=output_dir)
         self.sha1 = self.obj.save()
         self.typeobj = BLOB
         self.name = os.path.basename(self.input_name)
         self.right_access = '000000'
     else:
         # TODO: вставить создание объекта TreeObject
         self.obj = TreeObject(input_dir=self.input_name, output_dir=output_dir)
         self.typeobj = TREE
         self.right_access = '000000'
         self.sha1 = self.obj.save()
         self.name = os.path.basename(self.input_name)
Example #9
0
    def test_check_dublicate_name_directory_blobobj(self):
        """
        BlobOblect: проверка того что если есть папка blobobj, но файлы с другими blob-файлами
        """

        # создание папки в которой будет проверяться
        shutil.copytree(
            self.current_dir_test +
            '/test-files/out-etalon/dublicate-folder/c7/',
            self.output_dir + 'c7/')
        b_obj = BlobObject(filename=self.current_dir_test +
                           '/test-files/text_for_blobobj.txt',
                           output_dir=self.output_dir)
        sha1 = b_obj.save()
        f, d = get_file_dirs(self.output_dir + 'c7/')
        self.assertEqual(
            f, {
                '9c497f5012c3065de47887d819ecca426ac696',
                '9c497f5012c3065de47887d819ecca426ac697'
            })