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)
def test_check_FileErrorFound(self): """ BlobOblect: проверка на обработку ошибки на не существования файла :return: """ bobj = BlobObject(filename='11', output_dir='') self.assertRaises(FileNotFoundError, bobj.save)
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)
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)
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/')
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)
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)
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)
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' })