azext_iot/central/services/role.py (63 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 typing import List import requests from knack.log import get_logger from azure.cli.core.azclierror import AzureResponseError from azext_iot.constants import CENTRAL_ENDPOINT from azext_iot.central.common import API_VERSION from azext_iot.central.services import _utility from azext_iot.central.models.ga_2022_07_31 import RoleGa from azure.cli.core.util import should_disable_connection_verify logger = get_logger(__name__) BASE_PATH = "api/roles" def get_role( cmd, app_id: str, role_id: str, token: str, api_version=API_VERSION, central_dns_suffix=CENTRAL_ENDPOINT, ) -> RoleGa: """ Get role info given a role id Args: cmd: command passed into az role_id: unique case-sensitive role id, app_id: name of app (used for forming request URL) token: (OPTIONAL) authorization token to fetch role details from IoTC. MUST INCLUDE type (e.g. 'SharedAccessToken ...', 'Bearer ...') central_dns_suffix: {centralDnsSuffixInPath} as found in docs Returns: role: dict """ api_version = API_VERSION url = "https://{}.{}/{}/{}".format(app_id, central_dns_suffix, BASE_PATH, role_id) headers = _utility.get_headers(token, cmd) # Construct parameters query_parameters = {} query_parameters["api-version"] = api_version response = requests.get( url, headers=headers, params=query_parameters, verify=not should_disable_connection_verify(), ) result = _utility.try_extract_result(response) return _utility.get_object(result, "Role", api_version) def list_roles( cmd, app_id: str, token: str, api_version=API_VERSION, max_pages=0, central_dns_suffix=CENTRAL_ENDPOINT, ) -> List[RoleGa]: """ Get a list of all roles in IoTC app Args: cmd: command passed into az app_id: name of app (used for forming request URL) token: (OPTIONAL) authorization token to fetch role details from IoTC. MUST INCLUDE type (e.g. 'SharedAccessToken ...', 'Bearer ...') central_dns_suffix: {centralDnsSuffixInPath} as found in docs Returns: list of roles """ api_version = API_VERSION roles = [] url = "https://{}.{}/{}".format(app_id, central_dns_suffix, BASE_PATH) headers = _utility.get_headers(token, cmd) # Construct parameters query_parameters = {} query_parameters["api-version"] = api_version pages_processed = 0 while (max_pages == 0 or pages_processed < max_pages) and url: response = requests.get( url, headers=headers, params=query_parameters, verify=not should_disable_connection_verify(), ) result = _utility.try_extract_result(response) if "value" not in result: raise AzureResponseError("Value is not present in body: {}".format(result)) roles.extend( [_utility.get_object(role, "Role", api_version) for role in result["value"]] ) url = result.get("nextLink", None) pages_processed = pages_processed + 1 return roles