Explorar o código

metadata_manager: add and use vehicle_id

Shiv Tyagi hai 3 meses
pai
achega
54ed731fe4

+ 3 - 3
metadata_manager/ap_src_meta_fetcher.py

@@ -396,7 +396,7 @@ class APSourceMetadataFetcher:
         return boards
 
     def get_boards(self, remote: str, commit_ref: str,
-                   vehicle: str) -> list:
+                   vehicle_id: str) -> list:
         """
         Returns a list of boards available for building at a
         specified commit for given vehicle.
@@ -404,7 +404,7 @@ class APSourceMetadataFetcher:
         Parameters:
             remote (str): The name of the remote repository.
             commit_ref (str): The commit reference to check out.
-            vehicle (str): The vehicle to get the boards list for.
+            vehicle_id (str): The vehicle ID to get the boards list for.
 
         Returns:
             list: A list of boards.
@@ -414,7 +414,7 @@ class APSourceMetadataFetcher:
             commit_ref=commit_ref,
         )
 
-        if vehicle == 'AP_Periph':
+        if vehicle_id == 'ap-periph':
             return periph_boards
 
         return non_periph_boards

+ 68 - 17
metadata_manager/vehicles_manager.py

@@ -1,30 +1,84 @@
 class Vehicle:
     def __init__(self,
+                 id: str,
                  name: str,
+                 ap_source_subdir: str,
+                 fw_server_vehicle_sdir: str,
                  waf_build_command: str,
                  ) -> None:
+        self.id = id
         self.name = name
+        self.ap_source_subdir = ap_source_subdir
+        self.fw_server_vehicle_sdir = fw_server_vehicle_sdir
         self.waf_build_command = waf_build_command
 
     def __eq__(self, other):
         if isinstance(other, Vehicle):
-            return self.name == other.name
+            return self.id == other.id
         return False
 
     def __hash__(self):
-        return hash(self.name)
+        return hash(self.id)
 
 
 # Default vehicles configuration
 DEFAULT_VEHICLES = [
-    Vehicle(name="Copter", waf_build_command="copter"),
-    Vehicle(name="Plane", waf_build_command="plane"),
-    Vehicle(name="Rover", waf_build_command="rover"),
-    Vehicle(name="Sub", waf_build_command="sub"),
-    Vehicle(name="Heli", waf_build_command="heli"),
-    Vehicle(name="Blimp", waf_build_command="blimp"),
-    Vehicle(name="Tracker", waf_build_command="antennatracker"),
-    Vehicle(name="AP_Periph", waf_build_command="AP_Periph"),
+    Vehicle(
+        id="copter",
+        name="Copter",
+        ap_source_subdir="ArduCopter",
+        fw_server_vehicle_sdir="Copter",
+        waf_build_command="copter"
+    ),
+    Vehicle(
+        id="plane",
+        name="Plane",
+        ap_source_subdir="ArduPlane",
+        fw_server_vehicle_sdir="Plane",
+        waf_build_command="plane"
+    ),
+    Vehicle(
+        id="rover",
+        name="Rover",
+        ap_source_subdir="Rover",
+        fw_server_vehicle_sdir="Rover",
+        waf_build_command="rover"
+    ),
+    Vehicle(
+        id="sub",
+        name="Sub",
+        ap_source_subdir="ArduSub",
+        fw_server_vehicle_sdir="Sub",
+        waf_build_command="sub"
+    ),
+    Vehicle(
+        id="heli",
+        name="Heli",
+        ap_source_subdir="ArduCopter",
+        fw_server_vehicle_sdir="Copter",
+        waf_build_command="heli"
+    ),
+    Vehicle(
+        id="blimp",
+        name="Blimp",
+        ap_source_subdir="Blimp",
+        fw_server_vehicle_sdir="Blimp",
+        waf_build_command="blimp"
+    ),
+    Vehicle(
+        id="tracker",
+        name="Tracker",
+        ap_source_subdir="AntennaTracker",
+        fw_server_vehicle_sdir="AntennaTracker",
+        waf_build_command="antennatracker"
+    ),
+    Vehicle(
+        id="ap-periph",
+        name="AP_Periph",
+        ap_source_subdir="Tools/AP_Periph",
+        fw_server_vehicle_sdir="AP_Periph",
+        waf_build_command="AP_Periph"
+    ),
 ]
 
 
@@ -47,23 +101,20 @@ class VehiclesManager:
 
         VehiclesManager.__singleton = self
 
-    def get_all_vehicle_names_sorted(self) -> list:
-        return sorted([v.name for v in self.vehicles])
-
     def get_all_vehicles(self) -> frozenset:
         return frozenset(self.vehicles)
 
     def add_vehicle(self, vehicle: Vehicle) -> None:
         return self.vehicles.add(vehicle)
 
-    def get_vehicle_from_name(self, vehicle_name: str) -> Vehicle:
-        if vehicle_name is None:
-            raise ValueError("vehicle_name is a required parameter.")
+    def get_vehicle_by_id(self, vehicle_id: str) -> Vehicle:
+        if vehicle_id is None:
+            raise ValueError("vehicle_id is a required parameter.")
 
         return next(
             (
                 vehicle for vehicle in self.get_all_vehicles()
-                if vehicle.name == vehicle_name
+                if vehicle.id == vehicle_id
             ),
             None
         )

+ 17 - 15
metadata_manager/versions_fetcher.py

@@ -129,25 +129,27 @@ class VersionsFetcher:
             None
         )
 
-    def get_versions_for_vehicle(self, vehicle_name: str) -> list[VersionInfo]:
+    def get_versions_for_vehicle(self, vehicle_id: str) -> list[VersionInfo]:
         """
         Return the list of dictionaries containing the info about the
         versions listed to be built for a particular vehicle.
 
         Parameters:
