docs: def build_component_order(self):
          """
          Build the order of component based on their priority and predecessors
  
          :rtype: list of Component
          """
          present_components = [item for item in self.__dict__.values() if isinstance(item, Component) and item.enabled]
          result = [None] * len(present_components)
          used_prios = set()
          for component in present_components:
              index = component.priority % len(present_components)
              if index in used_prios:
                  raise ValueError("Duplicate priority: {}".format(component.priority))
              used_prios.add(index)
  
              result[index] = component
  
          # Check if predecessors are valid
          for i, component in enumerate(result):
              if any(i < result.index(pre) for pre in component.predecessors):
                  raise ValueError("Component {} comes before at least one of its predecessors".format(component))
  
          return result