Skip to content

9 refactor blech data transfer into functions and function calls#14

Merged
abuzarmahmood merged 3 commits intomasterfrom
9-refactor-blech_data_transfer-into-functions-and-function-calls
Apr 28, 2025
Merged

9 refactor blech data transfer into functions and function calls#14
abuzarmahmood merged 3 commits intomasterfrom
9-refactor-blech_data_transfer-into-functions-and-function-calls

Conversation

@abuzarmahmood
Copy link
Copy Markdown
Member

  • refactor: Modularize blech_data_transfer.py into smaller, reusable functions
  • refactor: extract data transfer logic into function

@abuzarmahmood
Copy link
Copy Markdown
Member Author

Generated edit command:

  • Summary of User's Issues and Requests:
    The user has requested a refactor of the blech_data_transfer repository to break down the existing scripts into smaller, reusable functions. The focus is on encapsulating specific tasks or operations into functions and replacing original code blocks with calls to these new functions while maintaining the same functionality.

  • Overview of Plan to Address the Issues:
    The plan involves identifying key sections of the code that can be modularized into functions. This includes argument parsing, data folder selection, experiment existence checks, and the data transfer process. Each of these tasks will be encapsulated into a function, and the main script will be updated to call these functions.

  • Specific Details of Changes to be Made:

    1. Refactor Argument Parsing:

      • File: blech_data_transfer.py
      • Lines: 35-39
      • Description: Encapsulate the argument parsing logic into a function.
      • Code Snippet:
        def parse_arguments():
            parser = argparse.ArgumentParser(description='Transfer data from the blech server to the local machine.')
            parser.add_argument('data_folder', type=str, help='Path to local data folder.', default=None)
            return parser.parse_args()
        
        args = parse_arguments()
    2. Refactor Data Folder Selection:

      • File: blech_data_transfer.py
      • Lines: 41-49
      • Description: Encapsulate the logic for selecting the data folder into a function.
      • Code Snippet:
        def get_data_folder(args):
            if args.data_folder is None:
                data_folder = easygui.diropenbox(title='Select data folder', default=os.path.expanduser('~/Desktop'))
            else:
                data_folder = args.data_folder
            return data_folder.rstrip('/')
        
        data_folder = get_data_folder(args)
    3. Refactor Experiment Existence Check:

      • File: blech_data_transfer.py
      • Lines: 54-68
      • Description: Encapsulate the logic for checking if an experiment exists into a function.
      • Code Snippet:
        def check_experiment_existence(handler, data_folder):
            exp_exists = handler.check_experiment_exists(data_folder)
            if exp_exists:
                print(f"Experiment already exists on the server: {data_folder}")
                continue_bool = input("Would you like to continue (y/n)? ")
                while continue_bool not in ['y', 'n']:
                    print(f"Invalid selection: {continue_bool}")
                    continue_bool = input("Would you like to continue (y/n)? ")
                if continue_bool == 'n':
                    print("Exiting...")
                    sys.exit()
        
        check_experiment_existence(this_dataset_handler, data_folder)
    4. Refactor Data Transfer Process:

      • File: blech_data_transfer.py
      • Lines: 202-248
      • Description: Encapsulate the data transfer process into a function.
      • Code Snippet:
        def transfer_data(data_folder, server_data_folder, dir_list, rel_file_list):
            print("Beginning data transfer...")
            # Create directories on the server
            pbar = tqdm(dir_list)
            for d in pbar:
                rel_dir = os.path.relpath(d, data_folder)
                pbar.set_description(f"Creating {rel_dir}")
                server_dir = os.path.join(server_data_folder, rel_dir)
                if not os.path.exists(server_dir):
                    os.makedirs(server_dir)
                else:
                    print(f"Directory already exists on the server: {server_dir}")
                    print("")
        
            # Copy files to the server
            pbar = tqdm(rel_file_list)
            for file in pbar:
                pbar.set_description(f"Copying {file}")
                src_path = os.path.join(data_folder, file)
                dst_path = os.path.join(server_data_folder, file)
                if not os.path.exists(dst_path):
                    shutil.copy2(src_path, dst_path)
                else:
                    print(f"File already exists on the server: {file}")
                    print("")
            print("Data transfer complete.")
            print("")
        
        transfer_data(data_folder, server_data_folder, dir_list, rel_file_list)

These changes aim to modularize the code, improving readability, maintainability, and reusability.


This response was automatically generated by blech_bot using model gpt-4o

Aider output:

