Commit 588ce474 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

PathComp component - FrontEnd:

- Extended Sub-Service Composition to identify hierarchies of controllers and use the top-level one in the underlying hierarchy
parent d34e517a
Loading
Loading
Loading
Loading
+21 −8
Original line number Diff line number Diff line
@@ -65,12 +65,27 @@ DEVICE_TYPE_TO_DEEPNESS = {
IGNORED_DEVICE_TYPES = {DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER}
REMOTEDOMAIN_DEVICE_TYPES = {DeviceTypeEnum.NETWORK}

def get_device(
    device_dict : Dict[str, Tuple[Dict, Device]], device_uuid : str,
    fail_if_not_found : bool = True
) -> Tuple[Dict, Device]:
    device_tuple = device_dict.get(device_uuid)
    if device_tuple is None and fail_if_not_found:
        MSG = 'Device({:s}) not found'
        raise Exception(MSG.format(str(device_uuid)))
    return device_tuple

def get_device_controller_uuid(
    device : Device
    device : Device, device_dict : Dict[str, Tuple[Dict, Device]],
    retrieve_top_level_controller : bool = True
) -> Optional[str]:
    while True:
        controller_uuid = device.controller_id.device_uuid.uuid
    if len(controller_uuid) > 0: return controller_uuid
    return None
        if retrieve_top_level_controller: return controller_uuid
        if len(controller_uuid) == 0: return None
        controller_tuple = get_device(device_dict, controller_uuid, fail_if_not_found=False)
        if controller_tuple is None: return controller_uuid
        _, device = controller_tuple

def _map_device_type(device : Device) -> DeviceTypeEnum:
    device_type = DeviceTypeEnum._value2member_map_.get(device.device_type) # pylint: disable=no-member
@@ -88,15 +103,13 @@ def get_device_type(
    device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_controller_uuid : Optional[str]
) -> DeviceTypeEnum:
    if device_controller_uuid is None: return _map_device_type(device)
    device_controller_tuple = device_dict.get(device_controller_uuid)
    if device_controller_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_controller_uuid)))
    _,device = device_controller_tuple
    _,device = get_device(device_dict, device_controller_uuid)
    return _map_device_type(device)

def get_resource_classification(
    device : Device, device_dict : Dict[str, Tuple[Dict, Device]]
) -> Tuple[int, DeviceTypeEnum, Optional[str]]:
    device_controller_uuid = get_device_controller_uuid(device)
    device_controller_uuid = get_device_controller_uuid(device, device_dict)
    device_type = get_device_type(device, device_dict, device_controller_uuid)
    resource_deepness = _map_resource_to_deepness(device_type)
    return resource_deepness, device_type, device_controller_uuid