Skip to main content

IoT Edge Validator Library for Python

Project description

iot-edge-validator

python version pre-commit Keep a Changelog CI_CD GitHub_Actions package PyPI azure-iot-device

This package is a wrapper around the azure-iot-device SDK to provide standardized exception handling and direct method request validation.

Source code | Package PyPI

Table of Contents

Versioning

This repository adheres to Semantic Versioning. It will be maintained through the CHANGELOG.md and in GitHub Releases. It's important to note that you must maintain the version with your releases in iot/edge/validator/_version.py, otherwise a new package version will fail to get published.

Getting Started

This section provides basic examples with the iot-edge-validator.

Prerequisites

  • Python 3.7 or later is required to use this package.

  • You must have an Azure subscription and Azure IoT Edge Device to use this package.

Basic Examples

  1. Install via pip:

    pip install iot-edge-validator
    
  2. Import and say hello:

    from iot.edge.validator import __version__
    
    
    print(f"hello world from iot-edge-validator version: {__version__}")
    
  3. Basic usage:

    from typing import Any, Dict, Union
    
    from azure.iot.device.iothub.models.methods import MethodRequest, MethodResponse
    
    from iot.edge.validator import (
       format_exception_error,
       generate_error_response,
       compare_dictionary,
     )
    
    EXPECTED_METHOD_NAME: str = "some_method_name"
    
    EXPECTED_METHOD_PAYLOAD: Dict[str, Any] = {
        "some": {},
        "expected": {},
        "payload": {},
    }
    
    
    def validate_method_requests(method_request: MethodRequest) -> Union[MethodResponse, None]:
        """validation handler for some_method_name listener"""
        if method_request.name == EXPECTED_METHOD_NAME:
            pass
        else:
            return generate_error_response(method_request,
                f"received unknown method request for {method_request.name}",
                400,
            )
    
    
    def validate_some_method_name_request(method_request: MethodRequest) -> Union[MethodResponse, None]:
        """validation for expected payload of some_method_name direct method request"""
        # top level basic format validation
        error_msg = compare_dictionary(
            d1=method_request.payload,
            d2=EXPECTED_METHOD_PAYLOAD,
            value_match=False,
            recurse=False,
        )
        if error_msg:
            return generate_error_response(
                method_request, f"error parsing payload: {error_msg}", 400
            )
        return None
    

Compare Dictionary Method

Compare two dictionaries for keys, optionally compare recursively and optionally compare for exact values to match.

compare_dictionary(d1, d2, value_match=False, recurse=True)

Parameters

  • d1 Dict[str, Any]

    Dictionary to compare.

  • d2 Dict[str, Any]

    Dictionary to compare.

  • value_match Optional[bool]

    Compare for exact values to match. Default is False.

  • recurse Optional[bool]

    Recurse through sub dictionaries of the given dictionary. Default is True.

Returns

Returns a string - either empty or containing an error message.

Format Exception Error Method

Format exceptions using traceback.

format_exception_error(context, exception)

Parameters

  • context str

    The context of where your program was when the execption occurred.

  • exception Exception

    The caught exception.

Returns

Returns a string containing the formatted exception error and tracing.

Generate Error Response Method

Given a method request, generate an error response.

generate_error_response(request, message, status=500)

Parameters

  • request azure.iot.device.iothub.models.method.MethodRequest

    The method request to use when generating the error response.

  • message str

    The custom error message.

  • status Optional[int]

    Error status code. Default is 500.

Returns

Returns a MethodResponse of type azure.iot.device.iothub.models.methods.MethodResponse.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iot-edge-validator-1.0.1.tar.gz (5.3 kB view hashes)

Uploaded Source

Built Distribution

iot_edge_validator-1.0.1-py3-none-any.whl (5.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page