예제 #1
0
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 []
예제 #2
0
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))
예제 #3
0
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))
예제 #4
0
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))
예제 #5
0
 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)