View Aider Output
The --sonnet flag is deprecated and will be removed in a future version. Please use --model sonnet instead.
You can skip this check with --no-gitignore
Added .aider* to .gitignore
Aider v0.82.2
Main model: anthropic/claude-3-7-sonnet-20250219 with diff edit format, infinite output
Weak model: anthropic/claude-3-5-haiku-20241022
Git repo: .git with 9 files
Repo-map: using 4096 tokens, auto refresh


blech_data_transfer.py
I'll refactor the blech_data_transfer.py script by breaking it down into smaller, reusable functions as requested. Here are the    
changes:                                                                                                                           


1. Refactor Argument Parsing                                                                                                       

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
# Get path to the data folder                                                                                                      
parser = argparse.ArgumentParser(description='Transfer data from the blech server to the local machine.')                          
parser.add_argument('data_folder', type=str, help='Path to local data folder.',                                                    
                    default=None)                                                                                                  
args = parser.parse_args()                                                                                                         
=======                                                                                                                            
def parse_arguments():                                                                                                             
    """Parse command line arguments."""                                                                                            
    parser = argparse.ArgumentParser(description='Transfer data from the blech server to the local machine.')                      
    parser.add_argument('data_folder', type=str, help='Path to local data folder.',                                                
                        default=None)                                                                                              
    return parser.parse_args()                                                                                                     
                                                                                                                                   
# Get path to the data folder                                                                                                      
args = parse_arguments()                                                                                                           
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   


2. Refactor Data Folder Selection                                                                                                  

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
if args.data_folder is None:                                                                                                       
    data_folder = easygui.diropenbox(title='Select data folder',                                                                   
                                     default=os.path.expanduser('~/Desktop'))                                                      
else:                                                                                                                              
    data_folder = args.data_folder                                                                                                 
                                                                                                                                   
if data_folder[-1] == '/':                                                                                                         
    data_folder = data_folder[:-1]                                                                                                 
=======                                                                                                                            
def get_data_folder(args):                                                                                                         
    """Get the data folder path from arguments or GUI selection."""                                                                
    if args.data_folder is None:                                                                                                   
        data_folder = easygui.diropenbox(title='Select data folder',                                                               
                                         default=os.path.expanduser('~/Desktop'))                                                  
    else:                                                                                                                          
        data_folder = args.data_folder                                                                                             
                                                                                                                                   
    if data_folder and data_folder[-1] == '/':                                                                                     
        data_folder = data_folder[:-1]                                                                                             
                                                                                                                                   
    return data_folder                                                                                                             
                                                                                                                                   
data_folder = get_data_folder(args)                                                                                                
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   


3. Refactor Experiment Existence Check                                                                                             

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
# Check that experiment is not already on the server                                                                               
this_dataset_handler = dataset_handler.DatasetFrameHandler(dir_path)                                                               
this_dataset_handler.check_dataset_frame()                                                                                         
this_dataset_handler.sync_logs()                                                                                                   
exp_exists = this_dataset_handler.check_experiment_exists(data_folder)                                                             
                                                                                                                                   
if exp_exists:                                                                                                                     
    print(f"Experiment already exists on the server: {data_folder}")                                                               
    continue_bool = input("Would you like to continue (y/n)? ")                                                                    
    while continue_bool not in ['y', 'n']:                                                                                         
        print(f"Invalid selection: {continue_bool}")                                                                               
        continue_bool = input("Would you like to continue (y/n)? ")                                                                
    if continue_bool == 'n':                                                                                                       
        print("Exiting...")                                                                                                        
        sys.exit()                                                                                                                 
=======                                                                                                                            
def initialize_dataset_handler(dir_path):                                                                                          
    """Initialize the dataset handler and check the dataset frame."""                                                              
    handler = dataset_handler.DatasetFrameHandler(dir_path)                                                                        
    handler.check_dataset_frame()                                                                                                  
    handler.sync_logs()                                                                                                            
    return handler                                                                                                                 
                                                                                                                                   
def check_experiment_existence(handler, data_folder):                                                                              
    """Check if the experiment already exists on the server."""                                                                    
    exp_exists = handler.check_experiment_exists(data_folder)                                                                      
    if exp_exists:                                                                                                                 
        print(f"Experiment already exists on the server: {data_folder}")                                                           
        continue_bool = input("Would you like to continue (y/n)? ")                                                                
        while continue_bool not in ['y', 'n']:                                                                                     
            print(f"Invalid selection: {continue_bool}")                                                                           
            continue_bool = input("Would you like to continue (y/n)? ")                                                            
        if continue_bool == 'n':                                                                                                   
            print("Exiting...")                                                                                                    
            sys.exit()                                                                                                             
                                                                                                                                   
