# 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