def test_interating_over_hardware_resources(lib_mock): side_effect_functions = ( func for func in [ NextResourceSideEffect(10), NextResourceSideEffect(11), NextResourceSideEffect(12), lambda *x: nisyscfg.errors.Status.END_OF_ENUM, ] ) def next_resource_side_effect(session_handle, resource_enum_handle, resource_handle): return next(side_effect_functions)(session_handle, resource_enum_handle, resource_handle) lib_mock.return_value.NISysCfgNextResource.side_effect = next_resource_side_effect with nisyscfg.Session() as session: resources = list(session.find_hardware()) assert len(resources) == 3 expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgFindHardware(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgNextResource(CVoidPMatcher(SESSION_HANDLE), CVoidPMatcher(RESOURCE_ENUM_HANDLE), mock.ANY), mock.call().NISysCfgNextResource(CVoidPMatcher(SESSION_HANDLE), CVoidPMatcher(RESOURCE_ENUM_HANDLE), mock.ANY), mock.call().NISysCfgNextResource(CVoidPMatcher(SESSION_HANDLE), CVoidPMatcher(RESOURCE_ENUM_HANDLE), mock.ANY), mock.call().NISysCfgNextResource(CVoidPMatcher(SESSION_HANDLE), CVoidPMatcher(RESOURCE_ENUM_HANDLE), mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(12)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(11)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(10)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test_get_system_experts_with_two_experts(lib_mock): side_effect_functions = ( func for func in [ ExpertInfoSideEffect(b'sync', b'NI-Sync', b'1.2.0'), ExpertInfoSideEffect(b'xnet', b'NI-XNET', b'10.0'), lambda *x: nisyscfg.errors.Status.END_OF_ENUM, ] ) def expert_info_side_effect(handle, expert_name, display_name, version): return next(side_effect_functions)(handle, expert_name, display_name, version) lib_mock.return_value.NISysCfgNextExpertInfo.side_effect = expert_info_side_effect with nisyscfg.Session() as session: expert_info = list(session.get_system_experts()) expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgGetSystemExperts(CVoidPMatcher(SESSION_HANDLE), b'', mock.ANY), mock.call().NISysCfgNextExpertInfo(CVoidPMatcher(EXPERT_ENUM_HANDLE), mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgNextExpertInfo(CVoidPMatcher(EXPERT_ENUM_HANDLE), mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgNextExpertInfo(CVoidPMatcher(EXPERT_ENUM_HANDLE), mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(EXPERT_ENUM_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls assert len(expert_info) == 2 assert expert_info[0]['expert_name'] == 'sync' assert expert_info[0]['display_name'] == 'NI-Sync' assert expert_info[0]['version'] == '1.2.0' assert expert_info[1]['expert_name'] == 'xnet' assert expert_info[1]['display_name'] == 'NI-XNET' assert expert_info[1]['version'] == '10.0'
def test_get_system_experts_with_list_of_expert_names(lib_mock): with nisyscfg.Session() as session: session.get_system_experts(['xnet', 'sync']) expected_calls = [ mock.call().NISysCfgGetSystemExperts(CVoidPMatcher(SESSION_HANDLE), b'xnet,sync', mock.ANY), ] assert lib_mock().NISysCfgGetSystemExperts.mock_calls == expected_calls
def test_get_hardware_resource_property_raises_library_error_when_error_code_is_not_prop_does_not_exist(lib_mock, config_next_resource_side_effect_mock): lib_mock.return_value.NISysCfgGetResourceProperty.return_value = nisyscfg.errors.Status.OUT_OF_MEMORY with nisyscfg.Session() as session: resource = next(session.find_hardware()) with pytest.raises(nisyscfg.errors.LibraryError): resource[nisyscfg.ResourceProperties.IS_DEVICE]
def test_get_hardware_resource_property_catches_prop_does_not_exist_and_raises_attribute_error(lib_mock, config_next_resource_side_effect_mock): lib_mock.return_value.NISysCfgGetResourceProperty.return_value = nisyscfg.errors.Status.PROP_DOES_NOT_EXIST with nisyscfg.Session() as session: resource = next(session.find_hardware()) with pytest.raises(AttributeError): getattr(resource, 'IsDevice')
def test_session_passes_username_and_password_to_initialize_session(lib_mock): with nisyscfg.Session('localhost', 'username', 'password'): pass expected_calls = [ mock.call().NISysCfgInitializeSession(mock.ANY, b'username', b'password', mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), ] assert lib_mock().NISysCfgInitializeSession.mock_calls == expected_calls
def test_session_passes_target_name_to_initialize_session(lib_mock): with nisyscfg.Session('localhost'): pass expected_calls = [ mock.call().NISysCfgInitializeSession(b'localhost', mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), ] assert lib_mock().NISysCfgInitializeSession.mock_calls == expected_calls
def test_find_hardware_with_list_of_expert_names(lib_mock): with nisyscfg.Session() as session: session.find_hardware(expert_names=['xnet', 'sync']) expected_calls = [ mock.call().NISysCfgFindHardware(mock.ANY, mock.ANY, mock.ANY, b'xnet,sync', mock.ANY), ] assert lib_mock().NISysCfgFindHardware.mock_calls == expected_calls
def assign_xnet_port_name(serial_number, port_number, port_name): with nisyscfg.Session() as session: try: device_filter = session.create_filter() device_filter.is_device = True device_filter.serial_number = serial_number resource = next( session.find_hardware(filter=device_filter, expert_names=_XNET_EXPERT_NAME)) interface_filter = session.create_filter() interface_filter.is_device = False interface_filter.connects_to_link_name = resource.provides_link_name for interface_resource in session.find_hardware( filter=interface_filter, expert_names=_XNET_EXPERT_NAME): if interface_resource.xnet.port_number == port_number: interface_resource.rename(port_name) return raise PortNotFoundError( port_number, 'Device with serial number "{}" does not have port number {}'. format(serial_number, port_number)) except StopIteration: raise PortNotFoundError( port_number, 'Could not find a device with serial number "{}"'.format( serial_number))
def test_open_close_session_invokes_nisyscfg_c_api(lib_mock): session = nisyscfg.Session() session.close() expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test_session_in_with_statement_invokes_nisyscfg_c_api(lib_mock): with nisyscfg.Session(): pass expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test_restart_with_default_arguments(lib_mock): with nisyscfg.Session() as session: session.restart() expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgRestart(CVoidPMatcher(SESSION_HANDLE), True, False, False, mock.ANY, mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test_get_system_experts_with_no_experts(lib_mock): with nisyscfg.Session() as session: session.get_system_experts() expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgGetSystemExperts(CVoidPMatcher(SESSION_HANDLE), b'', mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(EXPERT_ENUM_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test_create_filter(lib_mock): with nisyscfg.Session() as session: session.create_filter() expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgCreateFilter(CVoidPMatcher(SESSION_HANDLE), mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(FILTER_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test__get_status_description(lib_mock): with nisyscfg.Session() as session: assert 'description' == session._get_status_description(nisyscfg.errors.Status.OUT_OF_MEMORY) expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgGetStatusDescription(CVoidPMatcher(SESSION_HANDLE), nisyscfg.errors.Status.OUT_OF_MEMORY, mock.ANY), mock.call().NISysCfgFreeDetailedString(CVoidPMatcher(STATUS_DESCRIPTION_VOID_P.value)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test_find_hardware_with_default_arguments(lib_mock): with nisyscfg.Session() as session: session.find_hardware() expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgFindHardware(CVoidPMatcher(SESSION_HANDLE), nisyscfg.enums.FilterMode.MATCH_VALUES_ALL, None, b'', mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test_get_installed_software_components_with_default_arguments(lib_mock): with nisyscfg.Session() as session: session.get_installed_software_components() expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgGetInstalledSoftwareComponents(CVoidPMatcher(SESSION_HANDLE), mock.ANY, False, mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SOFTWARE_COMPONENT_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def rename_xnet_port_name(current_port_name, new_port_name): with nisyscfg.Session() as session: try: filter = session.create_filter() filter.is_device = False filter.user_alias = current_port_name resource = next( session.find_hardware(filter=filter, expert_names=_XNET_EXPERT_NAME)) resource.rename(new_port_name) except StopIteration: raise PortNotFoundError(current_port_name)
def get_xnet_expert_version(): if platform.system() == 'Linux': # nisyscfg does not support NISysCfgGetInstalledSoftwareComponents on Linux desktop systems, directly get ni-xnet version from nixntcfg.ini parser = configparser.ConfigParser() parser.read('/usr/share/ni-xnet/nixntcfg.ini') print("ni-xnet", parser.get('Version', 'VersionString')) else: with nisyscfg.Session() as session: sw = session.get_installed_software_components() for component in sw: if component.id == 'ni-xnet': print(component.id, component.version)
def test_create_filter_and_set_syscfg_filter_property(lib_mock): with nisyscfg.Session() as session: filter = session.create_filter() filter[nisyscfg.FilterProperties.EXPERT_NAME] = 'my_expert' expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgCreateFilter(CVoidPMatcher(SESSION_HANDLE), mock.ANY), mock.call().NISysCfgSetFilterPropertyWithType(CVoidPMatcher(FILTER_HANDLE), nisyscfg.FilterProperties.EXPERT_NAME._id, nisyscfg.enums.PropertyType.STRING, b'my_expert'), mock.call().NISysCfgCloseHandle(CVoidPMatcher(FILTER_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test_get_hardware_index_property(lib_mock, property_name, count_property, expected_values): side_effect_functions = ( func for func in [ NextResourceSideEffect(10), lambda *x: nisyscfg.errors.Status.END_OF_ENUM, ] ) def next_resource_side_effect(session_handle, resource_enum_handle, resource_handle): return next(side_effect_functions)(session_handle, resource_enum_handle, resource_handle) def get_resource_property_mock(resource_handle, property_id, property_value): property_value.contents.value = len(expected_values) return nisyscfg.errors.Status.OK def get_indexed_property_mock(resource_handle, property_id, index, property_value): if property_value.__class__.__name__.startswith('c_char_Array'): property_value.value = expected_values[index].encode('ascii') else: property_value.contents.value = expected_values[index] return nisyscfg.errors.Status.OK lib_mock.return_value.NISysCfgNextResource.side_effect = next_resource_side_effect lib_mock.return_value.NISysCfgGetResourceProperty.side_effect = get_resource_property_mock lib_mock.return_value.NISysCfgGetResourceIndexedProperty.side_effect = get_indexed_property_mock with nisyscfg.Session() as session: resource = next(session.find_hardware()) property = resource[getattr(nisyscfg.IndexedResourceProperties, property_name)] assert expected_values == list(property) count_property_id = getattr(nisyscfg.ResourceProperties, count_property)._id property_id = getattr(nisyscfg.IndexedResourceProperties, property_name)._id expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgFindHardware(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgNextResource(mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgGetResourceProperty(CVoidPMatcher(10), count_property_id, mock.ANY), ] expected_calls += [ mock.call().NISysCfgGetResourceIndexedProperty(CVoidPMatcher(10), property_id, i, mock.ANY) for i in range(len(expected_values)) ] expected_calls += [ mock.call().NISysCfgCloseHandle(CVoidPMatcher(10)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def upgrade_xnet_firmware(serial_number): with nisyscfg.Session() as session: try: filter = session.create_filter() filter.is_device = True filter.serial_number = serial_number resource = next( session.find_hardware(filter=filter, expert_names=_XNET_EXPERT_NAME)) logger.info('Starting firmware upgrade') resource.upgrade_firmware(version="0") logger.info('Completed firmware upgrade') except StopIteration: raise DeviceWithSerialNumberNotFoundError(serial_number)
def blink_xnet_port(port_name, mode): with nisyscfg.Session() as session: try: filter = session.create_filter() filter.is_device = False filter.user_alias = port_name resource = next( session.find_hardware(filter=filter, expert_names=_XNET_EXPERT_NAME)) resource.xnet.blink = {'on': 1, 'off': 0}[mode] resource.save_changes() logger.info(port_name + ': blink-LED is ' + mode) except StopIteration: raise PortNotFoundError(port_name)
def self_test_xnet_device(serial_number): with nisyscfg.Session() as session: try: filter = session.create_filter() filter.is_device = True filter.serial_number = serial_number resource = next( session.find_hardware(filter=filter, expert_names=_XNET_EXPERT_NAME)) logger.info('Starting self test') # TODO xnet sysapi expert will report its error code when a function failed, include self_test, # but we may need to catch LibraryError for error code that is not defined in class Status(CtypesEnum) resource.self_test() logger.info('Completed self test') except StopIteration: raise DeviceWithSerialNumberNotFoundError(serial_number)
def test_find_hardware_with_filter_properties_specified(lib_mock): with nisyscfg.Session() as session: filter = session.create_filter() filter[nisyscfg.FilterProperties.EXPERT_NAME] = 'my_expert' session.find_hardware(filter) expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgCreateFilter(CVoidPMatcher(SESSION_HANDLE), mock.ANY), mock.call().NISysCfgSetFilterPropertyWithType(CVoidPMatcher(FILTER_HANDLE), nisyscfg.FilterProperties.EXPERT_NAME._id, nisyscfg.enums.PropertyType.STRING, b'my_expert'), mock.call().NISysCfgFindHardware(CVoidPMatcher(SESSION_HANDLE), nisyscfg.enums.FilterMode.MATCH_VALUES_ALL, mock.ANY, b'', mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(FILTER_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test_get_hardware_resource_property(lib_mock, config_next_resource_side_effect_mock, config_get_resource_property_mock, property_name, expected_value): with nisyscfg.Session() as session: resource = next(session.find_hardware()) assert expected_value == resource[getattr(nisyscfg.ResourceProperties, property_name)] property_id = getattr(nisyscfg.ResourceProperties, property_name)._id expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgFindHardware(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgNextResource(mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgGetResourceProperty(CVoidPMatcher(10), property_id, mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(10)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def test_find_hardware_with_passed_filter_properties_specified(lib_mock, property_name, property_type, assigned_value, expected_value): with nisyscfg.Session() as session: filter = session.create_filter() filter[getattr(nisyscfg.FilterProperties, property_name)] = assigned_value session.find_hardware(filter) property_id = getattr(nisyscfg.FilterProperties, property_name)._id expected_calls = [ mock.call(mock.ANY), mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY), mock.call().NISysCfgCreateFilter(CVoidPMatcher(SESSION_HANDLE), mock.ANY), mock.call().NISysCfgSetFilterPropertyWithType(CVoidPMatcher(FILTER_HANDLE), property_id, property_type, expected_value), mock.call().NISysCfgFindHardware(CVoidPMatcher(SESSION_HANDLE), nisyscfg.enums.FilterMode.MATCH_VALUES_ALL, mock.ANY, b'', mock.ANY), mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(FILTER_HANDLE)), mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)), ] assert lib_mock.mock_calls == expected_calls
def nixnet_blink_port_led(port_name, mode): with nisyscfg.Session() as session: # Search for the NI-XNET interface with port name. interface_filter = session.create_filter() interface_filter[nisyscfg.FilterProperties.IS_DEVICE] = False interface_filter[nisyscfg.FilterProperties.USER_ALIAS] = port_name try: # Assume only one interface will be found interface = next( session.find_hardware(filter=interface_filter, expert_names='xnet')) except StopIteration: raise PortNotFoundError( 'Could not find a port "{}"'.format(port_name)) # Set blink property and apply changes. interface[nisyscfg.xnet.ResourceProperties.BLINK] = mode interface.save_changes()
def nixnet_upgrade_firmware(serial_number): with nisyscfg.Session() as session: # Search for the NI-XNET device with the specified serial number. device_filter = session.create_filter() device_filter[nisyscfg.FilterProperties.IS_DEVICE] = True device_filter[nisyscfg.FilterProperties.SERIAL_NUMBER] = serial_number try: # Assume only one device will be found device = next( session.find_hardware(filter=device_filter, expert_names='xnet')) except StopIteration: raise DeviceNotFoundError( 'Could not find a device with serial number "{}"'.format( serial_number)) print('Starting firmware upgrade') device.upgrade_firmware(version='0') print('Completed firmware upgrade')
def nixnet_assign_port_name(serial_number, port_number, port_name): with nisyscfg.Session() as session: # Search for the NI-XNET device with the specified serial number. device_filter = session.create_filter() device_filter[nisyscfg.FilterProperties.IS_DEVICE] = True device_filter[nisyscfg.FilterProperties.SERIAL_NUMBER] = serial_number try: # Assume only one device will be found device = next( session.find_hardware(filter=device_filter, expert_names='xnet')) except StopIteration: raise DeviceNotFoundError( 'Could not find a device with serial number "{}"'.format( serial_number)) # Search for the interface connected to the NI-XNET device with the # specified port number. interface_filter = session.create_filter() interface_filter[nisyscfg.FilterProperties.IS_DEVICE] = False interface_filter[nisyscfg.FilterProperties.CONNECTS_TO_LINK_NAME] = ( device[nisyscfg.ResourceProperties.PROVIDES_LINK_NAME]) interface_filter[ nisyscfg.xnet.FilterProperties.PORT_NUMBER] = port_number try: # Assume only one interface will be found interface = next( session.find_hardware(filter=interface_filter, expert_names='xnet')) except StopIteration: raise PortNotFoundError( 'Device with serial number "{}" does not have port number {}'. format(serial_number, port_number)) interface.rename(port_name)