# Check that experiment is not already on the server                                                                               
this_dataset_handler = initialize_dataset_handler(dir_path)                                                                        
check_experiment_existence(this_dataset_handler, data_folder)                                                                      
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   


4. Refactor Data Folder Validation                                                                                                 

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
# Check that data folder exists                                                                                                    
if not os.path.exists(data_folder):                                                                                                
    print(f"Data folder not found: {data_folder}")                                                                                 
    print("Exiting...")                                                                                                            
    sys.exit()                                                                                                                     
else:                                                                                                                              
    print(f"Processing data folder: {data_folder}")                                                                                
    print("")                                                                                                                      
=======                                                                                                                            
def validate_data_folder(data_folder):                                                                                             
    """Validate that the data folder exists."""                                                                                    
    if not os.path.exists(data_folder):                                                                                            
        print(f"Data folder not found: {data_folder}")                                                                             
        print("Exiting...")                                                                                                        
        sys.exit()                                                                                                                 
    else:                                                                                                                          
        print(f"Processing data folder: {data_folder}")                                                                            
        print("")                                                                                                                  
                                                                                                                                   
validate_data_folder(data_folder)                                                                                                  
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   


5. Refactor Info File Check                                                                                                        

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
# Check if ".info" file exists in the data folder                                                                                  
info_file = glob(os.path.join(data_folder, '*.info'))                                                                              
while len(info_file) == 0:                                                                                                         
    info_file = glob(os.path.join(data_folder, '*.info'))                                                                          
    print("""                                                                                                                      
    No ".info" file found in the data folder.                                                                                      
    Run blech_exp_info.py to create an ".info" file.                                                                               
          """)                                                                                                                     
    exit_code = input("Should I wait (w) or exit (e)? ")                                                                           
    while exit_code not in ['w', 'e']:                                                                                             
        print(f"Invalid selection: {exit_code}")                                                                                   
        exit_code = input("Should I wait (w) or exit (e)? ")                                                                       
    if exit_code == 'w':                                                                                                           
        input("Press Enter to continue...")                                                                                        
    else:                                                                                                                          
        print("Exiting...")                                                                                                        
        sys.exit()                                                                                                                 
                                                                                                                                   
else:                                                                                                                              
    info_file = info_file[0]                                                                                                       
    print(f"Found .info file: {info_file}")                                                                                        
    print("Continuing...")                                                                                                         
    print("")                                                                                                                      
=======                                                                                                                            
def check_info_file(data_folder):                                                                                                  
    """Check if an .info file exists in the data folder."""                                                                        
    info_file = glob(os.path.join(data_folder, '*.info'))                                                                          
    while len(info_file) == 0:                                                                                                     
        info_file = glob(os.path.join(data_folder, '*.info'))                                                                      
        print("""                                                                                                                  
    No ".info" file found in the data folder.                                                                                      
    Run blech_exp_info.py to create an ".info" file.                                                                               
          """)                                                                                                                     
        exit_code = input("Should I wait (w) or exit (e)? ")                                                                       
        while exit_code not in ['w', 'e']:                                                                                         
            print(f"Invalid selection: {exit_code}")                                                                               
            exit_code = input("Should I wait (w) or exit (e)? ")                                                                   
        if exit_code == 'w':                                                                                                       
            input("Press Enter to continue...")                                                                                    
        else:                                                                                                                      
            print("Exiting...")                                                                                                    
            sys.exit()                                                                                                             
    else:                                                                                                                          
        info_file = info_file[0]                                                                                                   
        print(f"Found .info file: {info_file}")                                                                                    
        print("Continuing...")                                                                                                     
        print("")                                                                                                                  
    return info_file                                                                                                               
                                                                                                                                   
info_file = check_info_file(data_folder)                                                                                           
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   


6. Refactor User Selection                                                                                                         

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
# Ask user to select a user from the list                                                                                          
user_inds = list(np.arange(len(users_list))+1)                                                                                     
user_select_str = "\n".join(f"{i}: {users_list.iloc[i-1]['Username']}" for i in user_inds)                                         
msg = f"Select a user from the list:\n{user_select_str}\n:::"                                                                      
# Don't exit if user doesn't select a user                                                                                         
user_ind = input(msg)                                                                                                              
                                                                                                                                   
while not user_ind.isdigit() or int(user_ind) not in user_inds:                                                                    
    print(f"Invalid selection: {user_ind}")                                                                                        
    user_ind = input(msg)                                                                                                          
                                                                                                                                   
