Spaces:
Runtime error
Runtime error
File size: 4,865 Bytes
ffcf62f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# TODO: Potentially make another package for this
import json
import os
from typing import Any
import re
import shutil
import tempfile
from swarms.utils.loguru_logger import initialize_logger
logger = initialize_logger(log_folder="file_processing")
def check_if_folder_exists(folder_name: str) -> bool:
"""
Check if a folder exists at the specified path.
Args:
folder_name (str): The path to the folder to check.
Returns:
bool: True if the folder exists, False otherwise.
"""
try:
return os.path.exists(folder_name) and os.path.isdir(
folder_name
)
except Exception as e:
logger.error(f"Failed to check if folder exists: {e}")
return False
def zip_workspace(workspace_path: str, output_filename: str):
"""
Zips the specified workspace directory and returns the path to the zipped file.
Ensure the output_filename does not have .zip extension as it's added by make_archive.
"""
try:
temp_dir = tempfile.mkdtemp()
# Remove .zip if present in output_filename to avoid duplication
base_output_path = os.path.join(
temp_dir, output_filename.replace(".zip", "")
)
zip_path = shutil.make_archive(
base_output_path, "zip", workspace_path
)
return zip_path # make_archive already appends .zip
except Exception as e:
logger.error(f"Failed to zip workspace: {e}")
return None
def sanitize_file_path(file_path: str):
"""
Cleans and sanitizes the file path to be valid for Windows.
"""
try:
sanitized_path = file_path.replace("`", "").strip()
# Replace any invalid characters here with an underscore or remove them
sanitized_path = re.sub(r'[<>:"/\\|?*]', "_", sanitized_path)
return sanitized_path
except Exception as e:
logger.error(f"Failed to sanitize file path: {e}")
return None
def load_json(json_string: str):
"""
Loads a JSON string and returns the corresponding Python object.
Args:
json_string (str): The JSON string to be loaded.
Returns:
object: The Python object representing the JSON data.
"""
try:
json_data = json.loads(json_string)
return json_data
except json.JSONDecodeError as e:
logger.error(f"Failed to decode JSON: {e}")
return None
def create_file(
content: str,
file_path: str,
):
"""
Creates a file with the specified content at the specified file path.
Args:
content (str): The content to be written to the file.
file_path (str): The path to the file to be created.
"""
try:
with open(file_path, "w") as file:
file.write(content)
return file_path
except Exception as e:
logger.error(f"Failed to create file: {e}")
return None
def create_file_in_folder(
folder_path: str, file_name: str, content: Any
):
"""
Creates a file in the specified folder with the given file name and content.
Args:
folder_path (str): The path of the folder where the file will be created.
file_name (str): The name of the file to be created.
content (str): The content to be written to the file.
Returns:
str: The path of the created file.
"""
try:
if not os.path.exists(folder_path):
os.makedirs(folder_path)
# Create the file in the folder
file_path = os.path.join(folder_path, file_name)
with open(file_path, "w") as file:
file.write(content)
return file_path
except Exception as e:
logger.error(f"Failed to create file in folder: {e}")
return None
def zip_folders(
folder1_path: str, folder2_path: str, zip_file_path: str
):
"""
Zip two folders into a single zip file.
Args:
folder1_path (str): Path to the first folder.
folder2_path (str): Path to the second folder.
zip_file_path (str): Path to the output zip file.
Returns:
None
"""
try:
# Create a temporary directory
with tempfile.TemporaryDirectory() as temp_dir:
# Copy both folders into the temporary directory
shutil.copytree(
folder1_path,
os.path.join(
temp_dir, os.path.basename(folder1_path)
),
)
shutil.copytree(
folder2_path,
os.path.join(
temp_dir, os.path.basename(folder2_path)
),
)
# Create a zip file that contains the temporary directory
shutil.make_archive(zip_file_path, "zip", temp_dir)
except Exception as e:
logger.error(f"Failed to zip folders: {e}")
return None
|