94 lines
2.5 KiB
Python
94 lines
2.5 KiB
Python
"""
|
||
********************************************
|
||
* @Date: 2024 09 27
|
||
* @Description: BackupObject备份对象
|
||
********************************************
|
||
"""
|
||
|
||
import os
|
||
import asyncio
|
||
from typing import List, Union
|
||
from .tree_object import TreeObject
|
||
from .blob_object import BlobObject
|
||
from utils.log import Logger
|
||
|
||
logger = Logger("BackupObject")
|
||
|
||
|
||
class BackupObject:
|
||
"""
|
||
备份对象,负责管理存储对象(tree、blob)对象、备份信息、恢复等操作
|
||
"""
|
||
|
||
backup_name: str
|
||
backup_time_lately: str
|
||
backup_time_create: str
|
||
backup_size: int
|
||
backup_version_number: int
|
||
backup_trees: List[Union[TreeObject, BlobObject]] = []
|
||
new_backup_flag: bool
|
||
|
||
def __init__(self, backup_name: str, backup_base_path: str):
|
||
self.backup_name = backup_name
|
||
|
||
# 获取备份路径的绝对路径
|
||
if os.path.isabs(backup_base_path):
|
||
self.backup_path = os.path.join(backup_base_path, backup_name)
|
||
else:
|
||
self.backup_path = os.path.join(
|
||
os.path.abspath(backup_base_path), backup_name
|
||
)
|
||
|
||
logger.debug(f"Backup path: {self.backup_path}")
|
||
|
||
if not os.path.exists(self.backup_path):
|
||
self.new_backup_flag = True
|
||
else:
|
||
self.new_backup_flag = False
|
||
pass # TODO 读取备份信息
|
||
|
||
def createNewBackup(self, backup_dirs: List[str]):
|
||
"""
|
||
创建新的备份
|
||
|
||
:return
|
||
"""
|
||
for backup_dir in backup_dirs:
|
||
if os.path.isdir(backup_dir):
|
||
self.backup_trees.append(TreeObject(backup_dir))
|
||
else:
|
||
self.backup_trees.append(BlobObject(backup_dir))
|
||
|
||
logger.info("New backup created successfully.")
|
||
logger.debug(f"Backup trees: {self.backup_trees}")
|
||
|
||
def backup(self):
|
||
asyncio.run(self.__writeBlobs())
|
||
|
||
async def __writeBlobs(self):
|
||
"""
|
||
写入所有对象到备份路径
|
||
"""
|
||
obj_save_path = os.path.join(self.backup_path, "objects")
|
||
for obj in self.backup_trees:
|
||
if isinstance(obj, TreeObject):
|
||
await obj.writeBlobs(obj_save_path) # 如果是TreeObject,则调用writeBlobs方法
|
||
else:
|
||
await obj.writeBlob(obj_save_path) # 如果是BlobObject,则调用writeBlob方法
|
||
|
||
def recover(self, recover_path: str):
|
||
"""
|
||
恢复到指定备份
|
||
|
||
:return
|
||
"""
|
||
pass
|
||
|
||
def getBackupTree(self):
|
||
"""
|
||
获取备份树
|
||
|
||
:return
|
||
"""
|
||
pass
|