Example #1
0
def _get_initial_twin(initial_twin_tags=None, initial_twin_properties=None):
    if initial_twin_tags == "":
        initial_twin_tags = None
    elif initial_twin_tags:
        initial_twin_tags = shell_safe_json_parse(str(initial_twin_tags))

    if initial_twin_properties == "":
        initial_twin_properties = None
    elif initial_twin_properties:
        initial_twin_properties = shell_safe_json_parse(str(initial_twin_properties))

    return InitialTwin(TwinCollection(initial_twin_tags),
                       InitialTwinProperties(TwinCollection(initial_twin_properties)))
def _get_initial_twin(initial_twin_tags=None, initial_twin_properties=None):
    from azext_iot.common.utility import dict_clean
    if initial_twin_tags == "":
        initial_twin_tags = None
    elif initial_twin_tags:
        initial_twin_tags = dict_clean(
            shell_safe_json_parse(str(initial_twin_tags)))

    if initial_twin_properties == "":
        initial_twin_properties = None
    elif initial_twin_properties:
        initial_twin_properties = dict_clean(
            shell_safe_json_parse(str(initial_twin_properties)))
    return InitialTwin(
        TwinCollection(initial_twin_tags),
        InitialTwinProperties(TwinCollection(initial_twin_properties)))
Example #3
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 []
Example #4
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))
Example #5
0
def _device_interface_elements(cmd, device_id, interface, target_type,
                               hub_name, resource_group_name, login):
    discovery = IotHubDiscovery(cmd)
    target = discovery.get_target(hub_name=hub_name,
                                  resource_group_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:
        # returning an empty collection to continue
        return []
Example #6
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))
Example #7
0
def _validate_model_definition(model_def):
    if exists(model_def):
        model_def = str(read_file_content(model_def))
    else:
        logger.info('Definition not from file path or incorrect path given.')

    try:
        return shell_safe_json_parse(model_def)
    except ValueError as e:
        logger.debug('Received definition: %s', model_def)
        if looks_like_file(model_def):
            raise CLIError(
                'The definition content looks like its from a file. Please ensure the path is correct.'
            )
        raise CLIError(
            'Malformed capability model definition. '
            'Use --debug to see what was received. Error details: {}'.format(
                e))