# Get subfolders for the selected user                                                                                             
user = users_list.iloc[int(user_ind)-1]['Username']                                                                                
print(f"Selected user: {user}")                                                                                                    
user_path = users_list.loc[                                                                                                        
        users_list['Username'] == user, 'Directory'].values[0]                                                                     
user_path = os.path.join(server_path, user_path)                                                                                   
=======                                                                                                                            
def select_user(users_list, server_path):                                                                                          
    """Select a user from the list and get their path."""                                                                          
    user_inds = list(np.arange(len(users_list))+1)                                                                                 
    user_select_str = "\n".join(f"{i}: {users_list.iloc[i-1]['Username']}" for i in user_inds)                                     
    msg = f"Select a user from the list:\n{user_select_str}\n:::"                                                                  
    # Don't exit if user doesn't select a user                                                                                     
    user_ind = input(msg)                                                                                                          
                                                                                                                                   
    while not user_ind.isdigit() or int(user_ind) not in user_inds:                                                                
        print(f"Invalid selection: {user_ind}")                                                                                    
        user_ind = input(msg)                                                                                                      
                                                                                                                                   
    # Get subfolders for the selected user                                                                                         
    user = users_list.iloc[int(user_ind)-1]['Username']                                                                            
    print(f"Selected user: {user}")                                                                                                
    user_path = users_list.loc[                                                                                                    
            users_list['Username'] == user, 'Directory'].values[0]                                                                 
    user_path = os.path.join(server_path, user_path)                                                                               
                                                                                                                                   
    return user, user_path                                                                                                         
                                                                                                                                   
user, user_path = select_user(users_list, server_path)                                                                             
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   


7. Refactor Subfolder Selection                                                                                                    

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
# Ask user to pick a subfolder from the list, or create a new one                                                                  
subdirs = sorted([d for d in os.listdir(user_path) if os.path.isdir(os.path.join(user_path, d))])                                  
subdir_inds = list(np.arange(len(subdirs))+1)                                                                                      
subdir_select_str = "\n".join(f"{i}: {subdirs[i-1]}" for i in subdir_inds)                                                         
# Add -1 : Create new subfolder option                                                                                             
subdir_select_str = f"\n-1: Create new subfolder" + '\n\n' + subdir_select_str                                                     
msg = f"Select a subfolder from the list:\n{subdir_select_str}\n:::"                                                               
copy_dir = input(msg)                                                                                                              
                                                                                                                                   
while int(copy_dir) not in subdir_inds+[-1] and int(copy_dir) != -1:                                                               
    print(f"Invalid selection: {copy_dir}")                                                                                        
    copy_dir = input(msg)                                                                                                          
                                                                                                                                   
if int(copy_dir) == -1:                                                                                                            
    print("Creating new subfolder...")                                                                                             
    new_subdir = input("Enter new subfolder name: ")                                                                               
    copy_dir = os.path.join(user_path, new_subdir)                                                                                 
    if not os.path.exists(copy_dir):                                                                                               
        os.makedirs(copy_dir)                                                                                                      
        print(f"Creating new subfolder: {os.path.join(copy_dir)}")                                                                 
    else:                                                                                                                          
        print(f"Subfolder already exists: {copy_dir}")                                                                             
        print("Continuing...")                                                                                                     
        print("")                                                                                                                  
else:                                                                                                                              
    print(f"Selected subfolder: {subdirs[int(copy_dir)-1]}")                                                                       
    copy_dir = os.path.join(user_path, subdirs[int(copy_dir)-1])                                                                   
