Skip to content

Commit

Permalink
feat(abr_testing): added functionality to push one or more folders to…
Browse files Browse the repository at this point in the history
… one or more robots at the same time
  • Loading branch information
AnthonyNASC20 committed Nov 20, 2024
1 parent 2a9c96f commit 26b979b
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,10 @@ push:
sleep 1
$(MAKE) -C $(UPDATE_SERVER_DIR) push

.PHONY: push-folder
PUSH_HELPER := abr-testing/abr_testing/tools/make_push.py
push-folder:
$(OT_PYTHON) $(PUSH_HELPER)

.PHONY: push-ot3
push-ot3:
Expand Down
87 changes: 87 additions & 0 deletions abr-testing/abr_testing/tools/make_push.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import subprocess
import multiprocessing
import json
import time
global folders
# Opentrons folders that can be pushed to robot
folders = [
'abr-testing',
'hardware-testing',
'all',
'other',
]



def push_subroutine(cmd: str):
"""Pushes specified folder to specified robot"""
try:
subprocess.run(cmd)
except Exception as e:
print('failed to push folder')
raise

def main(folder_to_push: str, robot_to_push: str) -> int:
"""Main process"""
cmd = 'make -C {folder} push-ot3 host={ip}'
robot_ip_path = ""
push_cmd = ''
folder_int = int(folder_to_push)
if folders[folder_int].lower() == 'all':
if robot_to_push.lower() == 'all':
robot_ip_path = input('Path to robot ips: ')
with open(robot_ip_path, 'r') as ip_file:
robot_json = json.load(ip_file)
robot_ips = robot_json.get('ip_address_list')
ip_file.close()
else:
robot_ips = [robot_to_push]
for folder_name in folders[:-2]:
#Push all folders to all robots
for robot in robot_ips:
print_proc = multiprocessing.Process(target=print, args=(f"Pushing {folder_name} to {robot}!\n\n",))
print_proc.start()
print_proc.join()
push_cmd = cmd.format(folder=folder_name, ip=robot)
process = multiprocessing.Process(target=push_subroutine, args=(push_cmd,))
process.start()
process.join()
print_proc = multiprocessing.Process(target=print, args=(f"Done!\n\n"))
print_proc.start()
print_proc.join()
else:

if folder_int == (len(folders)-1):
folder_name = input('Which folder? ')
else:
folder_name = folders[folder_int]
if robot_to_push.lower() == 'all':
robot_ip_path = input("Path to robot ips: ")
with open(robot_ip_path, 'r') as ip_file:
robot_json = json.load(ip_file)
robot_ips = robot_json.get('ip_address_list')
ip_file.close()
else:
robot_ips = [robot_to_push]

# Push folder to robots
for robot in robot_ips:
print_proc = multiprocessing.Process(target=print, args=(f"Pushing {folder_name} to {robot}!\n\n",))
print_proc.start()
print_proc.join()
push_cmd = cmd.format(folder=folder_name, ip=robot)
process = multiprocessing.Process(target=push_subroutine, args=(push_cmd,))
process.start()
process.join()
print_proc = multiprocessing.Process(target=print, args=(f"Done!\n\n",))
print_proc.start()
print_proc.join()
return(0)


if __name__ == '__main__':
for i, folder in enumerate(folders):
print(f"{i}) {folder}")
folder_to_push = input('Please Select a Folder to Push: ')
robot_to_push = input("Type in robots ip (type all for all): ")
print(main(folder_to_push, robot_to_push))

0 comments on commit 26b979b

Please sign in to comment.