def _device_interface_elements(cmd, device_id, interface, target_type, hub_name, resource_group_name, login): target = get_iot_hub_connection_string(cmd, hub_name, resource_group_name, login=login) service_sdk, errors = _bind_sdk(target, SdkType.service_sdk) interface_elements = [] try: payload = {'id': {}} payload['id'] = interface target_payload = shell_safe_json_parse(str(payload)) interface_def = service_sdk.invoke_interface_command( device_id, INTERFACE_MODELDEFINITION, INTERFACE_COMMANDNAME, target_payload) if interface_def and interface_def.get('contents'): interface_contents = interface_def.get('contents') for content in interface_contents: if isinstance(content.get('@type'), list) and target_type in content.get('@type'): interface_elements.append(content) elif content.get('@type') == target_type: interface_elements.append(content) return interface_elements except errors.CloudError as e: raise CLIError(unpack_msrest_error(e)) except Exception: # pylint: disable=broad-except # returning an empty collection to continue return []
def iot_digitaltwin_property_update(cmd, interface_payload, device_id, hub_name=None, resource_group_name=None, login=None): if exists(interface_payload): interface_payload = str(read_file_content(interface_payload)) target_json = None try: target_json = shell_safe_json_parse(interface_payload) except ValueError: pass if target_json: interface_payload = target_json target = get_iot_hub_connection_string(cmd, hub_name, resource_group_name, login=login) service_sdk, errors = _bind_sdk(target, SdkType.service_sdk) try: result = service_sdk.update_interfaces(device_id, interfaces=interface_payload) return result except errors.CloudError as e: raise CLIError(unpack_msrest_error(e))
def iot_digitaltwin_invoke_command(cmd, interface, device_id, command_name, command_payload=None, timeout=10, hub_name=None, resource_group_name=None, login=None): device_interfaces = _iot_digitaltwin_interface_list(cmd, device_id, hub_name, resource_group_name, login) interface_list = _get_device_default_interface_dict(device_interfaces) target_interface = next((item for item in interface_list if item['name'] == interface), None) if not target_interface: raise CLIError('Target interface is not implemented by the device!') if command_payload: if exists(command_payload): command_payload = str(read_file_content(command_payload)) target_json = None try: target_json = shell_safe_json_parse(command_payload) except ValueError: pass if target_json or isinstance(target_json, bool): command_payload = target_json target = get_iot_hub_connection_string(cmd, hub_name, resource_group_name, login=login) service_sdk, errors = _bind_sdk(target, SdkType.service_sdk) try: result = service_sdk.invoke_interface_command(device_id, interface, command_name, command_payload, connect_timeout_in_seconds=timeout, response_timeout_in_seconds=timeout) return result except errors.CloudError as e: raise CLIError(unpack_msrest_error(e))
def _iot_digitaltwin_interface_list(cmd, device_id, hub_name=None, resource_group_name=None, login=None): target = get_iot_hub_connection_string(cmd, hub_name, resource_group_name, login=login) service_sdk, errors = _bind_sdk(target, SdkType.service_sdk) try: device_interfaces = service_sdk.get_interfaces(device_id) return device_interfaces except errors.CloudError as e: raise CLIError(unpack_msrest_error(e))
def __init__(self, cmd, hub_name, rg, login=None): self.cmd = cmd self.hub_name = hub_name self.rg = rg self.target = get_iot_hub_connection_string( cmd=self.cmd, hub_name=self.hub_name, resource_group_name=self.rg, login=login, ) self.resolver = SdkResolver(self.target)