filehandler
This commit is contained in:
103
filehandle.py
Normal file
103
filehandle.py
Normal file
@@ -0,0 +1,103 @@
|
||||
import os
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
ORIGIN = "C:/testing/source_2"
|
||||
BACKUP = "C:/Databasebackup"
|
||||
FILE = "database.db"
|
||||
def handle_file():
|
||||
"""
|
||||
Handles file creation, movement, and backup based on path and backup existence.
|
||||
|
||||
Args:
|
||||
path (str): The desired path for the file.
|
||||
filename (str): The name of the file.
|
||||
backup_location (str): The location for backups.
|
||||
|
||||
Returns:
|
||||
str: The final path of the file.
|
||||
"""
|
||||
full = Path(ORIGIN) / FILE
|
||||
full_path = str(full)
|
||||
backup = Path(BACKUP) / FILE
|
||||
backup_path = str(backup)
|
||||
origin_reachable = os.path.exists(full_path)
|
||||
backup_reachable = os.path.exists(backup_path)
|
||||
print(origin_reachable, backup_reachable)
|
||||
if not origin_reachable and not backup_reachable:
|
||||
make_dirs(ORIGIN, BACKUP)
|
||||
|
||||
# if not os.path.exists(full_path):
|
||||
# print("File does not exist, creating file")
|
||||
# create_file(full_path)
|
||||
if os.path.exists(backup_path) and ".backup" in os.listdir(BACKUP):
|
||||
print("Used backup previously, overwriting file")
|
||||
#overwrite file at source with backup
|
||||
shutil.copy(backup_path, full_path)
|
||||
os.remove(BACKUP + "/.backup")
|
||||
|
||||
|
||||
def make_dirs(full_path, backup_path):
|
||||
"""
|
||||
Creates directories if they do not exist and moves the file to the desired location.
|
||||
|
||||
Args:
|
||||
full_path (str): The full path of the file.
|
||||
backup_path (str): The backup path of the file.
|
||||
"""
|
||||
if not os.path.exists(full_path):
|
||||
os.makedirs(full_path)
|
||||
if not os.path.exists(backup_path):
|
||||
os.makedirs(backup_path)
|
||||
|
||||
def create_file(full_path):
|
||||
"""
|
||||
Creates a file at the desired location.
|
||||
|
||||
Args:
|
||||
full_path (str): The full path of the file.
|
||||
"""
|
||||
with open(full_path, "w") as f:
|
||||
f.write("")
|
||||
|
||||
def handle_folder_reachability(original_path, backup_path):
|
||||
"""
|
||||
Checks if the original folder is reachable. If not, creates a backup.
|
||||
If the original folder becomes reachable again, restores the backup.
|
||||
|
||||
Args:
|
||||
original_path (str): Path to the original folder.
|
||||
backup_path (str): Path to the backup folder.
|
||||
|
||||
Returns:
|
||||
str: Path to the current accessible folder.
|
||||
"""
|
||||
|
||||
backup_file = os.path.join(backup_path, ".backup")
|
||||
try:
|
||||
os.makedirs(original_path)
|
||||
except FileExistsError:
|
||||
pass
|
||||
|
||||
if not os.path.exists(original_path):
|
||||
#original folder not reachable, use backup path and create .backup file
|
||||
if not os.path.exists(backup_path):
|
||||
os.makedirs(backup_path)
|
||||
with open(backup_file, "w") as f:
|
||||
f.write("")
|
||||
|
||||
# Create an empty backup file as a marker
|
||||
return backup_path +"/" + FILE
|
||||
|
||||
else:
|
||||
# Original folder is reachable, check for backup
|
||||
if os.path.exists(backup_file):
|
||||
# Restore backup
|
||||
shutil.rmtree(original_path) # Remove original folder to avoid conflicts
|
||||
shutil.move(backup_path, original_path)
|
||||
#os.remove(backup_file)
|
||||
#remove backup file from original path
|
||||
os.remove(original_path + "/.backup")
|
||||
os.makedirs(backup_path)
|
||||
return original_path +"/" + FILE
|
||||
if __name__=="__main__":
|
||||
print(handle_folder_reachability(ORIGIN, BACKUP)) # should create a new file at C:/newdatabase/database.db)
|
||||
Reference in New Issue
Block a user