=======                                                                                                                            
def select_subfolder(user_path):                                                                                                   
    """Select a subfolder or create a new one."""                                                                                  
    subdirs = sorted([d for d in os.listdir(user_path) if os.path.isdir(os.path.join(user_path, d))])                              
    subdir_inds = list(np.arange(len(subdirs))+1)                                                                                  
    subdir_select_str = "\n".join(f"{i}: {subdirs[i-1]}" for i in subdir_inds)                                                     
    # Add -1 : Create new subfolder option                                                                                         
    subdir_select_str = f"\n-1: Create new subfolder" + '\n\n' + subdir_select_str                                                 
    msg = f"Select a subfolder from the list:\n{subdir_select_str}\n:::"                                                           
    copy_dir = input(msg)                                                                                                          
                                                                                                                                   
    while not copy_dir.isdigit() or (int(copy_dir) not in subdir_inds and int(copy_dir) != -1):                                    
        print(f"Invalid selection: {copy_dir}")                                                                                    
        copy_dir = input(msg)                                                                                                      
                                                                                                                                   
    if int(copy_dir) == -1:                                                                                                        
        print("Creating new subfolder...")                                                                                         
        new_subdir = input("Enter new subfolder name: ")                                                                           
        copy_dir = os.path.join(user_path, new_subdir)                                                                             
        if not os.path.exists(copy_dir):                                                                                           
            os.makedirs(copy_dir)                                                                                                  
            print(f"Creating new subfolder: {os.path.join(copy_dir)}")                                                             
        else:                                                                                                                      
            print(f"Subfolder already exists: {copy_dir}")                                                                         
            print("Continuing...")                                                                                                 
            print("")                                                                                                              
    else:                                                                                                                          
        print(f"Selected subfolder: {subdirs[int(copy_dir)-1]}")                                                                   
        copy_dir = os.path.join(user_path, subdirs[int(copy_dir)-1])                                                               
                                                                                                                                   
    return copy_dir                                                                                                                
                                                                                                                                   
copy_dir = select_subfolder(user_path)                                                                                             
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   


8. Refactor File Listing                                                                                                           

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
# Get list of files to transfer                                                                                                    
file_list = glob(os.path.join(data_folder, '**', '*'), recursive=True)                                                             
file_list = sorted(file_list)                                                                                                      
dir_list = [f for f in file_list if os.path.isdir(f)]                                                                              
file_list = [f for f in file_list if os.path.isfile(f)]                                                                            
rel_file_list = [os.path.relpath(f, data_folder) for f in file_list]                                                               
                                                                                                                                   
# Create data folder on the server                                                                                                 
server_data_folder = os.path.join(copy_dir, os.path.basename(data_folder))                                                         
if not os.path.exists(server_data_folder):                                                                                         
    os.makedirs(server_data_folder)                                                                                                
    print(f"Created server data folder: {server_data_folder}")                                                                     
    print("Continuing...")                                                                                                         
    print("")                                                                                                                      
else:                                                                                                                              
    print(f"Server data folder already exists: {server_data_folder}")                                                              
    print("Continuing...")                                                                                                         
    print("")                                                                                                                      
=======                                                                                                                            
def prepare_file_transfer(data_folder, copy_dir):                                                                                  
    """Prepare file lists and create server data folder."""                                                                        
    # Get list of files to transfer                                                                                                
    file_list = glob(os.path.join(data_folder, '**', '*'), recursive=True)                                                         
    file_list = sorted(file_list)                                                                                                  
    dir_list = [f for f in file_list if os.path.isdir(f)]                                                                          
    file_list = [f for f in file_list if os.path.isfile(f)]                                                                        
    rel_file_list = [os.path.relpath(f, data_folder) for f in file_list]                                                           
                                                                                                                                   
    # Create data folder on the server                                                                                             
    server_data_folder = os.path.join(copy_dir, os.path.basename(data_folder))                                                     
    if not os.path.exists(server_data_folder):                                                                                     
        os.makedirs(server_data_folder)                                                                                            
        print(f"Created server data folder: {server_data_folder}")                                                                 
        print("Continuing...")                                                                                                     
        print("")                                                                                                                  
    else:                                                                                                                          
        print(f"Server data folder already exists: {server_data_folder}")                                                          
        print("Continuing...")                                                                                                     
        print("")                                                                                                                  
                                                                                                                                   
    return dir_list, file_list, rel_file_list, server_data_folder                                                                  
                                                                                                                                   
dir_list, file_list, rel_file_list, server_data_folder = prepare_file_transfer(data_folder, copy_dir)                              
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   


9. Refactor Data Transfer Process                                                                                                  

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
# Begin transfer process                                                                                                           
print("Beginning data transfer...")                                                                                                
print("")                                                                                                                          
                                                                                                                                   
# Create directories on the server                                                                                                 
pbar = tqdm(dir_list)                                                                                                              
for d in pbar:                                                                                                                     
    rel_dir = os.path.relpath(d, data_folder)                                                                                      
    pbar.set_description(f"Creating {rel_dir}")                                                                                    
    server_dir = os.path.join(server_data_folder, rel_dir)                                                                         
    if not os.path.exists(server_dir):                                                                                             
        os.makedirs(server_dir)                                                                                                    
    else:                                                                                                                          
        print(f"Directory already exists on the server: {server_dir}")                                                             
        print("")                                                                                                                  
                                                                                                                                   
