/ src / analysis / utils / list_utils.py
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)