azext_iot/deviceupdate/commands_device_class.py (111 lines of code) (raw):

# coding=utf-8 # -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- from knack.log import get_logger from azext_iot.common.utility import handle_service_exception from azext_iot.deviceupdate.providers.base import ( DeviceUpdateDataModels, DeviceUpdateDataManager, AzureError, ) from azure.cli.core.azclierror import ArgumentUsageError from typing import Optional logger = get_logger(__name__) def list_device_classes( cmd, name: str, instance_name: str, device_group_id: Optional[str] = None, filter: Optional[str] = None, resource_group_name: Optional[str] = None, ): data_manager = DeviceUpdateDataManager( cmd=cmd, account_name=name, instance_name=instance_name, resource_group=resource_group_name ) if device_group_id: return data_manager.data_client.device_management.list_device_class_subgroups_for_group( group_id=device_group_id, filter=filter ) try: return data_manager.data_client.device_management.list_device_classes(filter=filter) except AzureError as e: handle_service_exception(e) def show_device_class( cmd, name: str, instance_name: str, device_class_id: str, device_group_id: Optional[str] = None, update_compliance: Optional[bool] = None, best_update: Optional[bool] = None, installable_updates: Optional[bool] = None, resource_group_name: Optional[str] = None, ): data_manager = DeviceUpdateDataManager( cmd=cmd, account_name=name, instance_name=instance_name, resource_group=resource_group_name ) if [update_compliance, best_update, installable_updates].count(True) > 1: raise ArgumentUsageError( "Only a single flag among --update-compliance, --best-update and --installable-updates can be used at a time." ) if (update_compliance or best_update) and not device_group_id: raise ArgumentUsageError("--group-id is required when using --update-compliance or --best-update.") try: if installable_updates: return data_manager.data_client.device_management.list_installable_updates_for_device_class( device_class_id=device_class_id ) if device_group_id: if update_compliance: return data_manager.data_client.device_management.get_device_class_subgroup_update_compliance( group_id=device_group_id, device_class_id=device_class_id ) if best_update: return data_manager.data_client.device_management.get_best_updates_for_device_class_subgroup( group_id=device_group_id, device_class_id=device_class_id ) return data_manager.data_client.device_management.get_device_class_subgroup( group_id=device_group_id, device_class_id=device_class_id ) return data_manager.data_client.device_management.get_device_class(device_class_id=device_class_id) except AzureError as e: handle_service_exception(e) def update_device_class( cmd, name: str, instance_name: str, device_class_id: str, friendly_name: Optional[str] = None, resource_group_name: Optional[str] = None, ): data_manager = DeviceUpdateDataManager( cmd=cmd, account_name=name, instance_name=instance_name, resource_group=resource_group_name ) patch_body = None if friendly_name: patch_body = DeviceUpdateDataModels.PatchBody(friendly_name=friendly_name) if patch_body: try: return data_manager.data_client.device_management.update_device_class( device_class_id=device_class_id, device_class_patch=patch_body ) except AzureError as e: handle_service_exception(e) else: logger.warning("No patch body option values provided. Update device class has no work to be done.") def delete_device_class( cmd, name: str, instance_name: str, device_class_id: str, device_group_id: Optional[str] = None, resource_group_name: Optional[str] = None, ): data_manager = DeviceUpdateDataManager( cmd=cmd, account_name=name, instance_name=instance_name, resource_group=resource_group_name ) try: if device_group_id: return data_manager.data_client.device_management.delete_device_class_subgroup( device_class_id=device_class_id, group_id=device_group_id ) # @digimaun, this operation returns a 404 today. return data_manager.data_client.device_management.delete_device_class(device_class_id=device_class_id) except AzureError as e: handle_service_exception(e)