# Copy files to the server                                                                                                         
pbar = tqdm(rel_file_list)                                                                                                         
for file in pbar:                                                                                                                  
    pbar.set_description(f"Copying {file}")                                                                                        
    src_path = os.path.join(data_folder, file)                                                                                     
    dst_path = os.path.join(server_data_folder, file)                                                                              
    if not os.path.exists(dst_path):                                                                                               
        shutil.copy2(src_path, dst_path)                                                                                           
    else:                                                                                                                          
        print(f"File already exists on the server: {file}")                                                                        
        print("")                                                                                                                  
print("Data transfer complete.")                                                                                                   
print("")                                                                                                                          
=======                                                                                                                            
def transfer_data(data_folder, server_data_folder, dir_list, rel_file_list):                                                       
    """Transfer data from local folder to server."""                                                                               
    # Begin transfer process                                                                                                       
    print("Beginning data transfer...")                                                                                            
    print("")                                                                                                                      
                                                                                                                                   
    # Create directories on the server                                                                                             
    pbar = tqdm(dir_list)                                                                                                          
    for d in pbar:                                                                                                                 
        rel_dir = os.path.relpath(d, data_folder)                                                                                  
        pbar.set_description(f"Creating {rel_dir}")                                                                                
        server_dir = os.path.join(server_data_folder, rel_dir)                                                                     
        if not os.path.exists(server_dir):                                                                                         
            os.makedirs(server_dir)                                                                                                
        else:                                                                                                                      
            print(f"Directory already exists on the server: {server_dir}")                                                         
            print("")                                                                                                              
                                                                                                                                   
    # Copy files to the server                                                                                                     
    pbar = tqdm(rel_file_list)                                                                                                     
    for file in pbar:                                                                                                              
        pbar.set_description(f"Copying {file}")                                                                                    
        src_path = os.path.join(data_folder, file)                                                                                 
        dst_path = os.path.join(server_data_folder, file)                                                                          
        if not os.path.exists(dst_path):                                                                                           
            shutil.copy2(src_path, dst_path)                                                                                       
        else:                                                                                                                      
            print(f"File already exists on the server: {file}")                                                                    
            print("")                                                                                                              
    print("Data transfer complete.")                                                                                               
    print("")                                                                                                                      
                                                                                                                                   
transfer_data(data_folder, server_data_folder, dir_list, rel_file_list)                                                            
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   


10. Refactor Entry Addition                                                                                                        

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
# Append new entry to recording log                                                                                                
email = users_list.loc[                                                                                                            
        users_list['Username'] == user, 'Email'].values[0]                                                                         
entry_keys = [                                                                                                                     
        'date',                                                                                                                    
        'time',                                                                                                                    
        'user',                                                                                                                    
        'email',                                                                                                                   
        'recording',                                                                                                               
        'recording_path',                                                                                                          
        'info_file_exists'                                                                                                         
        ]                                                                                                                          
entry_dict = dict(                                                                                                                 
        zip(                                                                                                                       
            entry_keys,                                                                                                            
            [time.strftime('%Y-%m-%d'),                                                                                            
             time.strftime('%H:%M:%S'),                                                                                            
             user,                                                                                                                 
             email,                                                                                                                
             os.path.basename(data_folder),                                                                                        
             server_data_folder,                                                                                                   
             True                                                                                                                  
             ]                                                                                                                     
            )                                                                                                                      
        )                                                                                                                          
                                                                                                                                   
# new_entry = pd.DataFrame(                                                                                                        
#         columns=entry_keys,                                                                                                      
#         data=[[time.strftime('%Y-%m-%d'),                                                                                        
#                time.strftime('%H:%M:%S'),                                                                                        
#                user,                                                                                                             
#                email,                                                                                                            
#                os.path.basename(data_folder),                                                                                    
#                server_data_folder]])                                                                                             
# recording_log = recording_log._append(new_entry, ignore_index=True)                                                              
# recording_log.to_csv('recording_log.csv', index=False)                                                                           
                                                                                                                                   
