azext_iot/central/services/organization.py (143 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. # -------------------------------------------------------------------------------------------- import requests from knack.log import get_logger from typing import List, Union from azure.cli.core.azclierror import AzureResponseError from azext_iot.constants import CENTRAL_ENDPOINT from azext_iot.central.services import _utility from azext_iot.central.models.ga_2022_07_31 import OrganizationGa from azext_iot.central.common import API_VERSION from azure.cli.core.util import should_disable_connection_verify logger = get_logger(__name__) BASE_PATH = "api/organizations" MODEL = "Organization" def _make_call( cmd, app_id: str, method: str, path: str, payload: str, token: str, central_dns_suffix: str, api_version=API_VERSION, url=None, ) -> Union[dict, OrganizationGa]: if url is None: url = "https://{}.{}/{}".format(app_id, central_dns_suffix, BASE_PATH) if path is not None: url = "{}/{}".format(url, path) headers = _utility.get_headers( token, cmd, has_json_payload=True if payload is not None else False ) # Construct parameters query_parameters = {} query_parameters["api-version"] = api_version response = requests.request( url=url, method=method.upper(), headers=headers, params=query_parameters, json=payload, verify=not should_disable_connection_verify(), ) return _utility.try_extract_result(response) def get_org( cmd, app_id: str, org_id: str, token: str, api_version=API_VERSION, central_dns_suffix=CENTRAL_ENDPOINT, ) -> OrganizationGa: """ Get organization info given an organization id Args: cmd: command passed into az org_id: unique case-sensitive organization 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 result = _make_call( cmd, app_id=app_id, method="get", path=org_id, payload=None, token=token, central_dns_suffix=central_dns_suffix, api_version=api_version, ) return _utility.get_object(result, MODEL, api_version) def list_orgs( cmd, app_id: str, token: str, api_version=API_VERSION, max_pages=0, central_dns_suffix=CENTRAL_ENDPOINT, ) -> List[OrganizationGa]: """ Get a list of all organizations 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 organizations """ api_version = API_VERSION orgs = [] url = "https://{}.{}/{}".format(app_id, central_dns_suffix, BASE_PATH) pages_processed = 0 while (max_pages == 0 or pages_processed < max_pages) and url: result = _make_call( cmd, app_id=app_id, url=url, method="get", path=None, payload=None, token=token, central_dns_suffix=central_dns_suffix, api_version=api_version, ) if "value" not in result: raise AzureResponseError("Value is not present in body: {}".format(result)) orgs.extend( [_utility.get_object(org, MODEL, api_version) for org in result["value"]] ) url = result.get("nextLink", None) pages_processed = pages_processed + 1 return orgs def create_or_update_org( cmd, app_id: str, org_id: str, org_name: str, parent_org: str, token: str, update: bool, api_version=API_VERSION, central_dns_suffix=CENTRAL_ENDPOINT, ) -> OrganizationGa: """ Create an organization in IoTC Args: cmd: command passed into az app_id: name of app (used for forming request URL) org_id: unique case-sensitive organization id org_name: (non-unique) human readable name for the organization parent_org: (optional) parent organization. token: (OPTIONAL) authorization token to fetch organization details from IoTC. MUST INCLUDE type (e.g. 'SharedAccessToken ...', 'Bearer ...') central_dns_suffix: {centralDnsSuffixInPath} as found in docs Returns: organization: dict """ api_version = API_VERSION if not org_name: org_name = org_id payload = { "displayName": org_name, } if parent_org: payload["parent"] = parent_org result = _make_call( cmd, app_id=app_id, method="patch" if update else "put", path=org_id, payload=payload, token=token, central_dns_suffix=central_dns_suffix, api_version=api_version, ) return _utility.get_object(result, MODEL, api_version) def delete_org( cmd, app_id: str, org_id: str, token: str, api_version=API_VERSION, central_dns_suffix=CENTRAL_ENDPOINT, ) -> OrganizationGa: """ Delete an organization Args: cmd: command passed into az org_id: unique case-sensitive organization 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 result = _make_call( cmd, app_id=app_id, method="delete", path=org_id, payload=None, token=token, central_dns_suffix=central_dns_suffix, api_version=api_version, ) return result