-            vehicle_name (str): the vehicle to fetch versions list for
+            vehicle_id (str): the vehicle ID to fetch versions list for
 
         Returns:
             list: VersionInfo objects for all versions allowed to be
                   built for the said vehicle.
 
         """
-        if vehicle_name is None:
-            raise ValueError("Vehicle is a required parameter.")
+        if vehicle_id is None:
+            raise ValueError("Vehicle ID is a required parameter.")
 
-        all_vehicles = vehm.get_singleton().get_all_vehicle_names_sorted()
-        if vehicle_name not in all_vehicles:
-            raise ValueError(f"Invalid vehicle name '{vehicle_name}'.")
+        vehicle = vehm.get_singleton().get_vehicle_by_id(vehicle_id)
+        if vehicle is None:
+            raise ValueError(f"Invalid vehicle ID '{vehicle_id}'.")
+
+        vehicle_name = vehicle.name
 
         versions_list = []
         for remote in self.__get_versions_metadata():
@@ -168,13 +170,13 @@ class VersionsFetcher:
                     ))
         return versions_list
 
-    def is_version_listed(self, vehicle_name: str, remote: str,
+    def is_version_listed(self, vehicle_id: str, remote: str,
                           commit_ref: str) -> bool:
         """
         Check if a version with given properties mentioned in remotes.json
 
         Parameters:
-            vehicle_name (str): Name of the vehicle for which version is listed
+            vehicle_id (str): ID of the vehicle for which version is listed
             remote (str): remote under which the version is listed
             commit_ref(str): commit reference for the version
 
@@ -183,8 +185,8 @@ class VersionsFetcher:
                   False otherwise
 
         """
-        if vehicle_name is None:
-            raise ValueError("vehicle_name is a required parameter.")
+        if vehicle_id is None:
+            raise ValueError("vehicle_id is a required parameter.")
 
         if remote is None:
             raise ValueError("Remote is a required parameter.")
@@ -195,16 +197,16 @@ class VersionsFetcher:
         return (remote, commit_ref) in [
             (version_info.remote, version_info.commit_ref)
             for version_info in
-            self.get_versions_for_vehicle(vehicle_name=vehicle_name)
+            self.get_versions_for_vehicle(vehicle_id=vehicle_id)
         ]
 
-    def get_version_info(self, vehicle_name: str, remote: str,
+    def get_version_info(self, vehicle_id: str, remote: str,
                          commit_ref: str) -> VersionInfo:
         """
         Find first version matching the given properties in remotes.json
 
         Parameters:
-            vehicle_name (str): Name of the vehicle for which version is listed
+            vehicle_id (str): ID of the vehicle for which version is listed
             remote (str): remote under which the version is listed
             commit_ref(str): commit reference for the version
 
@@ -217,7 +219,7 @@ class VersionsFetcher:
             (
                 version
                 for version in self.get_versions_for_vehicle(
-                    vehicle_name=vehicle_name
+                    vehicle_id=vehicle_id
                 )
                 if version.remote == remote and
                 version.commit_ref == commit_ref