this_dataset_handler.add_entry(entry_dict)                                                                                         
=======                                                                                                                            
def add_log_entry(dataset_handler, users_list, user, data_folder, server_data_folder):                                             
    """Add an entry to the recording log."""                                                                                       
    email = users_list.loc[                                                                                                        
            users_list['Username'] == user, 'Email'].values[0]                                                                     
    entry_keys = [                                                                                                                 
            'date',                                                                                                                
            'time',                                                                                                                
            'user',                                                                                                                
            'email',                                                                                                               
            'recording',                                                                                                           
            'recording_path',                                                                                                      
            'info_file_exists'                                                                                                     
            ]                                                                                                                      
    entry_dict = dict(                                                                                                             
            zip(                                                                                                                   
                entry_keys,                                                                                                        
                [time.strftime('%Y-%m-%d'),                                                                                        
                 time.strftime('%H:%M:%S'),                                                                                        
                 user,                                                                                                             
                 email,                                                                                                            
                 os.path.basename(data_folder),                                                                                    
                 server_data_folder,                                                                                               
                 True                                                                                                              
                 ]                                                                                                                 
                )                                                                                                                  
            )                                                                                                                      
                                                                                                                                   
    dataset_handler.add_entry(entry_dict)                                                                                          
                                                                                                                                   
add_log_entry(this_dataset_handler, users_list, user, data_folder, server_data_folder)                                             
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   

You can test the refactored script by running it with:                                                                             

                                                                                                                                   
python blech_data_transfer.py                                                                                                      
                                                                                                                                   

Tokens: 6.3k sent, 3.9k received. Cost: $0.08 message, $0.08 session.
The LLM did not conform to the edit format.
https://aider.chat/docs/troubleshooting/edit-errors.html

# 1 SEARCH/REPLACE block failed to match!

## SearchReplaceNoExactMatch: This SEARCH block failed to exactly match lines in blech_data_transfer.py
<<<<<<< SEARCH
# Begin transfer process
print("Beginning data transfer...")
print("")

# Create directories on the server
pbar = tqdm(dir_list)
for d in pbar:
    rel_dir = os.path.relpath(d, data_folder)
    pbar.set_description(f"Creating {rel_dir}")
    server_dir = os.path.join(server_data_folder, rel_dir)
    if not os.path.exists(server_dir):
        os.makedirs(server_dir)
    else:
        print(f"Directory already exists on the server: {server_dir}")
        print("")

# Copy files to the server
pbar = tqdm(rel_file_list)
for file in pbar:
    pbar.set_description(f"Copying {file}")
    src_path = os.path.join(data_folder, file)
    dst_path = os.path.join(server_data_folder, file)
    if not os.path.exists(dst_path): 
        shutil.copy2(src_path, dst_path)
    else:
        print(f"File already exists on the server: {file}")
        print("")
print("Data transfer complete.")
print("")
=======
def transfer_data(data_folder, server_data_folder, dir_list, rel_file_list):
    """Transfer data from local folder to server."""
    # Begin transfer process
    print("Beginning data transfer...")
    print("")

    # Create directories on the server
    pbar = tqdm(dir_list)
    for d in pbar:
        rel_dir = os.path.relpath(d, data_folder)
        pbar.set_description(f"Creating {rel_dir}")
        server_dir = os.path.join(server_data_folder, rel_dir)
        if not os.path.exists(server_dir):
            os.makedirs(server_dir)
        else:
            print(f"Directory already exists on the server: {server_dir}")
            print("")

    # Copy files to the server
    pbar = tqdm(rel_file_list)
    for file in pbar:
        pbar.set_description(f"Copying {file}")
        src_path = os.path.join(data_folder, file)
        dst_path = os.path.join(server_data_folder, file)
        if not os.path.exists(dst_path): 
            shutil.copy2(src_path, dst_path)
        else:
            print(f"File already exists on the server: {file}")
            print("")
    print("Data transfer complete.")
    print("")

transfer_data(data_folder, server_data_folder, dir_list, rel_file_list)
>>>>>>> REPLACE

Did you mean to match some of these actual lines from blech_data_transfer.py?

else:
    print(f"Server data folder already exists: {server_data_folder}")
    print("Continuing...")
    print("")

return dir_list, file_list, rel_file_list, server_data_folder

dir_list, file_list, rel_file_list, server_data_folder = prepare_file_transfer(data_folder, copy_dir)

Create directories on the server

pbar = tqdm(dir_list)
for d in pbar:
rel_dir = os.path.relpath(d, data_folder)
pbar.set_description(f"Creating {rel_dir}")
server_dir = os.path.join(server_data_folder, rel_dir)
if not os.path.exists(server_dir):
os.makedirs(server_dir)
else:
print(f"Directory already exists on the server: {server_dir}")
print("")

Copy files to the server

pbar = tqdm(rel_file_list)
for file in pbar:
pbar.set_description(f"Copying {file}")
src_path = os.path.join(data_folder, file)
dst_path = os.path.join(server_data_folder, file)
if not os.path.exists(dst_path):
shutil.copy2(src_path, dst_path)
else:
print(f"File already exists on the server: {file}")
print("")
print("Data transfer complete.")
print("")

