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_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)