vehicles_manager.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. class Vehicle:
  2. def __init__(self,
  3. name: str,
  4. waf_build_command: str,
  5. ) -> None:
  6. self.name = name
  7. self.waf_build_command = waf_build_command
  8. def __eq__(self, other):
  9. if isinstance(other, Vehicle):
  10. return self.name == other.name
  11. return False
  12. def __hash__(self):
  13. return hash(self.name)
  14. class VehiclesManager:
  15. __singleton = None
  16. def __init__(self) -> None:
  17. # Enforce singleton pattern by raising an error if
  18. # an instance already exists.
  19. if VehiclesManager.__singleton:
  20. raise RuntimeError("VehiclesManager must be a singleton.")
  21. self.vehicles = set()
  22. VehiclesManager.__singleton = self
  23. def get_all_vehicle_names_sorted(self) -> list:
  24. return sorted([v.name for v in self.vehicles])
  25. def get_all_vehicles(self) -> frozenset:
  26. return frozenset(self.vehicles)
  27. def add_vehicle(self, vehicle: Vehicle) -> None:
  28. return self.vehicles.add(vehicle)
  29. def get_vehicle_from_name(self, vehicle_name: str) -> Vehicle:
  30. if vehicle_name is None:
  31. raise ValueError("vehicle_name is a required parameter.")
  32. return next(
  33. (
  34. vehicle for vehicle in self.get_all_vehicles()
  35. if vehicle.name == vehicle_name
  36. ),
  37. None
  38. )
  39. @staticmethod
  40. def get_singleton() -> "VehiclesManager":
  41. return VehiclesManager.__singleton