Skip to content

Commit d5b8704

Browse files
Metrics advisor aad (Azure#15922)
* add aad support for metrics advisor * async aad * update * update * Update sdk/metricsadvisor/azure-ai-metricsadvisor/azure/ai/metricsadvisor/_metrics_advisor_administration_client.py Co-authored-by: Krista Pratico <krpratic@microsoft.com> * Update sdk/metricsadvisor/azure-ai-metricsadvisor/azure/ai/metricsadvisor/_metrics_advisor_administration_client.py Co-authored-by: Krista Pratico <krpratic@microsoft.com> * update * update * update tests * update docstring Co-authored-by: Krista Pratico <krpratic@microsoft.com>
1 parent d37aec1 commit d5b8704

File tree

366 files changed

+121879
-8814
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

366 files changed

+121879
-8814
lines changed

sdk/metricsadvisor/azure-ai-metricsadvisor/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## 1.0.0b3 (Unreleased)
44

5+
**New Features**
6+
7+
- AAD support authentication #15922
58

69
## 1.0.0b2 (2020-11-10)
710

sdk/metricsadvisor/azure-ai-metricsadvisor/azure/ai/metricsadvisor/_metrics_advisor_administration_client.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import datetime
1818
import six
1919
from azure.core.tracing.decorator import distributed_trace
20+
from azure.core.pipeline.policies import BearerTokenCredentialPolicy
2021
from ._generated._azure_cognitive_service_metrics_advisor_restapi_open_ap_iv2 \
2122
import AzureCognitiveServiceMetricsAdvisorRESTAPIOpenAPIV2 as _Client
2223
from ._generated.models import (
@@ -52,6 +53,7 @@
5253
IngestionStatusQueryOptions as _IngestionStatusQueryOptions,
5354
)
5455
from ._version import SDK_MONIKER
56+
from ._metrics_advisor_key_credential import MetricsAdvisorKeyCredential
5557
from ._metrics_advisor_key_credential_policy import MetricsAdvisorKeyCredentialPolicy
5658
from ._helpers import (
5759
convert_to_generated_data_feed_type,
@@ -85,7 +87,6 @@
8587

8688
if TYPE_CHECKING:
8789
from azure.core.paging import ItemPaged
88-
from ._metrics_advisor_key_credential import MetricsAdvisorKeyCredential
8990
from ._generated.models import IngestionStatus as DataFeedIngestionStatus
9091
from .models._models import (
9192
MetricAlertConfiguration,
@@ -153,8 +154,9 @@ class MetricsAdvisorAdministrationClient(object): # pylint:disable=too-many-pub
153154
:param str endpoint: Supported Cognitive Services endpoints (protocol and hostname,
154155
for example: https://:code:`<resource-name>`.cognitiveservices.azure.com).
155156
:param credential: An instance of ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential.
156-
Requires both subscription key and API key.
157-
:type credential: ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential
157+
which requires both subscription key and API key. Or an object which can provide an access
158+
token for the Metrics Advisor service, such as a credential from :mod:`azure.identity`
159+
:type credential: ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential or ~azure.core.credentials.TokenCredential
158160
159161
.. admonition:: Example:
160162
@@ -179,12 +181,27 @@ def __init__(self, endpoint, credential, **kwargs):
179181

180182
self._endpoint = endpoint
181183

182-
self._client = _Client(
183-
endpoint=endpoint,
184-
sdk_moniker=SDK_MONIKER,
185-
authentication_policy=MetricsAdvisorKeyCredentialPolicy(credential),
186-
**kwargs
187-
)
184+
if isinstance(credential, MetricsAdvisorKeyCredential):
185+
self._client = _Client(
186+
endpoint=endpoint,
187+
sdk_moniker=SDK_MONIKER,
188+
authentication_policy=MetricsAdvisorKeyCredentialPolicy(credential),
189+
**kwargs
190+
)
191+
else:
192+
if hasattr(credential, "get_token"):
193+
credential_scopes = kwargs.pop('credential_scopes',
194+
['https://cognitiveservices.azure.com/.default'])
195+
credential_policy = BearerTokenCredentialPolicy(credential, *credential_scopes)
196+
else:
197+
raise TypeError("Please provide an instance from azure-identity "
198+
"or a class that implement the 'get_token protocol")
199+
self._client = _Client(
200+
endpoint=endpoint,
201+
sdk_moniker=SDK_MONIKER,
202+
authentication_policy=credential_policy,
203+
**kwargs
204+
)
188205

189206
def __repr__(self):
190207
# type: () -> str

sdk/metricsadvisor/azure-ai-metricsadvisor/azure/ai/metricsadvisor/_metrics_advisor_client.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from typing import List, Union, Dict, Any, cast, TYPE_CHECKING, overload
1010

1111
from azure.core.tracing.decorator import distributed_trace
12+
from azure.core.pipeline.policies import BearerTokenCredentialPolicy
1213
from ._metrics_advisor_key_credential import MetricsAdvisorKeyCredential
1314
from ._metrics_advisor_key_credential_policy import MetricsAdvisorKeyCredentialPolicy
1415
from ._generated.models import (
@@ -59,8 +60,9 @@ class MetricsAdvisorClient(object):
5960
:param str endpoint: Supported Cognitive Services endpoints (protocol and hostname,
6061
for example: https://:code:`<resource-name>`.cognitiveservices.azure.com).
6162
:param credential: An instance of ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential.
62-
Requires both subscription key and API key.
63-
:type credential: ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential
63+
which requires both subscription key and API key. Or an object which can provide an access
64+
token for the vault, such as a credential from :mod:`azure.identity`
65+
:type credential: ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential or ~azure.core.credentials.TokenCredential
6466
:keyword Pipeline pipeline: If omitted, the standard pipeline is used.
6567
:keyword HttpTransport transport: If omitted, the standard pipeline is used.
6668
:keyword list[HTTPPolicy] policies: If omitted, the standard pipeline is used.
@@ -79,12 +81,27 @@ def __init__(self, endpoint, credential, **kwargs):
7981

8082
self._endpoint = endpoint
8183

82-
self._client = AzureCognitiveServiceMetricsAdvisorRESTAPIOpenAPIV2(
83-
endpoint=endpoint,
84-
sdk_moniker=SDK_MONIKER,
85-
authentication_policy=MetricsAdvisorKeyCredentialPolicy(credential),
86-
**kwargs
87-
)
84+
if isinstance(credential, MetricsAdvisorKeyCredential):
85+
self._client = AzureCognitiveServiceMetricsAdvisorRESTAPIOpenAPIV2(
86+
endpoint=endpoint,
87+
sdk_moniker=SDK_MONIKER,
88+
authentication_policy=MetricsAdvisorKeyCredentialPolicy(credential),
89+
**kwargs
90+
)
91+
else:
92+
if hasattr(credential, "get_token"):
93+
credential_scopes = kwargs.pop('credential_scopes',
94+
['https://cognitiveservices.azure.com/.default'])
95+
credential_policy = BearerTokenCredentialPolicy(credential, *credential_scopes)
96+
else:
97+
raise TypeError("Please provide an instance from azure-identity "
98+
"or a class that implement the 'get_token protocol")
99+
self._client = AzureCognitiveServiceMetricsAdvisorRESTAPIOpenAPIV2(
100+
endpoint=endpoint,
101+
sdk_moniker=SDK_MONIKER,
102+
authentication_policy=credential_policy,
103+
**kwargs
104+
)
88105

89106
def __repr__(self):
90107
# type: () -> str

sdk/metricsadvisor/azure-ai-metricsadvisor/azure/ai/metricsadvisor/aio/_metrics_advisor_administration_client_async.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from azure.core.tracing.decorator import distributed_trace
1919
from azure.core.tracing.decorator_async import distributed_trace_async
2020
from azure.core.async_paging import AsyncItemPaged
21+
from azure.core.pipeline.policies import AsyncBearerTokenCredentialPolicy
2122
from .._generated.aio import AzureCognitiveServiceMetricsAdvisorRESTAPIOpenAPIV2 as _ClientAsync
2223
from .._generated.models import (
2324
AnomalyAlertingConfiguration as _AnomalyAlertingConfiguration,
@@ -65,8 +66,9 @@ class MetricsAdvisorAdministrationClient(object): # pylint:disable=too-many-pub
6566
:param str endpoint: Supported Cognitive Services endpoints (protocol and hostname,
6667
for example: https://:code:`<resource-name>`.cognitiveservices.azure.com).
6768
:param credential: An instance of ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential.
68-
Requires both subscription key and API key.
69-
:type credential: ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential
69+
which requires both subscription key and API key. Or an object which can provide an access
70+
token for the vault, such as a credential from :mod:`azure.identity`
71+
:type credential: ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential or ~azure.core.credentials.TokenCredential
7072
7173
.. admonition:: Example:
7274
@@ -89,12 +91,27 @@ def __init__(self, endpoint: str, credential: MetricsAdvisorKeyCredential, **kwa
8991

9092
self._endpoint = endpoint
9193

92-
self._client = _ClientAsync(
93-
endpoint=endpoint,
94-
sdk_moniker=SDK_MONIKER,
95-
authentication_policy=MetricsAdvisorKeyCredentialPolicy(credential),
96-
**kwargs
97-
)
94+
if isinstance(credential, MetricsAdvisorKeyCredential):
95+
self._client = _ClientAsync(
96+
endpoint=endpoint,
97+
sdk_moniker=SDK_MONIKER,
98+
authentication_policy=MetricsAdvisorKeyCredentialPolicy(credential),
99+
**kwargs
100+
)
101+
else:
102+
if hasattr(credential, "get_token"):
103+
credential_scopes = kwargs.pop('credential_scopes',
104+
['https://cognitiveservices.azure.com/.default'])
105+
credential_policy = AsyncBearerTokenCredentialPolicy(credential, *credential_scopes)
106+
else:
107+
raise TypeError("Please provide an instance from azure-identity "
108+
"or a class that implement the 'get_token protocol")
109+
self._client = _ClientAsync(
110+
endpoint=endpoint,
111+
sdk_moniker=SDK_MONIKER,
112+
authentication_policy=credential_policy,
113+
**kwargs
114+
)
98115

99116
def __repr__(self):
100117
# type: () -> str

sdk/metricsadvisor/azure-ai-metricsadvisor/azure/ai/metricsadvisor/aio/_metrics_advisor_client_async.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from azure.core.tracing.decorator import distributed_trace
1313
from azure.core.tracing.decorator_async import distributed_trace_async
1414
from azure.core.async_paging import AsyncItemPaged
15+
from azure.core.pipeline.policies import AsyncBearerTokenCredentialPolicy
1516
from .._metrics_advisor_key_credential import MetricsAdvisorKeyCredential
1617
from .._metrics_advisor_key_credential_policy import MetricsAdvisorKeyCredentialPolicy
1718
from .._generated.models import (
@@ -59,8 +60,9 @@ class MetricsAdvisorClient(object):
5960
:param str endpoint: Supported Cognitive Services endpoints (protocol and hostname,
6061
for example: https://:code:`<resource-name>`.cognitiveservices.azure.com).
6162
:param credential: An instance of ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential.
62-
Requires both subscription key and API key.
63-
:type credential: ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential
63+
which requires both subscription key and API key. Or an object which can provide an access
64+
token for the vault, such as a credential from :mod:`azure.identity`
65+
:type credential: ~azure.ai.metricsadvisor.MetricsAdvisorKeyCredential or ~azure.core.credentials.TokenCredential
6466
:keyword Pipeline pipeline: If omitted, the standard pipeline is used.
6567
:keyword HttpTransport transport: If omitted, the standard pipeline is used.
6668
:keyword list[HTTPPolicy] policies: If omitted, the standard pipeline is used.
@@ -79,12 +81,27 @@ def __init__(self, endpoint, credential, **kwargs):
7981

8082
self._endpoint = endpoint
8183

82-
self._client = AzureCognitiveServiceMetricsAdvisorRESTAPIOpenAPIV2(
83-
endpoint=endpoint,
84-
sdk_moniker=SDK_MONIKER,
85-
authentication_policy=MetricsAdvisorKeyCredentialPolicy(credential),
86-
**kwargs
87-
)
84+
if isinstance(credential, MetricsAdvisorKeyCredential):
85+
self._client = AzureCognitiveServiceMetricsAdvisorRESTAPIOpenAPIV2(
86+
endpoint=endpoint,
87+
sdk_moniker=SDK_MONIKER,
88+
authentication_policy=MetricsAdvisorKeyCredentialPolicy(credential),
89+
**kwargs
90+
)
91+
else:
92+
if hasattr(credential, "get_token"):
93+
credential_scopes = kwargs.pop('credential_scopes',
94+
['https://cognitiveservices.azure.com/.default'])
95+
credential_policy = AsyncBearerTokenCredentialPolicy(credential, *credential_scopes)
96+
else:
97+
raise TypeError("Please provide an instance from azure-identity "
98+
"or a class that implement the 'get_token protocol")
99+
self._client = AzureCognitiveServiceMetricsAdvisorRESTAPIOpenAPIV2(
100+
endpoint=endpoint,
101+
sdk_moniker=SDK_MONIKER,
102+
authentication_policy=credential_policy,
103+
**kwargs
104+
)
88105

89106
def __repr__(self):
90107
# type: () -> str
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
-e ../../../tools/azure-sdk-tools
22
-e ../../../tools/azure-devtools
3+
-e ../../identity/azure-identity
34
../../core/azure-core
45
aiohttp>=3.0; python_version >= '3.5'
56
msrest>=0.6.12

sdk/metricsadvisor/azure-ai-metricsadvisor/samples/async_samples/sample_authentication_async.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,33 @@ async def authentication_administration_client_with_metrics_advisor_credential_a
5454
# [END administration_client_with_metrics_advisor_credential_async]
5555

5656

57+
async def authentication_client_with_aad_async():
58+
# [START authentication_client_with_aad_async]
59+
from azure.identity.aio import DefaultAzureCredential
60+
from azure.ai.metricsadvisor.aio import MetricsAdvisorClient
61+
62+
service_endpoint = os.getenv("METRICS_ADVISOR_ENDPOINT")
63+
credential = DefaultAzureCredential()
64+
client = MetricsAdvisorClient(service_endpoint, credential)
65+
# [END authentication_client_with_aad_async]
66+
67+
68+
async def authentication_administration_client_with_aad_async():
69+
# [START authentication_administration_client_with_aad_async]
70+
from azure.identity.aio import DefaultAzureCredential
71+
from azure.ai.metricsadvisor.aio import MetricsAdvisorAdministrationClient
72+
73+
service_endpoint = os.getenv("METRICS_ADVISOR_ENDPOINT")
74+
credential = DefaultAzureCredential()
75+
client = MetricsAdvisorAdministrationClient(service_endpoint, credential)
76+
# [END authentication_administration_client_with_aad_async]
77+
78+
5779
async def main():
5880
await authentication_client_with_metrics_advisor_credential_async()
5981
await authentication_administration_client_with_metrics_advisor_credential_async()
82+
await authentication_client_with_aad_async()
83+
await authentication_administration_client_with_aad_async()
6084

6185

6286
if __name__ == '__main__':

sdk/metricsadvisor/azure-ai-metricsadvisor/samples/sample_authentication.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,30 @@ def authentication_administration_client_with_metrics_advisor_credential():
5151
# [END administration_client_with_metrics_advisor_credential]
5252

5353

54+
def authentication_client_with_aad():
55+
# [START authentication_client_with_aad]
56+
from azure.ai.metricsadvisor import MetricsAdvisorClient
57+
from azure.identity import DefaultAzureCredential
58+
59+
service_endpoint = os.getenv("METRICS_ADVISOR_ENDPOINT")
60+
credential = DefaultAzureCredential()
61+
client = MetricsAdvisorClient(service_endpoint, credential)
62+
# [END authentication_client_with_aad]
63+
64+
65+
def authentication_administration_client_with_aad():
66+
# [START administration_client_with_aad]
67+
from azure.ai.metricsadvisor import MetricsAdvisorAdministrationClient
68+
from azure.identity import DefaultAzureCredential
69+
70+
service_endpoint = os.getenv("METRICS_ADVISOR_ENDPOINT")
71+
credential = DefaultAzureCredential()
72+
client = MetricsAdvisorAdministrationClient(service_endpoint, credential)
73+
# [END administration_client_with_aad]
74+
75+
5476
if __name__ == '__main__':
5577
authentication_client_with_metrics_advisor_credential()
5678
authentication_administration_client_with_metrics_advisor_credential()
79+
authentication_client_with_aad()
80+
authentication_administration_client_with_aad()

0 commit comments

Comments
 (0)