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)))
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 _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 []
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 _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))