##############################
##############################

def add_log_entry(dataset_handler, users_list, user, data_folder, server_data_folder):


The SEARCH section must exactly match an existing block of lines including all white space, comments, indentation, docstrings, etc

# The other 9 SEARCH/REPLACE blocks were applied successfully.
Don't re-send them.
Just reply with fixed versions of the block above that failed to match.

Commit c57a2b2 refactor: Modularize blech_data_transfer.py into smaller, reusable functions
I'll fix the SEARCH/REPLACE block that failed to match. Here's the corrected version:                                              

blech_data_transfer.py                                                                                                             

                                                                                                                                   
<<<<<<< SEARCH                                                                                                                     
# Create directories on the server                                                                                                 
pbar = tqdm(dir_list)                                                                                                              
for d in pbar:                                                                                                                     
    rel_dir = os.path.relpath(d, data_folder)                                                                                      
    pbar.set_description(f"Creating {rel_dir}")                                                                                    
    server_dir = os.path.join(server_data_folder, rel_dir)                                                                         
    if not os.path.exists(server_dir):                                                                                             
        os.makedirs(server_dir)                                                                                                    
    else:                                                                                                                          
        print(f"Directory already exists on the server: {server_dir}")                                                             
        print("")                                                                                                                  
                                                                                                                                   
# Copy files to the server                                                                                                         
pbar = tqdm(rel_file_list)                                                                                                         
for file in pbar:                                                                                                                  
    pbar.set_description(f"Copying {file}")                                                                                        
    src_path = os.path.join(data_folder, file)                                                                                     
    dst_path = os.path.join(server_data_folder, file)                                                                              
    if not os.path.exists(dst_path):                                                                                               
        shutil.copy2(src_path, dst_path)                                                                                           
    else:                                                                                                                          
        print(f"File already exists on the server: {file}")                                                                        
        print("")                                                                                                                  
print("Data transfer complete.")                                                                                                   
print("")                                                                                                                          
=======                                                                                                                            
def transfer_data(data_folder, server_data_folder, dir_list, rel_file_list):                                                       
    """Transfer data from local folder to server."""                                                                               
    # Create directories on the server                                                                                             
    pbar = tqdm(dir_list)                                                                                                          
    for d in pbar:                                                                                                                 
        rel_dir = os.path.relpath(d, data_folder)                                                                                  
        pbar.set_description(f"Creating {rel_dir}")                                                                                
        server_dir = os.path.join(server_data_folder, rel_dir)                                                                     
        if not os.path.exists(server_dir):                                                                                         
            os.makedirs(server_dir)                                                                                                
        else:                                                                                                                      
            print(f"Directory already exists on the server: {server_dir}")                                                         
            print("")                                                                                                              
                                                                                                                                   
    # Copy files to the server                                                                                                     
    pbar = tqdm(rel_file_list)                                                                                                     
    for file in pbar:                                                                                                              
        pbar.set_description(f"Copying {file}")                                                                                    
        src_path = os.path.join(data_folder, file)                                                                                 
        dst_path = os.path.join(server_data_folder, file)                                                                          
        if not os.path.exists(dst_path):                                                                                           
            shutil.copy2(src_path, dst_path)                                                                                       
        else:                                                                                                                      
            print(f"File already exists on the server: {file}")                                                                    
            print("")                                                                                                              
    print("Data transfer complete.")                                                                                               
    print("")                                                                                                                      
                                                                                                                                   
transfer_data(data_folder, server_data_folder, dir_list, rel_file_list)                                                            
>>>>>>> REPLACE                                                                                                                    
                                                                                                                                   

Tokens: 11k sent, 491 received. Cost: $0.04 message, $0.12 session.
Applied edit to blech_data_transfer.py
Commit 28dd8e3 refactor: extract data transfer logic into function

python blech_data_transfer.py

…a_transfer into 9-refactor-blech_data_transfer-into-functions-and-function-calls
Copy link
Copy Markdown
Member Author

Copy link
Copy Markdown
Member Author

abuzarmahmood commented Apr 28, 2025

Merge activity

  • Apr 28, 11:44 AM EDT: A user started a stack merge that includes this pull request via Graphite.
  • Apr 28, 11:45 AM EDT: @abuzarmahmood merged this pull request with Graphite.

@abuzarmahmood abuzarmahmood merged commit ec02782 into master Apr 28, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor blech_data_transfer into functions and function calls

1 participant