azext_iot/digitaltwins/providers/base.py (47 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 azure.cli.core.azclierror import AzureResponseError
from azext_iot.common.auth import IoTOAuth
from azext_iot.digitaltwins.providers.resource import ResourceProvider
from azext_iot.sdk.digitaltwins.dataplane import AzureDigitalTwinsAPI
from azext_iot.sdk.digitaltwins.dataplane.models import ErrorResponseException
from azext_iot.constants import DIGITALTWINS_RESOURCE_ID, USER_AGENT
from azext_iot.common.utility import valid_hostname
__all__ = ["DigitalTwinsProvider", "ErrorResponseException"]
class DigitalTwinsProvider(object):
def __init__(self, cmd, name, rg=None):
assert cmd
assert name
self.cmd = cmd
self.name = name
self.rg = rg
self.resource_id = DIGITALTWINS_RESOURCE_ID
self.rp = ResourceProvider(self.cmd)
def _get_endpoint(self):
host_name = None
https_prefix = "https://"
http_prefix = "http://"
if self.name.lower().startswith(https_prefix):
self.name = self.name[len(https_prefix) :]
elif self.name.lower().startswith(http_prefix):
self.name = self.name[len(http_prefix) :]
if not all([valid_hostname(self.name), "." in self.name]):
instance = self.rp.find_instance(
name=self.name, resource_group_name=self.rg
)
host_name = instance.host_name
if not host_name:
raise AzureResponseError("Instance has invalid hostName. Aborting operation...")
else:
host_name = self.name
return "https://{}".format(host_name)
def get_sdk(self):
from azure.cli.core.commands.client_factory import get_mgmt_service_client
client = get_mgmt_service_client(
cli_ctx=self.cmd.cli_ctx,
client_or_resource_type=AzureDigitalTwinsAPI,
base_url=self._get_endpoint(),
subscription_bound=False,
base_url_bound=False,
credential=IoTOAuth(cli_ctx=self.cmd.cli_ctx, resource_id=self.resource_id),
)
client.config.add_user_agent(USER_AGENT)
return client