list_utils.py
1 # Python Imports 2 import logging 3 from itertools import chain 4 from pathlib import Path 5 from typing import List 6 7 from result import Err, Ok, Result 8 9 # Project Imports 10 11 12 def order_by_groups(list_to_order: List) -> List: 13 # TODO: change this to a more generic function 14 def get_default_format_id(val): 15 return int(val.split("-")[1].split("_")[0]) 16 17 nodes = [] 18 bootstrap = [] 19 midstrap = [] 20 others = [] 21 for item in list_to_order: 22 if item.startswith("nodes"): 23 nodes.append(item) 24 elif item.startswith("bootstrap"): 25 bootstrap.append(item) 26 elif item.startswith("midstrap"): 27 midstrap.append(item) 28 else: 29 others.append(item) 30 nodes.sort(key=get_default_format_id) 31 bootstrap.sort(key=get_default_format_id) 32 midstrap.sort(key=get_default_format_id) 33 34 return list(chain(others, bootstrap, midstrap, nodes)) 35 36 37 def dump_list_to_file(list_to_dump: List, file_path: Path) -> Result[Path, OSError]: 38 try: 39 with open(file_path, "w") as f: 40 for item in list_to_dump: 41 f.write(item + "\n") 42 f.flush() 43 return Ok(file_path) 44 except OSError as e: 45 logging.error(f"Failed to dump list to {file_path}: {e}") 46 return Err(e)