From 05cd77f84ed61aa96b302f86e5d35479a29c4be0 Mon Sep 17 00:00:00 2001 From: SDKAuto Date: Thu, 24 Apr 2025 17:44:13 +0000 Subject: [PATCH] CodeGen from PR 34217 in Azure/azure-rest-api-specs Merge 510362fb4afc78cd02069e63ff73a536073f4321 into a44cede8acf4993a0ca4d8278f8b48acbdc8d734 --- sdk/advisor/azure-mgmt-advisor/CHANGELOG.md | 89 + sdk/advisor/azure-mgmt-advisor/README.md | 55 +- sdk/advisor/azure-mgmt-advisor/_meta.json | 10 +- .../azure/mgmt/advisor/__init__.py | 12 +- .../advisor/_advisor_management_client.py | 106 +- .../azure/mgmt/advisor/_configuration.py | 25 +- .../azure/mgmt/advisor/_utils/__init__.py | 6 + .../serialization.py} | 806 +++++---- .../azure/mgmt/advisor/_utils/utils.py | 25 + .../azure/mgmt/advisor/_vendor.py | 27 - .../azure/mgmt/advisor/_version.py | 2 +- .../azure/mgmt/advisor/aio/__init__.py | 12 +- .../advisor/aio/_advisor_management_client.py | 106 +- .../azure/mgmt/advisor/aio/_configuration.py | 20 +- .../mgmt/advisor/aio/operations/__init__.py | 36 +- .../_advisor_management_client_operations.py | 141 ++ .../operations/_advisor_scores_operations.py | 153 ++ .../_assessment_types_operations.py | 133 ++ .../aio/operations/_assessments_operations.py | 372 ++++ .../operations/_configurations_operations.py | 191 +- .../advisor/aio/operations/_operations.py | 57 +- .../_recommendation_metadata_operations.py | 97 +- .../operations/_recommendations_operations.py | 278 ++- .../_resiliency_reviews_operations.py | 201 +++ .../operations/_suppressions_operations.py | 185 +- .../_triage_recommendations_operations.py | 462 +++++ .../_triage_resources_operations.py | 206 +++ .../aio/operations/_workloads_operations.py | 131 ++ .../azure/mgmt/advisor/models/__init__.py | 147 +- .../_advisor_management_client_enums.py | 123 ++ .../azure/mgmt/advisor/models/_models_py3.py | 1592 +++++++++++++++-- .../azure/mgmt/advisor/operations/__init__.py | 36 +- .../_advisor_management_client_operations.py | 170 ++ .../operations/_advisor_scores_operations.py | 204 +++ .../_assessment_types_operations.py | 158 ++ .../operations/_assessments_operations.py | 482 +++++ .../operations/_configurations_operations.py | 219 +-- .../mgmt/advisor/operations/_operations.py | 60 +- .../_recommendation_metadata_operations.py | 104 +- .../operations/_recommendations_operations.py | 318 +++- .../_resiliency_reviews_operations.py | 266 +++ .../operations/_suppressions_operations.py | 206 +-- .../_triage_recommendations_operations.py | 620 +++++++ .../_triage_resources_operations.py | 269 +++ .../operations/_workloads_operations.py | 157 ++ ...figurations.py => create_configuration.py} | 9 +- .../generated_samples/create_suppression.py | 4 +- .../generated_samples/delete_assessment.py | 41 + .../generated_samples/delete_suppression.py | 7 +- .../generated_samples/empty_response.py | 41 + .../generate_recommendations.py | 7 +- .../get_advisor_score_detail.py | 42 + .../generated_samples/get_assessment.py | 42 + .../get_recommendation_detail.py | 8 +- ... => get_recommendation_metadata_entity.py} | 6 +- .../get_suppression_detail.py | 4 +- ...nerate_status.py => list_advisor_score.py} | 12 +- .../list_assessment_types.py | 41 + .../generated_samples/list_assessments.py | 41 + ...nfigurations.py => list_configurations.py} | 6 +- .../list_recommendation_metadata.py | 41 + .../generated_samples/list_recommendations.py | 6 +- .../generated_samples/list_suppressions.py | 6 +- .../generated_samples/list_workloads.py | 41 + .../generated_samples/operations_list.py | 41 + .../generated_samples/predict.py | 53 + .../generated_samples/put_assessment.py | 49 + .../resiliency_reviews_get.py | 42 + .../resiliency_reviews_list.py | 41 + .../triage_recommendations_approve.py | 42 + .../triage_recommendations_get.py | 43 + .../triage_recommendations_list.py | 43 + .../triage_recommendations_reject.py | 43 + .../triage_recommendations_reset.py | 42 + .../generated_samples/triage_resources_get.py | 44 + .../triage_resources_list.py | 44 + .../update_tracked_recommendation.py | 46 + .../generated_tests/conftest.py | 35 + .../test_advisor_management.py | 30 + ...or_management_advisor_scores_operations.py | 40 + ...agement_advisor_scores_operations_async.py | 41 + ..._management_assessment_types_operations.py | 29 + ...ement_assessment_types_operations_async.py | 30 + ...visor_management_assessments_operations.py | 84 + ...management_assessments_operations_async.py | 85 + .../test_advisor_management_async.py | 31 + ...or_management_configurations_operations.py | 115 ++ ...agement_configurations_operations_async.py | 116 ++ .../test_advisor_management_operations.py | 29 + ...est_advisor_management_operations_async.py | 30 + ...ment_recommendation_metadata_operations.py | 40 + ...ecommendation_metadata_operations_async.py | 41 + ...r_management_recommendations_operations.py | 84 + ...gement_recommendations_operations_async.py | 85 + ...anagement_resiliency_reviews_operations.py | 40 + ...ent_resiliency_reviews_operations_async.py | 41 + ...isor_management_suppressions_operations.py | 84 + ...anagement_suppressions_operations_async.py | 85 + ...ement_triage_recommendations_operations.py | 79 + ...triage_recommendations_operations_async.py | 80 + ..._management_triage_resources_operations.py | 44 + ...ement_triage_resources_operations_async.py | 45 + ...advisor_management_workloads_operations.py | 29 + ...r_management_workloads_operations_async.py | 30 + .../azure-mgmt-advisor/sdk_packaging.toml | 2 +- sdk/advisor/azure-mgmt-advisor/setup.py | 84 +- 106 files changed, 10086 insertions(+), 1555 deletions(-) create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/__init__.py rename sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/{_serialization.py => _utils/serialization.py} (74%) create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/utils.py delete mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_vendor.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_advisor_management_client_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_advisor_scores_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_assessment_types_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_assessments_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_resiliency_reviews_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_triage_recommendations_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_triage_resources_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_workloads_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_advisor_management_client_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_advisor_scores_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_assessment_types_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_assessments_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_resiliency_reviews_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_triage_recommendations_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_triage_resources_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_workloads_operations.py rename sdk/advisor/azure-mgmt-advisor/generated_samples/{put_configurations.py => create_configuration.py} (86%) create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/delete_assessment.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/empty_response.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/get_advisor_score_detail.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/get_assessment.py rename sdk/advisor/azure-mgmt-advisor/generated_samples/{get_metadata.py => get_recommendation_metadata_entity.py} (87%) rename sdk/advisor/azure-mgmt-advisor/generated_samples/{get_generate_status.py => list_advisor_score.py} (81%) create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/list_assessment_types.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/list_assessments.py rename sdk/advisor/azure-mgmt-advisor/generated_samples/{get_configurations.py => list_configurations.py} (89%) create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/list_recommendation_metadata.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/list_workloads.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/operations_list.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/predict.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/put_assessment.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/resiliency_reviews_get.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/resiliency_reviews_list.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_approve.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_get.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_list.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_reject.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_reset.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/triage_resources_get.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/triage_resources_list.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_samples/update_tracked_recommendation.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/conftest.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_advisor_scores_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_advisor_scores_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessment_types_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessment_types_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessments_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessments_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_configurations_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_configurations_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendation_metadata_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendation_metadata_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendations_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendations_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_resiliency_reviews_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_resiliency_reviews_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_suppressions_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_suppressions_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_recommendations_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_recommendations_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_resources_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_resources_operations_async.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_workloads_operations.py create mode 100644 sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_workloads_operations_async.py diff --git a/sdk/advisor/azure-mgmt-advisor/CHANGELOG.md b/sdk/advisor/azure-mgmt-advisor/CHANGELOG.md index 4afea83d4099..02c3675c3765 100644 --- a/sdk/advisor/azure-mgmt-advisor/CHANGELOG.md +++ b/sdk/advisor/azure-mgmt-advisor/CHANGELOG.md @@ -1,5 +1,94 @@ # Release History +## 10.0.0b2 (2025-04-24) + +### Features Added + + - Client `AdvisorManagementClient` added method `predict` + - Client `AdvisorManagementClient` added operation group `advisor_scores` + - Client `AdvisorManagementClient` added operation group `assessments` + - Client `AdvisorManagementClient` added operation group `assessment_types` + - Client `AdvisorManagementClient` added operation group `workloads` + - Client `AdvisorManagementClient` added operation group `resiliency_reviews` + - Client `AdvisorManagementClient` added operation group `triage_recommendations` + - Client `AdvisorManagementClient` added operation group `triage_resources` + - Model `ConfigData` added property `duration` + - Model `ConfigData` added property `system_data` + - Model `Resource` added property `system_data` + - Model `ResourceRecommendationBase` added property `risk` + - Model `ResourceRecommendationBase` added property `tracked` + - Model `ResourceRecommendationBase` added property `tracked_properties` + - Model `ResourceRecommendationBase` added property `review` + - Model `ResourceRecommendationBase` added property `resource_workload` + - Model `ResourceRecommendationBase` added property `source_system` + - Model `ResourceRecommendationBase` added property `notes` + - Model `ResourceRecommendationBase` added property `system_data` + - Model `SuppressionContract` added property `system_data` + - Added model `AdvisorScoreEntity` + - Added model `AdvisorScoreEntityProperties` + - Added model `AdvisorScoreResponse` + - Added enum `Aggregated` + - Added model `AssessmentListResult` + - Added model `AssessmentResult` + - Added model `AssessmentTypeListResult` + - Added model `AssessmentTypeResult` + - Added enum `CreatedByType` + - Added enum `Duration` + - Added model `ErrorAdditionalInfo` + - Added model `ErrorDetail` + - Added model `ErrorResponse` + - Added model `PredictionRequest` + - Added model `PredictionResponse` + - Added enum `PredictionType` + - Added enum `Priority` + - Added enum `PriorityName` + - Added model `ProxyResource` + - Added enum `Reason` + - Added enum `ReasonForRejectionName` + - Added model `RecommendationPropertiesResourceWorkload` + - Added model `RecommendationPropertiesReview` + - Added model `RecommendationRejectBody` + - Added enum `RecommendationStatusName` + - Added model `ResiliencyReview` + - Added model `ResiliencyReviewCollection` + - Added enum `ReviewStatus` + - Added enum `Risk` + - Added model `ScoreEntity` + - Added enum `State` + - Added model `SystemData` + - Added model `TimeSeriesEntityItem` + - Added model `TrackedRecommendationProperties` + - Added model `TrackedRecommendationPropertiesPayload` + - Added model `TrackedRecommendationPropertiesPayloadProperties` + - Added model `TriageRecommendation` + - Added model `TriageRecommendationCollection` + - Added model `TriageResource` + - Added model `TriageResourceCollection` + - Added model `WorkloadListResult` + - Added model `WorkloadResult` + - Model `RecommendationsOperations` added method `patch` + - Added model `AdvisorManagementClientOperationsMixin` + - Added model `AdvisorScoresOperations` + - Added model `AssessmentTypesOperations` + - Added model `AssessmentsOperations` + - Added model `ResiliencyReviewsOperations` + - Added model `TriageRecommendationsOperations` + - Added model `TriageResourcesOperations` + - Added model `WorkloadsOperations` + - Method `AdvisorManagementClient.predict` has a new overload `def predict(self: None, prediction_request: PredictionRequest, content_type: str)` + - Method `AdvisorManagementClient.predict` has a new overload `def predict(self: None, prediction_request: IO[bytes], content_type: str)` + - Method `ConfigurationsOperations.create_in_resource_group` has a new overload `def create_in_resource_group(self: None, configuration_name: Union[str, ConfigurationName], resource_group: str, config_contract: IO[bytes], content_type: str)` + - Method `ConfigurationsOperations.create_in_subscription` has a new overload `def create_in_subscription(self: None, configuration_name: Union[str, ConfigurationName], config_contract: IO[bytes], content_type: str)` + - Method `RecommendationsOperations.patch` has a new overload `def patch(self: None, resource_uri: str, recommendation_id: str, tracked_properties: TrackedRecommendationPropertiesPayload, content_type: str)` + - Method `RecommendationsOperations.patch` has a new overload `def patch(self: None, resource_uri: str, recommendation_id: str, tracked_properties: IO[bytes], content_type: str)` + - Method `SuppressionsOperations.create` has a new overload `def create(self: None, resource_uri: str, recommendation_id: str, name: str, suppression_contract: IO[bytes], content_type: str)` + - Method `AdvisorManagementClientOperationsMixin.predict` has a new overload `def predict(self: None, prediction_request: PredictionRequest, content_type: str)` + - Method `AdvisorManagementClientOperationsMixin.predict` has a new overload `def predict(self: None, prediction_request: IO[bytes], content_type: str)` + - Method `AssessmentsOperations.put` has a new overload `def put(self: None, assessment_name: str, assessment_contract: AssessmentResult, content_type: str)` + - Method `AssessmentsOperations.put` has a new overload `def put(self: None, assessment_name: str, assessment_contract: IO[bytes], content_type: str)` + - Method `TriageRecommendationsOperations.reject_triage_recommendation` has a new overload `def reject_triage_recommendation(self: None, review_id: str, recommendation_id: str, recommendation_reject_body: RecommendationRejectBody, content_type: str)` + - Method `TriageRecommendationsOperations.reject_triage_recommendation` has a new overload `def reject_triage_recommendation(self: None, review_id: str, recommendation_id: str, recommendation_reject_body: IO[bytes], content_type: str)` + ## 10.0.0b1 (2022-10-28) ### Features Added diff --git a/sdk/advisor/azure-mgmt-advisor/README.md b/sdk/advisor/azure-mgmt-advisor/README.md index 75f90150c538..4aed2c737388 100644 --- a/sdk/advisor/azure-mgmt-advisor/README.md +++ b/sdk/advisor/azure-mgmt-advisor/README.md @@ -1,28 +1,61 @@ # Microsoft Azure SDK for Python This is the Microsoft Azure Advisor Client Library. -This package has been tested with Python 3.7+. +This package has been tested with Python 3.9+. For a more complete view of Azure libraries, see the [azure sdk python release](https://aka.ms/azsdk/python/all). ## _Disclaimer_ _Azure SDK Python packages support for Python 2.7 has ended 01 January 2022. For more information and questions, please refer to https://github.com/Azure/azure-sdk-for-python/issues/20691_ -# Usage +## Getting started +### Prerequisites -To learn how to use this package, see the [quickstart guide](https://aka.ms/azsdk/python/mgmt) - -For docs and references, see [Python SDK References](https://docs.microsoft.com/python/api/overview/azure/advisor) -Code samples for this package can be found at [Advisor](https://docs.microsoft.com/samples/browse/?languages=python&term=Getting%20started%20-%20Managing&terms=Getting%20started%20-%20Managing) on docs.microsoft.com. -Additional code samples for different Azure services are available at [Samples Repo](https://github.com/Azure-Samples/azure-samples-python-management/tree/main/samples/advisor) +- Python 3.9+ is required to use this package. +- [Azure subscription](https://azure.microsoft.com/free/) +### Install the package -# Provide Feedback +```bash +pip install azure-mgmt-advisor +pip install azure-identity +``` -If you encounter any bugs or have suggestions, please file an issue in the -[Issues](https://github.com/Azure/azure-sdk-for-python/issues) -section of the project. +### Authentication + +By default, [Azure Active Directory](https://aka.ms/awps/aad) token authentication depends on correct configuration of the following environment variables. + +- `AZURE_CLIENT_ID` for Azure client ID. +- `AZURE_TENANT_ID` for Azure tenant ID. +- `AZURE_CLIENT_SECRET` for Azure client secret. + +In addition, Azure subscription ID can be configured via environment variable `AZURE_SUBSCRIPTION_ID`. + +With above configuration, client can be authenticated by following code: + +```python +from azure.identity import DefaultAzureCredential +from azure.mgmt.advisor import AdvisorManagementClient +import os +sub_id = os.getenv("AZURE_SUBSCRIPTION_ID") +client = AdvisorManagementClient(credential=DefaultAzureCredential(), subscription_id=sub_id) +``` +## Examples +Code samples for this package can be found at: +- [Search Advisor](https://docs.microsoft.com/samples/browse/?languages=python&term=Getting%20started%20-%20Managing&terms=Getting%20started%20-%20Managing) on docs.microsoft.com +- [Azure Python Mgmt SDK Samples Repo](https://aka.ms/azsdk/python/mgmt/samples) + + +## Troubleshooting + +## Next steps + +## Provide Feedback + +If you encounter any bugs or have suggestions, please file an issue in the +[Issues](https://github.com/Azure/azure-sdk-for-python/issues) +section of the project. diff --git a/sdk/advisor/azure-mgmt-advisor/_meta.json b/sdk/advisor/azure-mgmt-advisor/_meta.json index 82f0df423b5e..d6f5f7f86fb8 100644 --- a/sdk/advisor/azure-mgmt-advisor/_meta.json +++ b/sdk/advisor/azure-mgmt-advisor/_meta.json @@ -1,11 +1,11 @@ { - "commit": "e82a24def11ffc98cc263884f9f1742c99f2df5e", + "commit": "960e00a10f8dd5d76f6f3ef02ab7a7c785d21afe", "repository_url": "https://github.com/Azure/azure-rest-api-specs", - "autorest": "3.9.2", + "autorest": "3.10.2", "use": [ - "@autorest/python@6.2.1", - "@autorest/modelerfour@4.24.3" + "@autorest/python@6.34.1", + "@autorest/modelerfour@4.27.0" ], - "autorest_command": "autorest specification/advisor/resource-manager/readme.md --generate-sample=True --include-x-ms-examples-original-file=True --python --python-sdks-folder=/home/vsts/work/1/azure-sdk-for-python/sdk --tag=package-2020-01 --use=@autorest/python@6.2.1 --use=@autorest/modelerfour@4.24.3 --version=3.9.2 --version-tolerant=False", + "autorest_command": "autorest specification/advisor/resource-manager/readme.md --generate-sample=True --generate-test=True --include-x-ms-examples-original-file=True --python --python-sdks-folder=/mnt/vss/_work/1/s/azure-sdk-for-python/sdk --use=@autorest/python@6.34.1 --use=@autorest/modelerfour@4.27.0 --version=3.10.2 --version-tolerant=False", "readme": "specification/advisor/resource-manager/readme.md" } \ No newline at end of file diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/__init__.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/__init__.py index 805d1e4cecc0..49b6087ac1d9 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/__init__.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/__init__.py @@ -5,15 +5,21 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position -from ._advisor_management_client import AdvisorManagementClient +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + +from ._advisor_management_client import AdvisorManagementClient # type: ignore from ._version import VERSION __version__ = VERSION try: from ._patch import __all__ as _patch_all - from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import + from ._patch import * except ImportError: _patch_all = [] from ._patch import patch_sdk as _patch_sdk @@ -21,6 +27,6 @@ __all__ = [ "AdvisorManagementClient", ] -__all__.extend([p for p in _patch_all if p not in __all__]) +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_advisor_management_client.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_advisor_management_client.py index 1289e7e6bc0f..85ef32798244 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_advisor_management_client.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_advisor_management_client.py @@ -7,28 +7,40 @@ # -------------------------------------------------------------------------- from copy import deepcopy -from typing import Any, TYPE_CHECKING +from typing import Any, Optional, TYPE_CHECKING, cast +from typing_extensions import Self +from azure.core.pipeline import policies from azure.core.rest import HttpRequest, HttpResponse +from azure.core.settings import settings from azure.mgmt.core import ARMPipelineClient +from azure.mgmt.core.policies import ARMAutoResourceProviderRegistrationPolicy +from azure.mgmt.core.tools import get_arm_endpoints -from . import models +from . import models as _models from ._configuration import AdvisorManagementClientConfiguration -from ._serialization import Deserializer, Serializer +from ._utils.serialization import Deserializer, Serializer from .operations import ( + AdvisorManagementClientOperationsMixin, + AdvisorScoresOperations, + AssessmentTypesOperations, + AssessmentsOperations, ConfigurationsOperations, Operations, RecommendationMetadataOperations, RecommendationsOperations, + ResiliencyReviewsOperations, SuppressionsOperations, + TriageRecommendationsOperations, + TriageResourcesOperations, + WorkloadsOperations, ) if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports from azure.core.credentials import TokenCredential -class AdvisorManagementClient: # pylint: disable=client-accepts-api-version-keyword +class AdvisorManagementClient(AdvisorManagementClientOperationsMixin): # pylint: disable=too-many-instance-attributes """REST APIs for Azure Advisor. :ivar recommendation_metadata: RecommendationMetadataOperations operations @@ -42,30 +54,64 @@ class AdvisorManagementClient: # pylint: disable=client-accepts-api-version-key :vartype operations: azure.mgmt.advisor.operations.Operations :ivar suppressions: SuppressionsOperations operations :vartype suppressions: azure.mgmt.advisor.operations.SuppressionsOperations + :ivar advisor_scores: AdvisorScoresOperations operations + :vartype advisor_scores: azure.mgmt.advisor.operations.AdvisorScoresOperations + :ivar assessments: AssessmentsOperations operations + :vartype assessments: azure.mgmt.advisor.operations.AssessmentsOperations + :ivar assessment_types: AssessmentTypesOperations operations + :vartype assessment_types: azure.mgmt.advisor.operations.AssessmentTypesOperations + :ivar workloads: WorkloadsOperations operations + :vartype workloads: azure.mgmt.advisor.operations.WorkloadsOperations + :ivar resiliency_reviews: ResiliencyReviewsOperations operations + :vartype resiliency_reviews: azure.mgmt.advisor.operations.ResiliencyReviewsOperations + :ivar triage_recommendations: TriageRecommendationsOperations operations + :vartype triage_recommendations: azure.mgmt.advisor.operations.TriageRecommendationsOperations + :ivar triage_resources: TriageResourcesOperations operations + :vartype triage_resources: azure.mgmt.advisor.operations.TriageResourcesOperations :param credential: Credential needed for the client to connect to Azure. Required. :type credential: ~azure.core.credentials.TokenCredential :param subscription_id: The Azure subscription ID. Required. :type subscription_id: str - :param base_url: Service URL. Default value is "https://management.azure.com". + :param base_url: Service URL. Default value is None. :type base_url: str - :keyword api_version: Api Version. Default value is "2020-01-01". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: Api Version. Default value is "2024-11-18-preview". Note that overriding + this default value may result in unsupported behavior. :paramtype api_version: str """ def __init__( - self, - credential: "TokenCredential", - subscription_id: str, - base_url: str = "https://management.azure.com", - **kwargs: Any + self, credential: "TokenCredential", subscription_id: str, base_url: Optional[str] = None, **kwargs: Any ) -> None: + _cloud = kwargs.pop("cloud_setting", None) or settings.current.azure_cloud # type: ignore + _endpoints = get_arm_endpoints(_cloud) + if not base_url: + base_url = _endpoints["resource_manager"] + credential_scopes = kwargs.pop("credential_scopes", _endpoints["credential_scopes"]) self._config = AdvisorManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) - self._client = ARMPipelineClient(base_url=base_url, config=self._config, **kwargs) - client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + ARMAutoResourceProviderRegistrationPolicy(), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: ARMPipelineClient = ARMPipelineClient(base_url=cast(str, base_url), policies=_policies, **kwargs) + + client_models = {k: v for k, v in _models.__dict__.items() if isinstance(v, type)} self._serialize = Serializer(client_models) self._deserialize = Deserializer(client_models) self._serialize.client_side_validation = False @@ -76,8 +122,23 @@ def __init__( self.recommendations = RecommendationsOperations(self._client, self._config, self._serialize, self._deserialize) self.operations = Operations(self._client, self._config, self._serialize, self._deserialize) self.suppressions = SuppressionsOperations(self._client, self._config, self._serialize, self._deserialize) + self.advisor_scores = AdvisorScoresOperations(self._client, self._config, self._serialize, self._deserialize) + self.assessments = AssessmentsOperations(self._client, self._config, self._serialize, self._deserialize) + self.assessment_types = AssessmentTypesOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.workloads = WorkloadsOperations(self._client, self._config, self._serialize, self._deserialize) + self.resiliency_reviews = ResiliencyReviewsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.triage_recommendations = TriageRecommendationsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.triage_resources = TriageResourcesOperations( + self._client, self._config, self._serialize, self._deserialize + ) - def _send_request(self, request: HttpRequest, **kwargs: Any) -> HttpResponse: + def _send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: """Runs the network request through the client's chained policies. >>> from azure.core.rest import HttpRequest @@ -97,17 +158,14 @@ def _send_request(self, request: HttpRequest, **kwargs: Any) -> HttpResponse: request_copy = deepcopy(request) request_copy.url = self._client.format_url(request_copy.url) - return self._client.send_request(request_copy, **kwargs) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore - def close(self): - # type: () -> None + def close(self) -> None: self._client.close() - def __enter__(self): - # type: () -> AdvisorManagementClient + def __enter__(self) -> Self: self._client.__enter__() return self - def __exit__(self, *exc_details): - # type: (Any) -> None + def __exit__(self, *exc_details: Any) -> None: self._client.__exit__(*exc_details) diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_configuration.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_configuration.py index 4de48238dff3..cc03c92c316c 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_configuration.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_configuration.py @@ -6,26 +6,18 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys from typing import Any, TYPE_CHECKING -from azure.core.configuration import Configuration from azure.core.pipeline import policies from azure.mgmt.core.policies import ARMChallengeAuthenticationPolicy, ARMHttpLoggingPolicy from ._version import VERSION -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports - if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports from azure.core.credentials import TokenCredential -class AdvisorManagementClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes +class AdvisorManagementClientConfiguration: # pylint: disable=too-many-instance-attributes """Configuration for AdvisorManagementClient. Note that all parameters used to create this instance are saved as instance @@ -35,14 +27,13 @@ class AdvisorManagementClientConfiguration(Configuration): # pylint: disable=to :type credential: ~azure.core.credentials.TokenCredential :param subscription_id: The Azure subscription ID. Required. :type subscription_id: str - :keyword api_version: Api Version. Default value is "2020-01-01". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: Api Version. Default value is "2024-11-18-preview". Note that overriding + this default value may result in unsupported behavior. :paramtype api_version: str """ def __init__(self, credential: "TokenCredential", subscription_id: str, **kwargs: Any) -> None: - super(AdvisorManagementClientConfiguration, self).__init__(**kwargs) - api_version = kwargs.pop("api_version", "2020-01-01") # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", "2024-11-18-preview") if credential is None: raise ValueError("Parameter 'credential' must not be None.") @@ -54,20 +45,18 @@ def __init__(self, credential: "TokenCredential", subscription_id: str, **kwargs self.api_version = api_version self.credential_scopes = kwargs.pop("credential_scopes", ["https://management.azure.com/.default"]) kwargs.setdefault("sdk_moniker", "mgmt-advisor/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) self._configure(**kwargs) - def _configure( - self, **kwargs # type: Any - ): - # type: (...) -> None + def _configure(self, **kwargs: Any) -> None: self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) self.http_logging_policy = kwargs.get("http_logging_policy") or ARMHttpLoggingPolicy(**kwargs) - self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) self.authentication_policy = kwargs.get("authentication_policy") if self.credential and not self.authentication_policy: self.authentication_policy = ARMChallengeAuthenticationPolicy( diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/__init__.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/__init__.py @@ -0,0 +1,6 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_serialization.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/serialization.py similarity index 74% rename from sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_serialization.py rename to sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/serialization.py index 7c1dedb5133d..f5187701d7be 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_serialization.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/serialization.py @@ -1,30 +1,13 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# coding=utf-8 # -------------------------------------------------------------------------- -# # Copyright (c) Microsoft Corporation. All rights reserved. -# -# The MIT License (MIT) -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the ""Software""), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -# pylint: skip-file +# pyright: reportUnnecessaryTypeIgnoreComment=false from base64 import b64decode, b64encode import calendar @@ -37,23 +20,35 @@ import re import sys import codecs +from typing import ( + Dict, + Any, + cast, + Optional, + Union, + AnyStr, + IO, + Mapping, + Callable, + MutableMapping, + List, +) try: from urllib import quote # type: ignore except ImportError: - from urllib.parse import quote # type: ignore + from urllib.parse import quote import xml.etree.ElementTree as ET -import isodate +import isodate # type: ignore +from typing_extensions import Self -from typing import Dict, Any, cast, TYPE_CHECKING - -from azure.core.exceptions import DeserializationError, SerializationError, raise_with_traceback +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull _BOM = codecs.BOM_UTF8.decode(encoding="utf-8") -if TYPE_CHECKING: - from typing import Optional, Union, AnyStr, IO, Mapping +JSON = MutableMapping[str, Any] class RawDeserializer: @@ -65,8 +60,7 @@ class RawDeserializer: CONTEXT_NAME = "deserialized_data" @classmethod - def deserialize_from_text(cls, data, content_type=None): - # type: (Optional[Union[AnyStr, IO]], Optional[str]) -> Any + def deserialize_from_text(cls, data: Optional[Union[AnyStr, IO]], content_type: Optional[str] = None) -> Any: """Decode data according to content-type. Accept a stream of data as well, but will be load at once in memory for now. @@ -76,6 +70,8 @@ def deserialize_from_text(cls, data, content_type=None): :param data: Input, could be bytes or stream (will be decoded with UTF8) or text :type data: str or bytes or IO :param str content_type: The content type. + :return: The deserialized data. + :rtype: object """ if hasattr(data, "read"): # Assume a stream @@ -97,7 +93,7 @@ def deserialize_from_text(cls, data, content_type=None): try: return json.loads(data_as_str) except ValueError as err: - raise DeserializationError("JSON is invalid: {}".format(err), err) + raise DeserializationError("JSON is invalid: {}".format(err), err) from err elif "xml" in (content_type or []): try: @@ -109,7 +105,7 @@ def deserialize_from_text(cls, data, content_type=None): pass return ET.fromstring(data_as_str) # nosec - except ET.ParseError: + except ET.ParseError as err: # It might be because the server has an issue, and returned JSON with # content-type XML.... # So let's try a JSON load, and if it's still broken @@ -128,17 +124,23 @@ def _json_attemp(data): # The function hack is because Py2.7 messes up with exception # context otherwise. _LOGGER.critical("Wasn't XML not JSON, failing") - raise_with_traceback(DeserializationError, "XML is invalid") + raise DeserializationError("XML is invalid") from err + elif content_type.startswith("text/"): + return data_as_str raise DeserializationError("Cannot deserialize content-type: {}".format(content_type)) @classmethod - def deserialize_from_http_generics(cls, body_bytes, headers): - # type: (Optional[Union[AnyStr, IO]], Mapping) -> Any + def deserialize_from_http_generics(cls, body_bytes: Optional[Union[AnyStr, IO]], headers: Mapping) -> Any: """Deserialize from HTTP response. Use bytes and headers to NOT use any requests/aiohttp or whatever specific implementation. Headers will tested for "content-type" + + :param bytes body_bytes: The body of the response. + :param dict headers: The headers of the response. + :returns: The deserialized data. + :rtype: object """ # Try to use content-type from headers if available content_type = None @@ -156,13 +158,6 @@ def deserialize_from_http_generics(cls, body_bytes, headers): return None -try: - basestring # type: ignore - unicode_str = unicode # type: ignore -except NameError: - basestring = str # type: ignore - unicode_str = str # type: ignore - _LOGGER = logging.getLogger(__name__) try: @@ -170,80 +165,31 @@ def deserialize_from_http_generics(cls, body_bytes, headers): except NameError: _long_type = int - -class UTC(datetime.tzinfo): - """Time Zone info for handling UTC""" - - def utcoffset(self, dt): - """UTF offset for UTC is 0.""" - return datetime.timedelta(0) - - def tzname(self, dt): - """Timestamp representation.""" - return "Z" - - def dst(self, dt): - """No daylight saving for UTC.""" - return datetime.timedelta(hours=1) - - -try: - from datetime import timezone as _FixedOffset -except ImportError: # Python 2.7 - - class _FixedOffset(datetime.tzinfo): # type: ignore - """Fixed offset in minutes east from UTC. - Copy/pasted from Python doc - :param datetime.timedelta offset: offset in timedelta format - """ - - def __init__(self, offset): - self.__offset = offset - - def utcoffset(self, dt): - return self.__offset - - def tzname(self, dt): - return str(self.__offset.total_seconds() / 3600) - - def __repr__(self): - return "".format(self.tzname(None)) - - def dst(self, dt): - return datetime.timedelta(0) - - def __getinitargs__(self): - return (self.__offset,) - - -try: - from datetime import timezone - - TZ_UTC = timezone.utc # type: ignore -except ImportError: - TZ_UTC = UTC() # type: ignore +TZ_UTC = datetime.timezone.utc _FLATTEN = re.compile(r"(? None: + self.additional_properties: Optional[Dict[str, Any]] = {} + for k in kwargs: # pylint: disable=consider-using-dict-items if k not in self._attribute_map: _LOGGER.warning("%s is not a known attribute of class %s and will be ignored", k, self.__class__) elif k in self._validation and self._validation[k].get("readonly", False): @@ -290,43 +243,57 @@ def __init__(self, **kwargs): else: setattr(self, k, kwargs[k]) - def __eq__(self, other): - """Compare objects by comparing all attributes.""" + def __eq__(self, other: Any) -> bool: + """Compare objects by comparing all attributes. + + :param object other: The object to compare + :returns: True if objects are equal + :rtype: bool + """ if isinstance(other, self.__class__): return self.__dict__ == other.__dict__ return False - def __ne__(self, other): - """Compare objects by comparing all attributes.""" + def __ne__(self, other: Any) -> bool: + """Compare objects by comparing all attributes. + + :param object other: The object to compare + :returns: True if objects are not equal + :rtype: bool + """ return not self.__eq__(other) - def __str__(self): + def __str__(self) -> str: return str(self.__dict__) @classmethod - def enable_additional_properties_sending(cls): + def enable_additional_properties_sending(cls) -> None: cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} @classmethod - def is_xml_model(cls): + def is_xml_model(cls) -> bool: try: - cls._xml_map + cls._xml_map # type: ignore except AttributeError: return False return True @classmethod def _create_xml_node(cls): - """Create XML node.""" + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ try: - xml_map = cls._xml_map + xml_map = cls._xml_map # type: ignore except AttributeError: xml_map = {} return _create_xml_node(xml_map.get("name", cls.__name__), xml_map.get("prefix", None), xml_map.get("ns", None)) - def serialize(self, keep_readonly=False, **kwargs): - """Return the JSON that would be sent to azure from this model. + def serialize(self, keep_readonly: bool = False, **kwargs: Any) -> JSON: + """Return the JSON that would be sent to server from this model. This is an alias to `as_dict(full_restapi_key_transformer, keep_readonly=False)`. @@ -337,10 +304,17 @@ def serialize(self, keep_readonly=False, **kwargs): :rtype: dict """ serializer = Serializer(self._infer_class_models()) - return serializer._serialize(self, keep_readonly=keep_readonly, **kwargs) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) - def as_dict(self, keep_readonly=True, key_transformer=attribute_transformer, **kwargs): - """Return a dict that can be JSONify using json.dump. + def as_dict( + self, + keep_readonly: bool = True, + key_transformer: Callable[[str, Dict[str, Any], Any], Any] = attribute_transformer, + **kwargs: Any + ) -> JSON: + """Return a dict that can be serialized using json.dump. Advanced usage might optionally use a callback as parameter: @@ -366,12 +340,15 @@ def my_key_transformer(key, attr_desc, value): If you want XML serialization, you can pass the kwargs is_xml=True. + :param bool keep_readonly: If you want to serialize the readonly attributes :param function key_transformer: A key transformer function. :returns: A dict JSON compatible object :rtype: dict """ serializer = Serializer(self._infer_class_models()) - return serializer._serialize(self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) @classmethod def _infer_class_models(cls): @@ -381,25 +358,31 @@ def _infer_class_models(cls): client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} if cls.__name__ not in client_models: raise ValueError("Not Autorest generated code") - except Exception: + except Exception: # pylint: disable=broad-exception-caught # Assume it's not Autorest generated (tests?). Add ourselves as dependencies. client_models = {cls.__name__: cls} return client_models @classmethod - def deserialize(cls, data, content_type=None): + def deserialize(cls, data: Any, content_type: Optional[str] = None) -> Self: """Parse a str using the RestAPI syntax and return a model. :param str data: A str using RestAPI structure. JSON by default. :param str content_type: JSON by default, set application/xml if XML. :returns: An instance of this model - :raises: DeserializationError if something went wrong + :raises DeserializationError: if something went wrong + :rtype: Self """ deserializer = Deserializer(cls._infer_class_models()) - return deserializer(cls.__name__, data, content_type=content_type) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore @classmethod - def from_dict(cls, data, key_extractors=None, content_type=None): + def from_dict( + cls, + data: Any, + key_extractors: Optional[Callable[[str, Dict[str, Any], Any], Any]] = None, + content_type: Optional[str] = None, + ) -> Self: """Parse a dict using given key extractor return a model. By default consider key @@ -407,13 +390,15 @@ def from_dict(cls, data, key_extractors=None, content_type=None): and last_rest_key_case_insensitive_extractor) :param dict data: A dict using RestAPI structure + :param function key_extractors: A key extractor function. :param str content_type: JSON by default, set application/xml if XML. :returns: An instance of this model - :raises: DeserializationError if something went wrong + :raises DeserializationError: if something went wrong + :rtype: Self """ deserializer = Deserializer(cls._infer_class_models()) - deserializer.key_extractors = ( - [ + deserializer.key_extractors = ( # type: ignore + [ # type: ignore attribute_key_case_insensitive_extractor, rest_key_case_insensitive_extractor, last_rest_key_case_insensitive_extractor, @@ -421,7 +406,7 @@ def from_dict(cls, data, key_extractors=None, content_type=None): if key_extractors is None else key_extractors ) - return deserializer(cls.__name__, data, content_type=content_type) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore @classmethod def _flatten_subtype(cls, key, objects): @@ -429,21 +414,25 @@ def _flatten_subtype(cls, key, objects): return {} result = dict(cls._subtype_map[key]) for valuetype in cls._subtype_map[key].values(): - result.update(objects[valuetype]._flatten_subtype(key, objects)) + result.update(objects[valuetype]._flatten_subtype(key, objects)) # pylint: disable=protected-access return result @classmethod def _classify(cls, response, objects): """Check the class _subtype_map for any child classes. We want to ignore any inherited _subtype_maps. - Remove the polymorphic key from the initial data. + + :param dict response: The initial data + :param dict objects: The class objects + :returns: The class to be used + :rtype: class """ for subtype_key in cls.__dict__.get("_subtype_map", {}).keys(): subtype_value = None if not isinstance(response, ET.Element): rest_api_response_key = cls._get_rest_key_parts(subtype_key)[-1] - subtype_value = response.pop(rest_api_response_key, None) or response.pop(subtype_key, None) + subtype_value = response.get(rest_api_response_key, None) or response.get(subtype_key, None) else: subtype_value = xml_key_extractor(subtype_key, cls._attribute_map[subtype_key], response) if subtype_value: @@ -453,7 +442,7 @@ def _classify(cls, response, objects): return cls flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) try: - return objects[flatten_mapping_type[subtype_value]] + return objects[flatten_mapping_type[subtype_value]] # type: ignore except KeyError: _LOGGER.warning( "Subtype value %s has no mapping, use base class %s.", @@ -482,11 +471,13 @@ def _decode_attribute_map_key(key): inside the received data. :param str key: A key string from the generated code + :returns: The decoded key + :rtype: str """ return key.replace("\\.", ".") -class Serializer(object): +class Serializer: # pylint: disable=too-many-public-methods """Request object model serializer.""" basic_types = {str: "str", int: "int", bool: "bool", float: "float"} @@ -521,7 +512,7 @@ class Serializer(object): "multiple": lambda x, y: x % y != 0, } - def __init__(self, classes=None): + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: self.serialize_type = { "iso-8601": Serializer.serialize_iso, "rfc-1123": Serializer.serialize_rfc, @@ -537,17 +528,20 @@ def __init__(self, classes=None): "[]": self.serialize_iter, "{}": self.serialize_dict, } - self.dependencies = dict(classes) if classes else {} + self.dependencies: Dict[str, type] = dict(classes) if classes else {} self.key_transformer = full_restapi_key_transformer self.client_side_validation = True - def _serialize(self, target_obj, data_type=None, **kwargs): + def _serialize( # pylint: disable=too-many-nested-blocks, too-many-branches, too-many-statements, too-many-locals + self, target_obj, data_type=None, **kwargs + ): """Serialize data into a string according to type. - :param target_obj: The data to be serialized. + :param object target_obj: The data to be serialized. :param str data_type: The type to be serialized from. :rtype: str, dict - :raises: SerializationError if serialization fails. + :raises SerializationError: if serialization fails. + :returns: The serialized data. """ key_transformer = kwargs.get("key_transformer", self.key_transformer) keep_readonly = kwargs.get("keep_readonly", False) @@ -573,12 +567,14 @@ def _serialize(self, target_obj, data_type=None, **kwargs): serialized = {} if is_xml_model_serialization: - serialized = target_obj._create_xml_node() + serialized = target_obj._create_xml_node() # pylint: disable=protected-access try: - attributes = target_obj._attribute_map + attributes = target_obj._attribute_map # pylint: disable=protected-access for attr, attr_desc in attributes.items(): attr_name = attr - if not keep_readonly and target_obj._validation.get(attr_name, {}).get("readonly", False): + if not keep_readonly and target_obj._validation.get( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): continue if attr_name == "additional_properties" and attr_desc["key"] == "": @@ -605,62 +601,63 @@ def _serialize(self, target_obj, data_type=None, **kwargs): if xml_desc.get("attr", False): if xml_ns: ET.register_namespace(xml_prefix, xml_ns) - xml_name = "{}{}".format(xml_ns, xml_name) - serialized.set(xml_name, new_attr) + xml_name = "{{{}}}{}".format(xml_ns, xml_name) + serialized.set(xml_name, new_attr) # type: ignore continue if xml_desc.get("text", False): - serialized.text = new_attr + serialized.text = new_attr # type: ignore continue if isinstance(new_attr, list): - serialized.extend(new_attr) + serialized.extend(new_attr) # type: ignore elif isinstance(new_attr, ET.Element): - # If the down XML has no XML/Name, we MUST replace the tag with the local tag. But keeping the namespaces. + # If the down XML has no XML/Name, + # we MUST replace the tag with the local tag. But keeping the namespaces. if "name" not in getattr(orig_attr, "_xml_map", {}): splitted_tag = new_attr.tag.split("}") if len(splitted_tag) == 2: # Namespace new_attr.tag = "}".join([splitted_tag[0], xml_name]) else: new_attr.tag = xml_name - serialized.append(new_attr) + serialized.append(new_attr) # type: ignore else: # That's a basic type # Integrate namespace if necessary local_node = _create_xml_node(xml_name, xml_prefix, xml_ns) - local_node.text = unicode_str(new_attr) - serialized.append(local_node) + local_node.text = str(new_attr) + serialized.append(local_node) # type: ignore else: # JSON - for k in reversed(keys): - unflattened = {k: new_attr} - new_attr = unflattened + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} _new_attr = new_attr _serialized = serialized - for k in keys: + for k in keys: # type: ignore if k not in _serialized: - _serialized.update(_new_attr) - _new_attr = _new_attr[k] + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore _serialized = _serialized[k] - except ValueError: - continue + except ValueError as err: + if isinstance(err, SerializationError): + raise except (AttributeError, KeyError, TypeError) as err: msg = "Attribute {} in object {} cannot be serialized.\n{}".format(attr_name, class_name, str(target_obj)) - raise_with_traceback(SerializationError, msg, err) - else: - return serialized + raise SerializationError(msg) from err + return serialized def body(self, data, data_type, **kwargs): """Serialize data intended for a request body. - :param data: The data to be serialized. + :param object data: The data to be serialized. :param str data_type: The type to be serialized from. :rtype: dict - :raises: SerializationError if serialization fails. - :raises: ValueError if data is None + :raises SerializationError: if serialization fails. + :raises ValueError: if data is None + :returns: The serialized request body """ # Just in case this is a dict - internal_data_type = data_type.strip("[]{}") - internal_data_type = self.dependencies.get(internal_data_type, None) + internal_data_type_str = data_type.strip("[]{}") + internal_data_type = self.dependencies.get(internal_data_type_str, None) try: is_xml_model_serialization = kwargs["is_xml"] except KeyError: @@ -675,7 +672,7 @@ def body(self, data, data_type, **kwargs): # We're not able to deal with additional properties for now. deserializer.additional_properties_detection = False if is_xml_model_serialization: - deserializer.key_extractors = [ + deserializer.key_extractors = [ # type: ignore attribute_key_case_insensitive_extractor, ] else: @@ -684,20 +681,22 @@ def body(self, data, data_type, **kwargs): attribute_key_case_insensitive_extractor, last_rest_key_case_insensitive_extractor, ] - data = deserializer._deserialize(data_type, data) + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access except DeserializationError as err: - raise_with_traceback(SerializationError, "Unable to build a model: " + str(err), err) + raise SerializationError("Unable to build a model: " + str(err)) from err return self._serialize(data, data_type, **kwargs) def url(self, name, data, data_type, **kwargs): """Serialize data intended for a URL path. - :param data: The data to be serialized. + :param str name: The name of the URL path parameter. + :param object data: The data to be serialized. :param str data_type: The type to be serialized from. :rtype: str - :raises: TypeError if serialization fails. - :raises: ValueError if data is None + :returns: The serialized URL path + :raises TypeError: if serialization fails. + :raises ValueError: if data is None """ try: output = self.serialize_data(data, data_type, **kwargs) @@ -706,30 +705,30 @@ def url(self, name, data, data_type, **kwargs): if kwargs.get("skip_quote") is True: output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) else: output = quote(str(output), safe="") - except SerializationError: - raise TypeError("{} must be type {}.".format(name, data_type)) - else: - return output + except SerializationError as exc: + raise TypeError("{} must be type {}.".format(name, data_type)) from exc + return output def query(self, name, data, data_type, **kwargs): """Serialize data intended for a URL query. - :param data: The data to be serialized. + :param str name: The name of the query parameter. + :param object data: The data to be serialized. :param str data_type: The type to be serialized from. - :rtype: str - :raises: TypeError if serialization fails. - :raises: ValueError if data is None + :rtype: str, list + :raises TypeError: if serialization fails. + :raises ValueError: if data is None + :returns: The serialized query parameter """ try: # Treat the list aside, since we don't want to encode the div separator if data_type.startswith("["): internal_data_type = data_type[1:-1] - data = [self.serialize_data(d, internal_data_type, **kwargs) if d is not None else "" for d in data] - if not kwargs.get("skip_quote", False): - data = [quote(str(d), safe="") for d in data] - return str(self.serialize_iter(data, internal_data_type, **kwargs)) + do_quote = not kwargs.get("skip_quote", False) + return self.serialize_iter(data, internal_data_type, do_quote=do_quote, **kwargs) # Not a list, regular serialization output = self.serialize_data(data, data_type, **kwargs) @@ -739,19 +738,20 @@ def query(self, name, data, data_type, **kwargs): output = str(output) else: output = quote(str(output), safe="") - except SerializationError: - raise TypeError("{} must be type {}.".format(name, data_type)) - else: - return str(output) + except SerializationError as exc: + raise TypeError("{} must be type {}.".format(name, data_type)) from exc + return str(output) def header(self, name, data, data_type, **kwargs): """Serialize data intended for a request header. - :param data: The data to be serialized. + :param str name: The name of the header. + :param object data: The data to be serialized. :param str data_type: The type to be serialized from. :rtype: str - :raises: TypeError if serialization fails. - :raises: ValueError if data is None + :raises TypeError: if serialization fails. + :raises ValueError: if data is None + :returns: The serialized header """ try: if data_type in ["[str]"]: @@ -760,30 +760,31 @@ def header(self, name, data, data_type, **kwargs): output = self.serialize_data(data, data_type, **kwargs) if data_type == "bool": output = json.dumps(output) - except SerializationError: - raise TypeError("{} must be type {}.".format(name, data_type)) - else: - return str(output) + except SerializationError as exc: + raise TypeError("{} must be type {}.".format(name, data_type)) from exc + return str(output) def serialize_data(self, data, data_type, **kwargs): """Serialize generic data according to supplied data type. - :param data: The data to be serialized. + :param object data: The data to be serialized. :param str data_type: The type to be serialized from. - :param bool required: Whether it's essential that the data not be - empty or None - :raises: AttributeError if required data is None. - :raises: ValueError if data is None - :raises: SerializationError if serialization fails. + :raises AttributeError: if required data is None. + :raises ValueError: if data is None + :raises SerializationError: if serialization fails. + :returns: The serialized data. + :rtype: str, int, float, bool, dict, list """ if data is None: raise ValueError("No value for given attribute") try: + if data is CoreNull: + return None if data_type in self.basic_types.values(): return self.serialize_basic(data, data_type, **kwargs) - elif data_type in self.serialize_type: + if data_type in self.serialize_type: return self.serialize_type[data_type](data, **kwargs) # If dependencies is empty, try with current data class @@ -798,12 +799,11 @@ def serialize_data(self, data, data_type, **kwargs): except (ValueError, TypeError) as err: msg = "Unable to serialize value: {!r} as type: {!r}." - raise_with_traceback(SerializationError, msg.format(data, data_type), err) - else: - return self._serialize(data, **kwargs) + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) @classmethod - def _get_custom_serializers(cls, data_type, **kwargs): + def _get_custom_serializers(cls, data_type, **kwargs): # pylint: disable=inconsistent-return-statements custom_serializer = kwargs.get("basic_types_serializers", {}).get(data_type) if custom_serializer: return custom_serializer @@ -819,23 +819,26 @@ def serialize_basic(cls, data, data_type, **kwargs): - basic_types_serializers dict[str, callable] : If set, use the callable as serializer - is_xml bool : If set, use xml_basic_types_serializers - :param data: Object to be serialized. + :param obj data: Object to be serialized. :param str data_type: Type of object in the iterable. + :rtype: str, int, float, bool + :return: serialized object """ custom_serializer = cls._get_custom_serializers(data_type, **kwargs) if custom_serializer: return custom_serializer(data) if data_type == "str": return cls.serialize_unicode(data) - return eval(data_type)(data) # nosec + return eval(data_type)(data) # nosec # pylint: disable=eval-used @classmethod def serialize_unicode(cls, data): """Special handling for serializing unicode strings in Py2. Encode to UTF-8 if unicode, otherwise handle as a str. - :param data: Object to be serialized. + :param str data: Object to be serialized. :rtype: str + :return: serialized object """ try: # If I received an enum, return its value return data.value @@ -843,14 +846,13 @@ def serialize_unicode(cls, data): pass try: - if isinstance(data, unicode): + if isinstance(data, unicode): # type: ignore # Don't change it, JSON and XML ElementTree are totally able # to serialize correctly u'' strings return data except NameError: return str(data) - else: - return str(data) + return str(data) def serialize_iter(self, data, iter_type, div=None, **kwargs): """Serialize iterable. @@ -860,13 +862,13 @@ def serialize_iter(self, data, iter_type, div=None, **kwargs): serialization_ctxt['type'] should be same as data_type. - is_xml bool : If set, serialize as XML - :param list attr: Object to be serialized. + :param list data: Object to be serialized. :param str iter_type: Type of object in the iterable. - :param bool required: Whether the objects in the iterable must - not be None or empty. :param str div: If set, this str will be used to combine the elements in the iterable into a combined string. Default is 'None'. + Defaults to False. :rtype: list, str + :return: serialized iterable """ if isinstance(data, str): raise SerializationError("Refuse str type as a valid iter type.") @@ -878,9 +880,14 @@ def serialize_iter(self, data, iter_type, div=None, **kwargs): for d in data: try: serialized.append(self.serialize_data(d, iter_type, **kwargs)) - except ValueError: + except ValueError as err: + if isinstance(err, SerializationError): + raise serialized.append(None) + if kwargs.get("do_quote", False): + serialized = ["" if s is None else quote(str(s), safe="") for s in serialized] + if div: serialized = ["" if s is None else str(s) for s in serialized] serialized = div.join(serialized) @@ -916,16 +923,17 @@ def serialize_dict(self, attr, dict_type, **kwargs): :param dict attr: Object to be serialized. :param str dict_type: Type of object in the dictionary. - :param bool required: Whether the objects in the dictionary must - not be None or empty. :rtype: dict + :return: serialized dictionary """ serialization_ctxt = kwargs.get("serialization_ctxt", {}) serialized = {} for key, value in attr.items(): try: serialized[self.serialize_unicode(key)] = self.serialize_data(value, dict_type, **kwargs) - except ValueError: + except ValueError as err: + if isinstance(err, SerializationError): + raise serialized[self.serialize_unicode(key)] = None if "xml" in serialization_ctxt: @@ -940,7 +948,7 @@ def serialize_dict(self, attr, dict_type, **kwargs): return serialized - def serialize_object(self, attr, **kwargs): + def serialize_object(self, attr, **kwargs): # pylint: disable=too-many-return-statements """Serialize a generic object. This will be handled as a dictionary. If object passed in is not a basic type (str, int, float, dict, list) it will simply be @@ -948,6 +956,7 @@ def serialize_object(self, attr, **kwargs): :param dict attr: Object to be serialized. :rtype: dict or str + :return: serialized object """ if attr is None: return None @@ -958,7 +967,7 @@ def serialize_object(self, attr, **kwargs): return self.serialize_basic(attr, self.basic_types[obj_type], **kwargs) if obj_type is _long_type: return self.serialize_long(attr) - if obj_type is unicode_str: + if obj_type is str: return self.serialize_unicode(attr) if obj_type is datetime.datetime: return self.serialize_iso(attr) @@ -972,7 +981,7 @@ def serialize_object(self, attr, **kwargs): return self.serialize_decimal(attr) # If it's a model or I know this dependency, serialize as a Model - elif obj_type in self.dependencies.values() or isinstance(attr, Model): + if obj_type in self.dependencies.values() or isinstance(attr, Model): return self._serialize(attr) if obj_type == dict: @@ -1001,58 +1010,63 @@ def serialize_enum(attr, enum_obj=None): except AttributeError: result = attr try: - enum_obj(result) + enum_obj(result) # type: ignore return result - except ValueError: - for enum_value in enum_obj: + except ValueError as exc: + for enum_value in enum_obj: # type: ignore if enum_value.value.lower() == str(attr).lower(): return enum_value.value error = "{!r} is not valid value for enum {!r}" - raise SerializationError(error.format(attr, enum_obj)) + raise SerializationError(error.format(attr, enum_obj)) from exc @staticmethod - def serialize_bytearray(attr, **kwargs): + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument """Serialize bytearray into base-64 string. - :param attr: Object to be serialized. + :param str attr: Object to be serialized. :rtype: str + :return: serialized base64 """ return b64encode(attr).decode() @staticmethod - def serialize_base64(attr, **kwargs): + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument """Serialize str into base-64 string. - :param attr: Object to be serialized. + :param str attr: Object to be serialized. :rtype: str + :return: serialized base64 """ encoded = b64encode(attr).decode("ascii") return encoded.strip("=").replace("+", "-").replace("/", "_") @staticmethod - def serialize_decimal(attr, **kwargs): + def serialize_decimal(attr, **kwargs): # pylint: disable=unused-argument """Serialize Decimal object to float. - :param attr: Object to be serialized. + :param decimal attr: Object to be serialized. :rtype: float + :return: serialized decimal """ return float(attr) @staticmethod - def serialize_long(attr, **kwargs): + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument """Serialize long (Py2) or int (Py3). - :param attr: Object to be serialized. + :param int attr: Object to be serialized. :rtype: int/long + :return: serialized long """ return _long_type(attr) @staticmethod - def serialize_date(attr, **kwargs): + def serialize_date(attr, **kwargs): # pylint: disable=unused-argument """Serialize Date object into ISO-8601 formatted string. :param Date attr: Object to be serialized. :rtype: str + :return: serialized date """ if isinstance(attr, str): attr = isodate.parse_date(attr) @@ -1060,11 +1074,12 @@ def serialize_date(attr, **kwargs): return t @staticmethod - def serialize_time(attr, **kwargs): + def serialize_time(attr, **kwargs): # pylint: disable=unused-argument """Serialize Time object into ISO-8601 formatted string. :param datetime.time attr: Object to be serialized. :rtype: str + :return: serialized time """ if isinstance(attr, str): attr = isodate.parse_time(attr) @@ -1074,30 +1089,32 @@ def serialize_time(attr, **kwargs): return t @staticmethod - def serialize_duration(attr, **kwargs): + def serialize_duration(attr, **kwargs): # pylint: disable=unused-argument """Serialize TimeDelta object into ISO-8601 formatted string. :param TimeDelta attr: Object to be serialized. :rtype: str + :return: serialized duration """ if isinstance(attr, str): attr = isodate.parse_duration(attr) return isodate.duration_isoformat(attr) @staticmethod - def serialize_rfc(attr, **kwargs): + def serialize_rfc(attr, **kwargs): # pylint: disable=unused-argument """Serialize Datetime object into RFC-1123 formatted string. :param Datetime attr: Object to be serialized. :rtype: str - :raises: TypeError if format invalid. + :raises TypeError: if format invalid. + :return: serialized rfc """ try: if not attr.tzinfo: _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") utc = attr.utctimetuple() - except AttributeError: - raise TypeError("RFC1123 object must be valid Datetime object.") + except AttributeError as exc: + raise TypeError("RFC1123 object must be valid Datetime object.") from exc return "{}, {:02} {} {:04} {:02}:{:02}:{:02} GMT".format( Serializer.days[utc.tm_wday], @@ -1110,12 +1127,13 @@ def serialize_rfc(attr, **kwargs): ) @staticmethod - def serialize_iso(attr, **kwargs): + def serialize_iso(attr, **kwargs): # pylint: disable=unused-argument """Serialize Datetime object into ISO-8601 formatted string. :param Datetime attr: Object to be serialized. :rtype: str - :raises: SerializationError if format invalid. + :raises SerializationError: if format invalid. + :return: serialized iso """ if isinstance(attr, str): attr = isodate.parse_datetime(attr) @@ -1135,19 +1153,20 @@ def serialize_iso(attr, **kwargs): return date + microseconds + "Z" except (ValueError, OverflowError) as err: msg = "Unable to serialize datetime object." - raise_with_traceback(SerializationError, msg, err) + raise SerializationError(msg) from err except AttributeError as err: msg = "ISO-8601 object must be valid Datetime object." - raise_with_traceback(TypeError, msg, err) + raise TypeError(msg) from err @staticmethod - def serialize_unix(attr, **kwargs): + def serialize_unix(attr, **kwargs): # pylint: disable=unused-argument """Serialize Datetime object into IntTime format. This is represented as seconds. :param Datetime attr: Object to be serialized. :rtype: int - :raises: SerializationError if format invalid + :raises SerializationError: if format invalid + :return: serialied unix """ if isinstance(attr, int): return attr @@ -1155,16 +1174,17 @@ def serialize_unix(attr, **kwargs): if not attr.tzinfo: _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") return int(calendar.timegm(attr.utctimetuple())) - except AttributeError: - raise TypeError("Unix time object must be valid Datetime object.") + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc -def rest_key_extractor(attr, attr_desc, data): +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument key = attr_desc["key"] working_data = data while "." in key: - dict_keys = _FLATTEN.split(key) + # Need the cast, as for some reasons "split" is typed as list[str | Any] + dict_keys = cast(List[str], _FLATTEN.split(key)) if len(dict_keys) == 1: key = _decode_attribute_map_key(dict_keys[0]) break @@ -1173,14 +1193,15 @@ def rest_key_extractor(attr, attr_desc, data): if working_data is None: # If at any point while following flatten JSON path see None, it means # that all properties under are None as well - # https://github.com/Azure/msrest-for-python/issues/197 return None key = ".".join(dict_keys[1:]) return working_data.get(key) -def rest_key_case_insensitive_extractor(attr, attr_desc, data): +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): key = attr_desc["key"] working_data = data @@ -1194,7 +1215,6 @@ def rest_key_case_insensitive_extractor(attr, attr_desc, data): if working_data is None: # If at any point while following flatten JSON path see None, it means # that all properties under are None as well - # https://github.com/Azure/msrest-for-python/issues/197 return None key = ".".join(dict_keys[1:]) @@ -1202,17 +1222,29 @@ def rest_key_case_insensitive_extractor(attr, attr_desc, data): return attribute_key_case_insensitive_extractor(key, None, working_data) -def last_rest_key_extractor(attr, attr_desc, data): - """Extract the attribute in "data" based on the last part of the JSON path key.""" +def last_rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + """Extract the attribute in "data" based on the last part of the JSON path key. + + :param str attr: The attribute to extract + :param dict attr_desc: The attribute description + :param dict data: The data to extract from + :rtype: object + :returns: The extracted attribute + """ key = attr_desc["key"] dict_keys = _FLATTEN.split(key) return attribute_key_extractor(dict_keys[-1], None, data) -def last_rest_key_case_insensitive_extractor(attr, attr_desc, data): +def last_rest_key_case_insensitive_extractor(attr, attr_desc, data): # pylint: disable=unused-argument """Extract the attribute in "data" based on the last part of the JSON path key. This is the case insensitive version of "last_rest_key_extractor" + :param str attr: The attribute to extract + :param dict attr_desc: The attribute description + :param dict data: The data to extract from + :rtype: object + :returns: The extracted attribute """ key = attr_desc["key"] dict_keys = _FLATTEN.split(key) @@ -1245,11 +1277,11 @@ def _extract_name_from_internal_type(internal_type): xml_name = internal_type_xml_map.get("name", internal_type.__name__) xml_ns = internal_type_xml_map.get("ns", None) if xml_ns: - xml_name = "{}{}".format(xml_ns, xml_name) + xml_name = "{{{}}}{}".format(xml_ns, xml_name) return xml_name -def xml_key_extractor(attr, attr_desc, data): +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements if isinstance(data, dict): return None @@ -1269,7 +1301,7 @@ def xml_key_extractor(attr, attr_desc, data): # Integrate namespace if necessary xml_ns = xml_desc.get("ns", internal_type_xml_map.get("ns", None)) if xml_ns: - xml_name = "{}{}".format(xml_ns, xml_name) + xml_name = "{{{}}}{}".format(xml_ns, xml_name) # If it's an attribute, that's simple if xml_desc.get("attr", False): @@ -1301,22 +1333,21 @@ def xml_key_extractor(attr, attr_desc, data): if is_iter_type: if is_wrapped: return None # is_wrapped no node, we want None - else: - return [] # not wrapped, assume empty list + return [] # not wrapped, assume empty list return None # Assume it's not there, maybe an optional node. # If is_iter_type and not wrapped, return all found children if is_iter_type: if not is_wrapped: return children - else: # Iter and wrapped, should have found one node only (the wrap one) - if len(children) != 1: - raise DeserializationError( - "Tried to deserialize an array not wrapped, and found several nodes '{}'. Maybe you should declare this array as wrapped?".format( - xml_name - ) + # Iter and wrapped, should have found one node only (the wrap one) + if len(children) != 1: + raise DeserializationError( + "Tried to deserialize an array not wrapped, and found several nodes '{}'. Maybe you should declare this array as wrapped?".format( + xml_name ) - return list(children[0]) # Might be empty list and that's ok. + ) + return list(children[0]) # Might be empty list and that's ok. # Here it's not a itertype, we should have found one element only or empty if len(children) > 1: @@ -1324,7 +1355,7 @@ def xml_key_extractor(attr, attr_desc, data): return children[0] -class Deserializer(object): +class Deserializer: """Response object model deserializer. :param dict classes: Class type dictionary for deserializing complex types. @@ -1333,9 +1364,9 @@ class Deserializer(object): basic_types = {str: "str", int: "int", bool: "bool", float: "float"} - valid_date = re.compile(r"\d{4}[-]\d{2}[-]\d{2}T\d{2}:\d{2}:\d{2}" r"\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + valid_date = re.compile(r"\d{4}[-]\d{2}[-]\d{2}T\d{2}:\d{2}:\d{2}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") - def __init__(self, classes=None): + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: self.deserialize_type = { "iso-8601": Deserializer.deserialize_iso, "rfc-1123": Deserializer.deserialize_rfc, @@ -1355,7 +1386,7 @@ def __init__(self, classes=None): "duration": (isodate.Duration, datetime.timedelta), "iso-8601": (datetime.datetime), } - self.dependencies = dict(classes) if classes else {} + self.dependencies: Dict[str, type] = dict(classes) if classes else {} self.key_extractors = [rest_key_extractor, xml_key_extractor] # Additional properties only works if the "rest_key_extractor" is used to # extract the keys. Making it to work whatever the key extractor is too much @@ -1371,27 +1402,29 @@ def __call__(self, target_obj, response_data, content_type=None): :param str target_obj: Target data type to deserialize to. :param requests.Response response_data: REST response object. :param str content_type: Swagger "produces" if available. - :raises: DeserializationError if deserialization fails. + :raises DeserializationError: if deserialization fails. :return: Deserialized object. + :rtype: object """ data = self._unpack_content(response_data, content_type) return self._deserialize(target_obj, data) - def _deserialize(self, target_obj, data): + def _deserialize(self, target_obj, data): # pylint: disable=inconsistent-return-statements """Call the deserializer on a model. Data needs to be already deserialized as JSON or XML ElementTree :param str target_obj: Target data type to deserialize to. :param object data: Object to deserialize. - :raises: DeserializationError if deserialization fails. + :raises DeserializationError: if deserialization fails. :return: Deserialized object. + :rtype: object """ # This is already a model, go recursive just in case if hasattr(data, "_attribute_map"): constants = [name for name, config in getattr(data, "_validation", {}).items() if config.get("constant")] try: - for attr, mapconfig in data._attribute_map.items(): + for attr, mapconfig in data._attribute_map.items(): # pylint: disable=protected-access if attr in constants: continue value = getattr(data, attr) @@ -1408,15 +1441,15 @@ def _deserialize(self, target_obj, data): response, class_name = self._classify_target(target_obj, data) - if isinstance(response, basestring): + if isinstance(response, str): return self.deserialize_data(data, response) - elif isinstance(response, type) and issubclass(response, Enum): + if isinstance(response, type) and issubclass(response, Enum): return self.deserialize_enum(data, response) - if data is None: + if data is None or data is CoreNull: return data try: - attributes = response._attribute_map + attributes = response._attribute_map # type: ignore # pylint: disable=protected-access d_attrs = {} for attr, attr_desc in attributes.items(): # Check empty string. If it's not empty, someone has a real "additionalProperties"... @@ -1444,11 +1477,10 @@ def _deserialize(self, target_obj, data): value = self.deserialize_data(raw_value, attr_desc["type"]) d_attrs[attr] = value except (AttributeError, TypeError, KeyError) as err: - msg = "Unable to deserialize to object: " + class_name - raise_with_traceback(DeserializationError, msg, err) - else: - additional_properties = self._build_additional_properties(attributes, data) - return self._instantiate_model(response, d_attrs, additional_properties) + msg = "Unable to deserialize to object: " + class_name # type: ignore + raise DeserializationError(msg) from err + additional_properties = self._build_additional_properties(attributes, data) + return self._instantiate_model(response, d_attrs, additional_properties) def _build_additional_properties(self, attribute_map, data): if not self.additional_properties_detection: @@ -1474,22 +1506,24 @@ def _classify_target(self, target, data): Once classification has been determined, initialize object. :param str target: The target object type to deserialize to. - :param str/dict data: The response data to deseralize. + :param str/dict data: The response data to deserialize. + :return: The classified target object and its class name. + :rtype: tuple """ if target is None: return None, None - if isinstance(target, basestring): + if isinstance(target, str): try: target = self.dependencies[target] except KeyError: return target, target try: - target = target._classify(data, self.dependencies) + target = target._classify(data, self.dependencies) # type: ignore # pylint: disable=protected-access except AttributeError: pass # Target is not a Model, no classify - return target, target.__class__.__name__ + return target, target.__class__.__name__ # type: ignore def failsafe_deserialize(self, target_obj, data, content_type=None): """Ignores any errors encountered in deserialization, @@ -1499,12 +1533,14 @@ def failsafe_deserialize(self, target_obj, data, content_type=None): a deserialization error. :param str target_obj: The target object type to deserialize to. - :param str/dict data: The response data to deseralize. + :param str/dict data: The response data to deserialize. :param str content_type: Swagger "produces" if available. + :return: Deserialized object. + :rtype: object """ try: return self(target_obj, data, content_type=content_type) - except: + except: # pylint: disable=bare-except _LOGGER.debug( "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True ) @@ -1522,10 +1558,12 @@ def _unpack_content(raw_data, content_type=None): If raw_data is something else, bypass all logic and return it directly. - :param raw_data: Data to be processed. - :param content_type: How to parse if raw_data is a string/bytes. + :param obj raw_data: Data to be processed. + :param str content_type: How to parse if raw_data is a string/bytes. :raises JSONDecodeError: If JSON is requested and parsing is impossible. :raises UnicodeDecodeError: If bytes is not UTF8 + :rtype: object + :return: Unpacked content. """ # Assume this is enough to detect a Pipeline Response without importing it context = getattr(raw_data, "context", {}) @@ -1542,31 +1580,42 @@ def _unpack_content(raw_data, content_type=None): if hasattr(raw_data, "_content_consumed"): return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) - if isinstance(raw_data, (basestring, bytes)) or hasattr(raw_data, "read"): - return RawDeserializer.deserialize_from_text(raw_data, content_type) + if isinstance(raw_data, (str, bytes)) or hasattr(raw_data, "read"): + return RawDeserializer.deserialize_from_text(raw_data, content_type) # type: ignore return raw_data def _instantiate_model(self, response, attrs, additional_properties=None): """Instantiate a response model passing in deserialized args. - :param response: The response model class. - :param d_attrs: The deserialized response attributes. + :param Response response: The response model class. + :param dict attrs: The deserialized response attributes. + :param dict additional_properties: Additional properties to be set. + :rtype: Response + :return: The instantiated response model. """ if callable(response): subtype = getattr(response, "_subtype_map", {}) try: - readonly = [k for k, v in response._validation.items() if v.get("readonly")] - const = [k for k, v in response._validation.items() if v.get("constant")] + readonly = [ + k + for k, v in response._validation.items() # pylint: disable=protected-access # type: ignore + if v.get("readonly") + ] + const = [ + k + for k, v in response._validation.items() # pylint: disable=protected-access # type: ignore + if v.get("constant") + ] kwargs = {k: v for k, v in attrs.items() if k not in subtype and k not in readonly + const} response_obj = response(**kwargs) for attr in readonly: setattr(response_obj, attr, attrs.get(attr)) if additional_properties: - response_obj.additional_properties = additional_properties + response_obj.additional_properties = additional_properties # type: ignore return response_obj except TypeError as err: - msg = "Unable to deserialize {} into model {}. ".format(kwargs, response) - raise DeserializationError(msg + str(err)) + msg = "Unable to deserialize {} into model {}. ".format(kwargs, response) # type: ignore + raise DeserializationError(msg + str(err)) from err else: try: for attr, value in attrs.items(): @@ -1575,15 +1624,16 @@ def _instantiate_model(self, response, attrs, additional_properties=None): except Exception as exp: msg = "Unable to populate response model. " msg += "Type: {}, Error: {}".format(type(response), exp) - raise DeserializationError(msg) + raise DeserializationError(msg) from exp - def deserialize_data(self, data, data_type): + def deserialize_data(self, data, data_type): # pylint: disable=too-many-return-statements """Process data for deserialization according to data type. :param str data: The response string to be deserialized. :param str data_type: The type to deserialize to. - :raises: DeserializationError if deserialization fails. + :raises DeserializationError: if deserialization fails. :return: Deserialized object. + :rtype: object """ if data is None: return data @@ -1597,7 +1647,11 @@ def deserialize_data(self, data, data_type): if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): return data - is_a_text_parsing_type = lambda x: x not in ["object", "[]", r"{}"] + is_a_text_parsing_type = lambda x: x not in [ # pylint: disable=unnecessary-lambda-assignment + "object", + "[]", + r"{}", + ] if isinstance(data, ET.Element) and is_a_text_parsing_type(data_type) and not data.text: return None data_val = self.deserialize_type[data_type](data) @@ -1616,15 +1670,15 @@ def deserialize_data(self, data, data_type): except (ValueError, TypeError, AttributeError) as err: msg = "Unable to deserialize response data." msg += " Data: {}, {}".format(data, data_type) - raise_with_traceback(DeserializationError, msg, err) - else: - return self._deserialize(obj_type, data) + raise DeserializationError(msg) from err + return self._deserialize(obj_type, data) def deserialize_iter(self, attr, iter_type): """Deserialize an iterable. :param list attr: Iterable to be deserialized. :param str iter_type: The type of object in the iterable. + :return: Deserialized iterable. :rtype: list """ if attr is None: @@ -1641,6 +1695,7 @@ def deserialize_dict(self, attr, dict_type): :param dict/list attr: Dictionary to be deserialized. Also accepts a list of key, value pairs. :param str dict_type: The object type of the items in the dictionary. + :return: Deserialized dictionary. :rtype: dict """ if isinstance(attr, list): @@ -1651,20 +1706,21 @@ def deserialize_dict(self, attr, dict_type): attr = {el.tag: el.text for el in attr} return {k: self.deserialize_data(v, dict_type) for k, v in attr.items()} - def deserialize_object(self, attr, **kwargs): + def deserialize_object(self, attr, **kwargs): # pylint: disable=too-many-return-statements """Deserialize a generic object. This will be handled as a dictionary. :param dict attr: Dictionary to be deserialized. + :return: Deserialized object. :rtype: dict - :raises: TypeError if non-builtin datatype encountered. + :raises TypeError: if non-builtin datatype encountered. """ if attr is None: return None if isinstance(attr, ET.Element): # Do no recurse on XML, just return the tree as-is return attr - if isinstance(attr, basestring): + if isinstance(attr, str): return self.deserialize_basic(attr, "str") obj_type = type(attr) if obj_type in self.basic_types: @@ -1690,11 +1746,10 @@ def deserialize_object(self, attr, **kwargs): pass return deserialized - else: - error = "Cannot deserialize generic object with type: " - raise TypeError(error + str(obj_type)) + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_type)) - def deserialize_basic(self, attr, data_type): + def deserialize_basic(self, attr, data_type): # pylint: disable=too-many-return-statements """Deserialize basic builtin data type from string. Will attempt to convert to str, int, float and bool. This function will also accept '1', '0', 'true' and 'false' as @@ -1702,8 +1757,9 @@ def deserialize_basic(self, attr, data_type): :param str attr: response string to be deserialized. :param str data_type: deserialization data type. + :return: Deserialized basic type. :rtype: str, int, float or bool - :raises: TypeError if string format is not valid. + :raises TypeError: if string format is not valid. """ # If we're here, data is supposed to be a basic type. # If it's still an XML node, take the text @@ -1713,24 +1769,23 @@ def deserialize_basic(self, attr, data_type): if data_type == "str": # None or '', node is empty string. return "" - else: - # None or '', node with a strong type is None. - # Don't try to model "empty bool" or "empty int" - return None + # None or '', node with a strong type is None. + # Don't try to model "empty bool" or "empty int" + return None if data_type == "bool": if attr in [True, False, 1, 0]: return bool(attr) - elif isinstance(attr, basestring): + if isinstance(attr, str): if attr.lower() in ["true", "1"]: return True - elif attr.lower() in ["false", "0"]: + if attr.lower() in ["false", "0"]: return False raise TypeError("Invalid boolean value: {}".format(attr)) if data_type == "str": return self.deserialize_unicode(attr) - return eval(data_type)(attr) # nosec + return eval(data_type)(attr) # nosec # pylint: disable=eval-used @staticmethod def deserialize_unicode(data): @@ -1738,6 +1793,7 @@ def deserialize_unicode(data): as a string. :param str data: response string to be deserialized. + :return: Deserialized string. :rtype: str or unicode """ # We might be here because we have an enum modeled as string, @@ -1747,12 +1803,11 @@ def deserialize_unicode(data): # Consider this is real string try: - if isinstance(data, unicode): + if isinstance(data, unicode): # type: ignore return data except NameError: return str(data) - else: - return str(data) + return str(data) @staticmethod def deserialize_enum(data, enum_obj): @@ -1764,6 +1819,7 @@ def deserialize_enum(data, enum_obj): :param str data: Response string to be deserialized. If this value is None or invalid it will be returned as-is. :param Enum enum_obj: Enum object to deserialize to. + :return: Deserialized enum object. :rtype: Enum """ if isinstance(data, enum_obj) or data is None: @@ -1772,12 +1828,11 @@ def deserialize_enum(data, enum_obj): data = data.value if isinstance(data, int): # Workaround. We might consider remove it in the future. - # https://github.com/Azure/azure-rest-api-specs/issues/141 try: return list(enum_obj.__members__.values())[data] - except IndexError: + except IndexError as exc: error = "{!r} is not a valid index for enum {!r}" - raise DeserializationError(error.format(data, enum_obj)) + raise DeserializationError(error.format(data, enum_obj)) from exc try: return enum_obj(str(data)) except ValueError: @@ -1793,25 +1848,27 @@ def deserialize_bytearray(attr): """Deserialize string into bytearray. :param str attr: response string to be deserialized. + :return: Deserialized bytearray :rtype: bytearray - :raises: TypeError if string format invalid. + :raises TypeError: if string format invalid. """ if isinstance(attr, ET.Element): attr = attr.text - return bytearray(b64decode(attr)) + return bytearray(b64decode(attr)) # type: ignore @staticmethod def deserialize_base64(attr): """Deserialize base64 encoded string into string. :param str attr: response string to be deserialized. + :return: Deserialized base64 string :rtype: bytearray - :raises: TypeError if string format invalid. + :raises TypeError: if string format invalid. """ if isinstance(attr, ET.Element): attr = attr.text - padding = "=" * (3 - (len(attr) + 3) % 4) - attr = attr + padding + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore encoded = attr.replace("-", "+").replace("_", "/") return b64decode(encoded) @@ -1820,36 +1877,39 @@ def deserialize_decimal(attr): """Deserialize string into Decimal object. :param str attr: response string to be deserialized. - :rtype: Decimal - :raises: DeserializationError if string format invalid. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal """ if isinstance(attr, ET.Element): attr = attr.text try: - return decimal.Decimal(attr) + return decimal.Decimal(str(attr)) # type: ignore except decimal.DecimalException as err: msg = "Invalid decimal {}".format(attr) - raise_with_traceback(DeserializationError, msg, err) + raise DeserializationError(msg) from err @staticmethod def deserialize_long(attr): """Deserialize string into long (Py2) or int (Py3). :param str attr: response string to be deserialized. + :return: Deserialized int :rtype: long or int - :raises: ValueError if string format invalid. + :raises ValueError: if string format invalid. """ if isinstance(attr, ET.Element): attr = attr.text - return _long_type(attr) + return _long_type(attr) # type: ignore @staticmethod def deserialize_duration(attr): """Deserialize ISO-8601 formatted string into TimeDelta object. :param str attr: response string to be deserialized. + :return: Deserialized duration :rtype: TimeDelta - :raises: DeserializationError if string format invalid. + :raises DeserializationError: if string format invalid. """ if isinstance(attr, ET.Element): attr = attr.text @@ -1857,36 +1917,37 @@ def deserialize_duration(attr): duration = isodate.parse_duration(attr) except (ValueError, OverflowError, AttributeError) as err: msg = "Cannot deserialize duration object." - raise_with_traceback(DeserializationError, msg, err) - else: - return duration + raise DeserializationError(msg) from err + return duration @staticmethod def deserialize_date(attr): """Deserialize ISO-8601 formatted string into Date object. :param str attr: response string to be deserialized. + :return: Deserialized date :rtype: Date - :raises: DeserializationError if string format invalid. + :raises DeserializationError: if string format invalid. """ if isinstance(attr, ET.Element): attr = attr.text - if re.search(r"[^\W\d_]", attr, re.I + re.U): + if re.search(r"[^\W\d_]", attr, re.I + re.U): # type: ignore raise DeserializationError("Date must have only digits and -. Received: %s" % attr) # This must NOT use defaultmonth/defaultday. Using None ensure this raises an exception. - return isodate.parse_date(attr, defaultmonth=None, defaultday=None) + return isodate.parse_date(attr, defaultmonth=0, defaultday=0) @staticmethod def deserialize_time(attr): """Deserialize ISO-8601 formatted string into time object. :param str attr: response string to be deserialized. + :return: Deserialized time :rtype: datetime.time - :raises: DeserializationError if string format invalid. + :raises DeserializationError: if string format invalid. """ if isinstance(attr, ET.Element): attr = attr.text - if re.search(r"[^\W\d_]", attr, re.I + re.U): + if re.search(r"[^\W\d_]", attr, re.I + re.U): # type: ignore raise DeserializationError("Date must have only digits and -. Received: %s" % attr) return isodate.parse_time(attr) @@ -1895,36 +1956,37 @@ def deserialize_rfc(attr): """Deserialize RFC-1123 formatted string into Datetime object. :param str attr: response string to be deserialized. + :return: Deserialized RFC datetime :rtype: Datetime - :raises: DeserializationError if string format invalid. + :raises DeserializationError: if string format invalid. """ if isinstance(attr, ET.Element): attr = attr.text try: - parsed_date = email.utils.parsedate_tz(attr) + parsed_date = email.utils.parsedate_tz(attr) # type: ignore date_obj = datetime.datetime( - *parsed_date[:6], tzinfo=_FixedOffset(datetime.timedelta(minutes=(parsed_date[9] or 0) / 60)) + *parsed_date[:6], tzinfo=datetime.timezone(datetime.timedelta(minutes=(parsed_date[9] or 0) / 60)) ) if not date_obj.tzinfo: date_obj = date_obj.astimezone(tz=TZ_UTC) except ValueError as err: msg = "Cannot deserialize to rfc datetime object." - raise_with_traceback(DeserializationError, msg, err) - else: - return date_obj + raise DeserializationError(msg) from err + return date_obj @staticmethod def deserialize_iso(attr): """Deserialize ISO-8601 formatted string into Datetime object. :param str attr: response string to be deserialized. + :return: Deserialized ISO datetime :rtype: Datetime - :raises: DeserializationError if string format invalid. + :raises DeserializationError: if string format invalid. """ if isinstance(attr, ET.Element): attr = attr.text try: - attr = attr.upper() + attr = attr.upper() # type: ignore match = Deserializer.valid_date.match(attr) if not match: raise ValueError("Invalid datetime string: " + attr) @@ -1946,9 +2008,8 @@ def deserialize_iso(attr): raise OverflowError("Hit max or min date") except (ValueError, OverflowError, AttributeError) as err: msg = "Cannot deserialize datetime object." - raise_with_traceback(DeserializationError, msg, err) - else: - return date_obj + raise DeserializationError(msg) from err + return date_obj @staticmethod def deserialize_unix(attr): @@ -1956,15 +2017,16 @@ def deserialize_unix(attr): This is represented as seconds. :param int attr: Object to be serialized. + :return: Deserialized datetime :rtype: Datetime - :raises: DeserializationError if format invalid + :raises DeserializationError: if format invalid """ if isinstance(attr, ET.Element): - attr = int(attr.text) + attr = int(attr.text) # type: ignore try: + attr = int(attr) date_obj = datetime.datetime.fromtimestamp(attr, TZ_UTC) except ValueError as err: msg = "Cannot deserialize to unix datetime object." - raise_with_traceback(DeserializationError, msg, err) - else: - return date_obj + raise DeserializationError(msg) from err + return date_obj diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/utils.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/utils.py new file mode 100644 index 000000000000..39b612f39a9b --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_utils/utils.py @@ -0,0 +1,25 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from abc import ABC +from typing import Generic, TYPE_CHECKING, TypeVar + +if TYPE_CHECKING: + from .serialization import Deserializer, Serializer + + +TClient = TypeVar("TClient") +TConfig = TypeVar("TConfig") + + +class ClientMixinABC(ABC, Generic[TClient, TConfig]): + """DO NOT use this class. It is for internal typing use only.""" + + _client: TClient + _config: TConfig + _serialize: "Serializer" + _deserialize: "Deserializer" diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_vendor.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_vendor.py deleted file mode 100644 index 9aad73fc743e..000000000000 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_vendor.py +++ /dev/null @@ -1,27 +0,0 @@ -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from azure.core.pipeline.transport import HttpRequest - - -def _convert_request(request, files=None): - data = request.content if not files else None - request = HttpRequest(method=request.method, url=request.url, headers=request.headers, data=data) - if files: - request.set_formdata_body(files) - return request - - -def _format_url_section(template, **kwargs): - components = template.split("/") - while components: - try: - return template.format(**kwargs) - except KeyError as key: - formatted_components = template.split("/") - components = [c for c in formatted_components if "{}".format(key.args[0]) not in c] - template = "/".join(components) diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_version.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_version.py index 79aaa33e5e04..1b3a42bc5995 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_version.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "10.0.0b1" +VERSION = "10.0.0b2" diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/__init__.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/__init__.py index 852c7d03af10..480f91c81d30 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/__init__.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/__init__.py @@ -5,12 +5,18 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position -from ._advisor_management_client import AdvisorManagementClient +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + +from ._advisor_management_client import AdvisorManagementClient # type: ignore try: from ._patch import __all__ as _patch_all - from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import + from ._patch import * except ImportError: _patch_all = [] from ._patch import patch_sdk as _patch_sdk @@ -18,6 +24,6 @@ __all__ = [ "AdvisorManagementClient", ] -__all__.extend([p for p in _patch_all if p not in __all__]) +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/_advisor_management_client.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/_advisor_management_client.py index b77510adcd45..9509531a523d 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/_advisor_management_client.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/_advisor_management_client.py @@ -7,28 +7,40 @@ # -------------------------------------------------------------------------- from copy import deepcopy -from typing import Any, Awaitable, TYPE_CHECKING +from typing import Any, Awaitable, Optional, TYPE_CHECKING, cast +from typing_extensions import Self +from azure.core.pipeline import policies from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.settings import settings from azure.mgmt.core import AsyncARMPipelineClient +from azure.mgmt.core.policies import AsyncARMAutoResourceProviderRegistrationPolicy +from azure.mgmt.core.tools import get_arm_endpoints -from .. import models -from .._serialization import Deserializer, Serializer +from .. import models as _models +from .._utils.serialization import Deserializer, Serializer from ._configuration import AdvisorManagementClientConfiguration from .operations import ( + AdvisorManagementClientOperationsMixin, + AdvisorScoresOperations, + AssessmentTypesOperations, + AssessmentsOperations, ConfigurationsOperations, Operations, RecommendationMetadataOperations, RecommendationsOperations, + ResiliencyReviewsOperations, SuppressionsOperations, + TriageRecommendationsOperations, + TriageResourcesOperations, + WorkloadsOperations, ) if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports from azure.core.credentials_async import AsyncTokenCredential -class AdvisorManagementClient: # pylint: disable=client-accepts-api-version-keyword +class AdvisorManagementClient(AdvisorManagementClientOperationsMixin): # pylint: disable=too-many-instance-attributes """REST APIs for Azure Advisor. :ivar recommendation_metadata: RecommendationMetadataOperations operations @@ -42,30 +54,67 @@ class AdvisorManagementClient: # pylint: disable=client-accepts-api-version-key :vartype operations: azure.mgmt.advisor.aio.operations.Operations :ivar suppressions: SuppressionsOperations operations :vartype suppressions: azure.mgmt.advisor.aio.operations.SuppressionsOperations + :ivar advisor_scores: AdvisorScoresOperations operations + :vartype advisor_scores: azure.mgmt.advisor.aio.operations.AdvisorScoresOperations + :ivar assessments: AssessmentsOperations operations + :vartype assessments: azure.mgmt.advisor.aio.operations.AssessmentsOperations + :ivar assessment_types: AssessmentTypesOperations operations + :vartype assessment_types: azure.mgmt.advisor.aio.operations.AssessmentTypesOperations + :ivar workloads: WorkloadsOperations operations + :vartype workloads: azure.mgmt.advisor.aio.operations.WorkloadsOperations + :ivar resiliency_reviews: ResiliencyReviewsOperations operations + :vartype resiliency_reviews: azure.mgmt.advisor.aio.operations.ResiliencyReviewsOperations + :ivar triage_recommendations: TriageRecommendationsOperations operations + :vartype triage_recommendations: + azure.mgmt.advisor.aio.operations.TriageRecommendationsOperations + :ivar triage_resources: TriageResourcesOperations operations + :vartype triage_resources: azure.mgmt.advisor.aio.operations.TriageResourcesOperations :param credential: Credential needed for the client to connect to Azure. Required. :type credential: ~azure.core.credentials_async.AsyncTokenCredential :param subscription_id: The Azure subscription ID. Required. :type subscription_id: str - :param base_url: Service URL. Default value is "https://management.azure.com". + :param base_url: Service URL. Default value is None. :type base_url: str - :keyword api_version: Api Version. Default value is "2020-01-01". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: Api Version. Default value is "2024-11-18-preview". Note that overriding + this default value may result in unsupported behavior. :paramtype api_version: str """ def __init__( - self, - credential: "AsyncTokenCredential", - subscription_id: str, - base_url: str = "https://management.azure.com", - **kwargs: Any + self, credential: "AsyncTokenCredential", subscription_id: str, base_url: Optional[str] = None, **kwargs: Any ) -> None: + _cloud = kwargs.pop("cloud_setting", None) or settings.current.azure_cloud # type: ignore + _endpoints = get_arm_endpoints(_cloud) + if not base_url: + base_url = _endpoints["resource_manager"] + credential_scopes = kwargs.pop("credential_scopes", _endpoints["credential_scopes"]) self._config = AdvisorManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) - self._client = AsyncARMPipelineClient(base_url=base_url, config=self._config, **kwargs) - client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + AsyncARMAutoResourceProviderRegistrationPolicy(), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncARMPipelineClient = AsyncARMPipelineClient( + base_url=cast(str, base_url), policies=_policies, **kwargs + ) + + client_models = {k: v for k, v in _models.__dict__.items() if isinstance(v, type)} self._serialize = Serializer(client_models) self._deserialize = Deserializer(client_models) self._serialize.client_side_validation = False @@ -76,8 +125,25 @@ def __init__( self.recommendations = RecommendationsOperations(self._client, self._config, self._serialize, self._deserialize) self.operations = Operations(self._client, self._config, self._serialize, self._deserialize) self.suppressions = SuppressionsOperations(self._client, self._config, self._serialize, self._deserialize) + self.advisor_scores = AdvisorScoresOperations(self._client, self._config, self._serialize, self._deserialize) + self.assessments = AssessmentsOperations(self._client, self._config, self._serialize, self._deserialize) + self.assessment_types = AssessmentTypesOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.workloads = WorkloadsOperations(self._client, self._config, self._serialize, self._deserialize) + self.resiliency_reviews = ResiliencyReviewsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.triage_recommendations = TriageRecommendationsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.triage_resources = TriageResourcesOperations( + self._client, self._config, self._serialize, self._deserialize + ) - def _send_request(self, request: HttpRequest, **kwargs: Any) -> Awaitable[AsyncHttpResponse]: + def _send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: """Runs the network request through the client's chained policies. >>> from azure.core.rest import HttpRequest @@ -97,14 +163,14 @@ def _send_request(self, request: HttpRequest, **kwargs: Any) -> Awaitable[AsyncH request_copy = deepcopy(request) request_copy.url = self._client.format_url(request_copy.url) - return self._client.send_request(request_copy, **kwargs) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore async def close(self) -> None: await self._client.close() - async def __aenter__(self) -> "AdvisorManagementClient": + async def __aenter__(self) -> Self: await self._client.__aenter__() return self - async def __aexit__(self, *exc_details) -> None: + async def __aexit__(self, *exc_details: Any) -> None: await self._client.__aexit__(*exc_details) diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/_configuration.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/_configuration.py index cdd2501f72d3..8db7a1142f85 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/_configuration.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/_configuration.py @@ -6,26 +6,18 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys from typing import Any, TYPE_CHECKING -from azure.core.configuration import Configuration from azure.core.pipeline import policies from azure.mgmt.core.policies import ARMHttpLoggingPolicy, AsyncARMChallengeAuthenticationPolicy from .._version import VERSION -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports - if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports from azure.core.credentials_async import AsyncTokenCredential -class AdvisorManagementClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes +class AdvisorManagementClientConfiguration: # pylint: disable=too-many-instance-attributes """Configuration for AdvisorManagementClient. Note that all parameters used to create this instance are saved as instance @@ -35,14 +27,13 @@ class AdvisorManagementClientConfiguration(Configuration): # pylint: disable=to :type credential: ~azure.core.credentials_async.AsyncTokenCredential :param subscription_id: The Azure subscription ID. Required. :type subscription_id: str - :keyword api_version: Api Version. Default value is "2020-01-01". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: Api Version. Default value is "2024-11-18-preview". Note that overriding + this default value may result in unsupported behavior. :paramtype api_version: str """ def __init__(self, credential: "AsyncTokenCredential", subscription_id: str, **kwargs: Any) -> None: - super(AdvisorManagementClientConfiguration, self).__init__(**kwargs) - api_version = kwargs.pop("api_version", "2020-01-01") # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", "2024-11-18-preview") if credential is None: raise ValueError("Parameter 'credential' must not be None.") @@ -54,6 +45,7 @@ def __init__(self, credential: "AsyncTokenCredential", subscription_id: str, **k self.api_version = api_version self.credential_scopes = kwargs.pop("credential_scopes", ["https://management.azure.com/.default"]) kwargs.setdefault("sdk_moniker", "mgmt-advisor/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) self._configure(**kwargs) def _configure(self, **kwargs: Any) -> None: @@ -62,9 +54,9 @@ def _configure(self, **kwargs: Any) -> None: self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) self.http_logging_policy = kwargs.get("http_logging_policy") or ARMHttpLoggingPolicy(**kwargs) - self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) self.authentication_policy = kwargs.get("authentication_policy") if self.credential and not self.authentication_policy: self.authentication_policy = AsyncARMChallengeAuthenticationPolicy( diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/__init__.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/__init__.py index f1f93e70a274..b473aac1d2ed 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/__init__.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/__init__.py @@ -5,15 +5,29 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position -from ._recommendation_metadata_operations import RecommendationMetadataOperations -from ._configurations_operations import ConfigurationsOperations -from ._recommendations_operations import RecommendationsOperations -from ._operations import Operations -from ._suppressions_operations import SuppressionsOperations +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + +from ._recommendation_metadata_operations import RecommendationMetadataOperations # type: ignore +from ._configurations_operations import ConfigurationsOperations # type: ignore +from ._recommendations_operations import RecommendationsOperations # type: ignore +from ._operations import Operations # type: ignore +from ._suppressions_operations import SuppressionsOperations # type: ignore +from ._advisor_management_client_operations import AdvisorManagementClientOperationsMixin # type: ignore +from ._advisor_scores_operations import AdvisorScoresOperations # type: ignore +from ._assessments_operations import AssessmentsOperations # type: ignore +from ._assessment_types_operations import AssessmentTypesOperations # type: ignore +from ._workloads_operations import WorkloadsOperations # type: ignore +from ._resiliency_reviews_operations import ResiliencyReviewsOperations # type: ignore +from ._triage_recommendations_operations import TriageRecommendationsOperations # type: ignore +from ._triage_resources_operations import TriageResourcesOperations # type: ignore from ._patch import __all__ as _patch_all -from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import * from ._patch import patch_sdk as _patch_sdk __all__ = [ @@ -22,6 +36,14 @@ "RecommendationsOperations", "Operations", "SuppressionsOperations", + "AdvisorManagementClientOperationsMixin", + "AdvisorScoresOperations", + "AssessmentsOperations", + "AssessmentTypesOperations", + "WorkloadsOperations", + "ResiliencyReviewsOperations", + "TriageRecommendationsOperations", + "TriageResourcesOperations", ] -__all__.extend([p for p in _patch_all if p not in __all__]) +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_advisor_management_client_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_advisor_management_client_operations.py new file mode 100644 index 000000000000..739f88e97d30 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_advisor_management_client_operations.py @@ -0,0 +1,141 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from io import IOBase +from typing import Any, Callable, Dict, IO, Optional, TypeVar, Union, overload + +from azure.core import AsyncPipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._utils.utils import ClientMixinABC +from ...operations._advisor_management_client_operations import build_predict_request +from .._configuration import AdvisorManagementClientConfiguration + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + + +class AdvisorManagementClientOperationsMixin(ClientMixinABC[AsyncPipelineClient, AdvisorManagementClientConfiguration]): + + @overload + async def predict( + self, prediction_request: _models.PredictionRequest, *, content_type: str = "application/json", **kwargs: Any + ) -> _models.PredictionResponse: + """Predicts a recommendation. + + Predicts a recommendation. + + :param prediction_request: Parameters for predict recommendation. Required. + :type prediction_request: ~azure.mgmt.advisor.models.PredictionRequest + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: PredictionResponse or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.PredictionResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def predict( + self, prediction_request: IO[bytes], *, content_type: str = "application/json", **kwargs: Any + ) -> _models.PredictionResponse: + """Predicts a recommendation. + + Predicts a recommendation. + + :param prediction_request: Parameters for predict recommendation. Required. + :type prediction_request: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: PredictionResponse or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.PredictionResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + async def predict( + self, prediction_request: Union[_models.PredictionRequest, IO[bytes]], **kwargs: Any + ) -> _models.PredictionResponse: + """Predicts a recommendation. + + Predicts a recommendation. + + :param prediction_request: Parameters for predict recommendation. Is either a PredictionRequest + type or a IO[bytes] type. Required. + :type prediction_request: ~azure.mgmt.advisor.models.PredictionRequest or IO[bytes] + :return: PredictionResponse or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.PredictionResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.PredictionResponse] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _json = None + _content = None + if isinstance(prediction_request, (IOBase, bytes)): + _content = prediction_request + else: + _json = self._serialize.body(prediction_request, "PredictionRequest") + + _request = build_predict_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + content_type=content_type, + json=_json, + content=_content, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("PredictionResponse", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_advisor_scores_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_advisor_scores_operations.py new file mode 100644 index 000000000000..b41962bb7aba --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_advisor_scores_operations.py @@ -0,0 +1,153 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from typing import Any, Callable, Dict, Optional, TypeVar + +from azure.core import AsyncPipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer +from ...operations._advisor_scores_operations import build_get_request, build_list_request +from .._configuration import AdvisorManagementClientConfiguration + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + + +class AdvisorScoresOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.aio.AdvisorManagementClient`'s + :attr:`advisor_scores` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace_async + async def list(self, **kwargs: Any) -> _models.AdvisorScoreResponse: + """Gets the list of advisor scores. + + :return: AdvisorScoreResponse or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AdvisorScoreResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.AdvisorScoreResponse] = kwargs.pop("cls", None) + + _request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("AdvisorScoreResponse", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get(self, name: str, **kwargs: Any) -> _models.AdvisorScoreEntity: + """Gets the advisor score. + + :param name: The scope of Advisor score entity. Required. + :type name: str + :return: AdvisorScoreEntity or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AdvisorScoreEntity + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.AdvisorScoreEntity] = kwargs.pop("cls", None) + + _request = build_get_request( + name=name, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("AdvisorScoreEntity", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_assessment_types_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_assessment_types_operations.py new file mode 100644 index 000000000000..d0840667f495 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_assessment_types_operations.py @@ -0,0 +1,133 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar +import urllib.parse + +from azure.core import AsyncPipelineClient +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer +from ...operations._assessment_types_operations import build_list_request +from .._configuration import AdvisorManagementClientConfiguration + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + + +class AssessmentTypesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.aio.AdvisorManagementClient`'s + :attr:`assessment_types` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list(self, **kwargs: Any) -> AsyncIterable["_models.AssessmentTypeResult"]: + """Get assessment types list. + + Get list of Azure Advisor assessment types. + + :return: An iterator like instance of either AssessmentTypeResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.AssessmentTypeResult] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.AssessmentTypeListResult] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("AssessmentTypeListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_assessments_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_assessments_operations.py new file mode 100644 index 000000000000..616cc2ea391e --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_assessments_operations.py @@ -0,0 +1,372 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from io import IOBase +from typing import Any, AsyncIterable, Callable, Dict, IO, Optional, TypeVar, Union, overload +import urllib.parse + +from azure.core import AsyncPipelineClient +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer +from ...operations._assessments_operations import ( + build_delete_request, + build_get_request, + build_list_request, + build_put_request, +) +from .._configuration import AdvisorManagementClientConfiguration + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + + +class AssessmentsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.aio.AdvisorManagementClient`'s + :attr:`assessments` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace_async + async def delete(self, assessment_name: str, **kwargs: Any) -> None: + """Delete existing assessment. + + Delete a existing Azure Advisor assessment. + + :param assessment_name: Advisor assessment name. Required. + :type assessment_name: str + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_delete_request( + assessment_name=assessment_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace_async + async def get(self, assessment_name: str, **kwargs: Any) -> _models.AssessmentResult: + """Get existing assessment. + + Get a existing Azure Advisor assessment. + + :param assessment_name: Advisor assessment name. Required. + :type assessment_name: str + :return: AssessmentResult or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AssessmentResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.AssessmentResult] = kwargs.pop("cls", None) + + _request = build_get_request( + assessment_name=assessment_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("AssessmentResult", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + async def put( + self, + assessment_name: str, + assessment_contract: _models.AssessmentResult, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> _models.AssessmentResult: + """Create/Overwrite Azure Advisor assessment. + + Create or Overwrite Azure Advisor assessment resource. + + :param assessment_name: Advisor assessment name. Required. + :type assessment_name: str + :param assessment_contract: The Azure Advisor assessment data structure. Required. + :type assessment_contract: ~azure.mgmt.advisor.models.AssessmentResult + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: AssessmentResult or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AssessmentResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def put( + self, + assessment_name: str, + assessment_contract: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> _models.AssessmentResult: + """Create/Overwrite Azure Advisor assessment. + + Create or Overwrite Azure Advisor assessment resource. + + :param assessment_name: Advisor assessment name. Required. + :type assessment_name: str + :param assessment_contract: The Azure Advisor assessment data structure. Required. + :type assessment_contract: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: AssessmentResult or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AssessmentResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + async def put( + self, assessment_name: str, assessment_contract: Union[_models.AssessmentResult, IO[bytes]], **kwargs: Any + ) -> _models.AssessmentResult: + """Create/Overwrite Azure Advisor assessment. + + Create or Overwrite Azure Advisor assessment resource. + + :param assessment_name: Advisor assessment name. Required. + :type assessment_name: str + :param assessment_contract: The Azure Advisor assessment data structure. Is either a + AssessmentResult type or a IO[bytes] type. Required. + :type assessment_contract: ~azure.mgmt.advisor.models.AssessmentResult or IO[bytes] + :return: AssessmentResult or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AssessmentResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.AssessmentResult] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _json = None + _content = None + if isinstance(assessment_contract, (IOBase, bytes)): + _content = assessment_contract + else: + _json = self._serialize.body(assessment_contract, "AssessmentResult") + + _request = build_put_request( + assessment_name=assessment_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + content_type=content_type, + json=_json, + content=_content, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("AssessmentResult", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def list( + self, top: Optional[str] = None, skiptoken: Optional[str] = None, **kwargs: Any + ) -> AsyncIterable["_models.AssessmentResult"]: + """Get list of assessment. + + Get list of Azure Advisor assessment. + + :param top: Limit the result to the specified number of rows. Default value is None. + :type top: str + :param skiptoken: The page-continuation token to use with a paged version of this API. Default + value is None. + :type skiptoken: str + :return: An iterator like instance of either AssessmentResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.AssessmentResult] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.AssessmentListResult] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + subscription_id=self._config.subscription_id, + top=top, + skiptoken=skiptoken, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("AssessmentListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_configurations_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_configurations_operations.py index 6e68b06fa2df..286048e6ee12 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_configurations_operations.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_configurations_operations.py @@ -1,4 +1,3 @@ -# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,10 +5,12 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys +from collections.abc import MutableMapping +from io import IOBase from typing import Any, AsyncIterable, Callable, Dict, IO, Optional, TypeVar, Union, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -20,26 +21,22 @@ map_error, ) from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import AsyncHttpResponse, HttpRequest from azure.core.tracing.decorator import distributed_trace from azure.core.tracing.decorator_async import distributed_trace_async from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from ... import models as _models -from ..._vendor import _convert_request +from ..._utils.serialization import Deserializer, Serializer from ...operations._configurations_operations import ( build_create_in_resource_group_request, build_create_in_subscription_request, build_list_by_resource_group_request, build_list_by_subscription_request, ) +from .._configuration import AdvisorManagementClientConfiguration -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -58,10 +55,10 @@ class ConfigurationsOperations: def __init__(self, *args, **kwargs) -> None: input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace def list_by_subscription(self, **kwargs: Any) -> AsyncIterable["_models.ConfigData"]: @@ -70,7 +67,6 @@ def list_by_subscription(self, **kwargs: Any) -> AsyncIterable["_models.ConfigDa Retrieve Azure Advisor configurations and also retrieve configurations of contained resource groups. - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either ConfigData or the result of cls(response) :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.ConfigData] :raises ~azure.core.exceptions.HttpResponseError: @@ -78,12 +74,10 @@ def list_by_subscription(self, **kwargs: Any) -> AsyncIterable["_models.ConfigDa _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ConfigurationListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ConfigurationListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -94,15 +88,13 @@ def list_by_subscription(self, **kwargs: Any) -> AsyncIterable["_models.ConfigDa def prepare_request(next_link=None): if not next_link: - request = build_list_by_subscription_request( + _request = build_list_by_subscription_request( subscription_id=self._config.subscription_id, api_version=api_version, - template_url=self.list_by_subscription.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -114,26 +106,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request async def extract_data(pipeline_response): deserialized = self._deserialize("ConfigurationListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, AsyncList(list_of_elem) async def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -146,8 +138,6 @@ async def get_next(next_link=None): return AsyncItemPaged(get_next, extract_data) - list_by_subscription.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/configurations"} # type: ignore - @overload async def create_in_subscription( self, @@ -170,7 +160,6 @@ async def create_in_subscription( :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: @@ -180,7 +169,7 @@ async def create_in_subscription( async def create_in_subscription( self, configuration_name: Union[str, _models.ConfigurationName], - config_contract: IO, + config_contract: IO[bytes], *, content_type: str = "application/json", **kwargs: Any @@ -194,11 +183,10 @@ async def create_in_subscription( Required. :type configuration_name: str or ~azure.mgmt.advisor.models.ConfigurationName :param config_contract: The Azure Advisor configuration data structure. Required. - :type config_contract: IO + :type config_contract: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: @@ -208,7 +196,7 @@ async def create_in_subscription( async def create_in_subscription( self, configuration_name: Union[str, _models.ConfigurationName], - config_contract: Union[_models.ConfigData, IO], + config_contract: Union[_models.ConfigData, IO[bytes]], **kwargs: Any ) -> _models.ConfigData: """Create/Overwrite Azure Advisor configuration. @@ -219,18 +207,14 @@ async def create_in_subscription( :param configuration_name: Advisor configuration name. Value must be 'default'. "default" Required. :type configuration_name: str or ~azure.mgmt.advisor.models.ConfigurationName - :param config_contract: The Azure Advisor configuration data structure. Is either a model type - or a IO type. Required. - :type config_contract: ~azure.mgmt.advisor.models.ConfigData or IO - :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. - Default value is None. - :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response + :param config_contract: The Azure Advisor configuration data structure. Is either a ConfigData + type or a IO[bytes] type. Required. + :type config_contract: ~azure.mgmt.advisor.models.ConfigData or IO[bytes] :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -241,36 +225,33 @@ async def create_in_subscription( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - content_type = kwargs.pop("content_type", _headers.pop("Content-Type", None)) # type: Optional[str] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ConfigData] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.ConfigData] = kwargs.pop("cls", None) content_type = content_type or "application/json" _json = None _content = None - if isinstance(config_contract, (IO, bytes)): + if isinstance(config_contract, (IOBase, bytes)): _content = config_contract else: _json = self._serialize.body(config_contract, "ConfigData") - request = build_create_in_subscription_request( + _request = build_create_in_subscription_request( configuration_name=configuration_name, subscription_id=self._config.subscription_id, api_version=api_version, content_type=content_type, json=_json, content=_content, - template_url=self.create_in_subscription.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -280,14 +261,12 @@ async def create_in_subscription( error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("ConfigData", pipeline_response) + deserialized = self._deserialize("ConfigData", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - create_in_subscription.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/configurations/{configurationName}"} # type: ignore + return deserialized # type: ignore @distributed_trace def list_by_resource_group(self, resource_group: str, **kwargs: Any) -> AsyncIterable["_models.ConfigData"]: @@ -297,7 +276,6 @@ def list_by_resource_group(self, resource_group: str, **kwargs: Any) -> AsyncIte :param resource_group: The name of the Azure resource group. Required. :type resource_group: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either ConfigData or the result of cls(response) :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.ConfigData] :raises ~azure.core.exceptions.HttpResponseError: @@ -305,12 +283,10 @@ def list_by_resource_group(self, resource_group: str, **kwargs: Any) -> AsyncIte _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ConfigurationListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ConfigurationListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -321,16 +297,14 @@ def list_by_resource_group(self, resource_group: str, **kwargs: Any) -> AsyncIte def prepare_request(next_link=None): if not next_link: - request = build_list_by_resource_group_request( + _request = build_list_by_resource_group_request( resource_group=resource_group, subscription_id=self._config.subscription_id, api_version=api_version, - template_url=self.list_by_resource_group.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -342,26 +316,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request async def extract_data(pipeline_response): deserialized = self._deserialize("ConfigurationListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return None, AsyncList(list_of_elem) async def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -374,8 +348,6 @@ async def get_next(next_link=None): return AsyncItemPaged(get_next, extract_data) - list_by_resource_group.metadata = {"url": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Advisor/configurations"} # type: ignore - @overload async def create_in_resource_group( self, @@ -400,7 +372,6 @@ async def create_in_resource_group( :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: @@ -411,7 +382,7 @@ async def create_in_resource_group( self, configuration_name: Union[str, _models.ConfigurationName], resource_group: str, - config_contract: IO, + config_contract: IO[bytes], *, content_type: str = "application/json", **kwargs: Any @@ -426,11 +397,10 @@ async def create_in_resource_group( :param resource_group: The name of the Azure resource group. Required. :type resource_group: str :param config_contract: The Azure Advisor configuration data structure. Required. - :type config_contract: IO + :type config_contract: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: @@ -441,7 +411,7 @@ async def create_in_resource_group( self, configuration_name: Union[str, _models.ConfigurationName], resource_group: str, - config_contract: Union[_models.ConfigData, IO], + config_contract: Union[_models.ConfigData, IO[bytes]], **kwargs: Any ) -> _models.ConfigData: """Create/Overwrite Azure Advisor configuration. @@ -453,18 +423,14 @@ async def create_in_resource_group( :type configuration_name: str or ~azure.mgmt.advisor.models.ConfigurationName :param resource_group: The name of the Azure resource group. Required. :type resource_group: str - :param config_contract: The Azure Advisor configuration data structure. Is either a model type - or a IO type. Required. - :type config_contract: ~azure.mgmt.advisor.models.ConfigData or IO - :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. - Default value is None. - :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response + :param config_contract: The Azure Advisor configuration data structure. Is either a ConfigData + type or a IO[bytes] type. Required. + :type config_contract: ~azure.mgmt.advisor.models.ConfigData or IO[bytes] :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -475,21 +441,19 @@ async def create_in_resource_group( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - content_type = kwargs.pop("content_type", _headers.pop("Content-Type", None)) # type: Optional[str] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ConfigData] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.ConfigData] = kwargs.pop("cls", None) content_type = content_type or "application/json" _json = None _content = None - if isinstance(config_contract, (IO, bytes)): + if isinstance(config_contract, (IOBase, bytes)): _content = config_contract else: _json = self._serialize.body(config_contract, "ConfigData") - request = build_create_in_resource_group_request( + _request = build_create_in_resource_group_request( configuration_name=configuration_name, resource_group=resource_group, subscription_id=self._config.subscription_id, @@ -497,15 +461,14 @@ async def create_in_resource_group( content_type=content_type, json=_json, content=_content, - template_url=self.create_in_resource_group.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -515,11 +478,9 @@ async def create_in_resource_group( error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("ConfigData", pipeline_response) + deserialized = self._deserialize("ConfigData", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - create_in_resource_group.metadata = {"url": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Advisor/configurations/{configurationName}"} # type: ignore + return deserialized # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_operations.py index e32cf618baa2..afced4866bb5 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_operations.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_operations.py @@ -1,4 +1,3 @@ -# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,10 +5,11 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys +from collections.abc import MutableMapping from typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -20,20 +20,16 @@ map_error, ) from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import AsyncHttpResponse, HttpRequest from azure.core.tracing.decorator import distributed_trace from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from ... import models as _models -from ..._vendor import _convert_request +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import build_list_request +from .._configuration import AdvisorManagementClientConfiguration -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -52,16 +48,15 @@ class Operations: def __init__(self, *args, **kwargs) -> None: input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace def list(self, **kwargs: Any) -> AsyncIterable["_models.OperationEntity"]: """Lists all the available Advisor REST API operations. - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either OperationEntity or the result of cls(response) :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.OperationEntity] :raises ~azure.core.exceptions.HttpResponseError: @@ -69,12 +64,10 @@ def list(self, **kwargs: Any) -> AsyncIterable["_models.OperationEntity"]: _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.OperationEntityListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.OperationEntityListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -85,14 +78,12 @@ def list(self, **kwargs: Any) -> AsyncIterable["_models.OperationEntity"]: def prepare_request(next_link=None): if not next_link: - request = build_list_request( + _request = build_list_request( api_version=api_version, - template_url=self.list.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -104,26 +95,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request async def extract_data(pipeline_response): deserialized = self._deserialize("OperationEntityListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, AsyncList(list_of_elem) async def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -135,5 +126,3 @@ async def get_next(next_link=None): return pipeline_response return AsyncItemPaged(get_next, extract_data) - - list.metadata = {"url": "/providers/Microsoft.Advisor/operations"} # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_recommendation_metadata_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_recommendation_metadata_operations.py index 3f2e1582de2e..9211ae3133cb 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_recommendation_metadata_operations.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_recommendation_metadata_operations.py @@ -1,4 +1,3 @@ -# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,10 +5,11 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys +from collections.abc import MutableMapping from typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -20,21 +20,17 @@ map_error, ) from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import AsyncHttpResponse, HttpRequest from azure.core.tracing.decorator import distributed_trace from azure.core.tracing.decorator_async import distributed_trace_async from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from ... import models as _models -from ..._vendor import _convert_request +from ..._utils.serialization import Deserializer, Serializer from ...operations._recommendation_metadata_operations import build_get_request, build_list_request +from .._configuration import AdvisorManagementClientConfiguration -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -53,10 +49,10 @@ class RecommendationMetadataOperations: def __init__(self, *args, **kwargs) -> None: input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace_async async def get(self, name: str, **kwargs: Any) -> _models.MetadataEntity: @@ -66,60 +62,54 @@ async def get(self, name: str, **kwargs: Any) -> _models.MetadataEntity: :param name: Name of metadata entity. Required. :type name: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: MetadataEntity or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.MetadataEntity :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 409: ResourceExistsError, 304: ResourceNotModifiedError, - 404: lambda response: ResourceNotFoundError( - response=response, - model=self._deserialize(_models.ARMErrorResponseBody, response), - error_format=ARMErrorFormat, - ), } error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.MetadataEntity] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.MetadataEntity] = kwargs.pop("cls", None) - request = build_get_request( + _request = build_get_request( name=name, api_version=api_version, - template_url=self.get.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + error = None + if response.status_code == 404: + error = self._deserialize.failsafe_deserialize(_models.ARMErrorResponseBody, pipeline_response) + raise ResourceNotFoundError(response=response, model=error, error_format=ARMErrorFormat) + else: + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("MetadataEntity", pipeline_response) + deserialized = self._deserialize("MetadataEntity", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - get.metadata = {"url": "/providers/Microsoft.Advisor/metadata/{name}"} # type: ignore + return deserialized # type: ignore @distributed_trace def list(self, **kwargs: Any) -> AsyncIterable["_models.MetadataEntity"]: @@ -127,7 +117,6 @@ def list(self, **kwargs: Any) -> AsyncIterable["_models.MetadataEntity"]: Gets the list of metadata entities. - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either MetadataEntity or the result of cls(response) :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.MetadataEntity] :raises ~azure.core.exceptions.HttpResponseError: @@ -135,12 +124,10 @@ def list(self, **kwargs: Any) -> AsyncIterable["_models.MetadataEntity"]: _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.MetadataEntityListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.MetadataEntityListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -151,14 +138,12 @@ def list(self, **kwargs: Any) -> AsyncIterable["_models.MetadataEntity"]: def prepare_request(next_link=None): if not next_link: - request = build_list_request( + _request = build_list_request( api_version=api_version, - template_url=self.list.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -170,26 +155,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request async def extract_data(pipeline_response): deserialized = self._deserialize("MetadataEntityListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, AsyncList(list_of_elem) async def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -201,5 +186,3 @@ async def get_next(next_link=None): return pipeline_response return AsyncItemPaged(get_next, extract_data) - - list.metadata = {"url": "/providers/Microsoft.Advisor/metadata"} # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_recommendations_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_recommendations_operations.py index d690ff703a39..f1c08b89f06d 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_recommendations_operations.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_recommendations_operations.py @@ -1,4 +1,3 @@ -# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,10 +5,12 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys -from typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar +from collections.abc import MutableMapping +from io import IOBase +from typing import Any, AsyncIterable, Callable, Dict, IO, Optional, TypeVar, Union, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -20,26 +21,23 @@ map_error, ) from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import AsyncHttpResponse, HttpRequest from azure.core.tracing.decorator import distributed_trace from azure.core.tracing.decorator_async import distributed_trace_async from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from ... import models as _models -from ..._vendor import _convert_request +from ..._utils.serialization import Deserializer, Serializer from ...operations._recommendations_operations import ( build_generate_request, build_get_generate_status_request, build_get_request, build_list_request, + build_patch_request, ) +from .._configuration import AdvisorManagementClientConfiguration -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -58,23 +56,22 @@ class RecommendationsOperations: def __init__(self, *args, **kwargs) -> None: input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace_async - async def generate(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-statements + async def generate(self, **kwargs: Any) -> None: """Initiates the recommendation generation or computation process for a subscription. This operation is asynchronous. The generated recommendations are stored in a cache in the Advisor service. - :keyword callable cls: A custom type or function that will be passed the direct response :return: None or the result of cls(response) :rtype: None :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -85,23 +82,20 @@ async def generate(self, **kwargs: Any) -> None: # pylint: disable=inconsistent _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[None] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) - request = build_generate_request( + _request = build_generate_request( subscription_id=self._config.subscription_id, api_version=api_version, - template_url=self.generate.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -116,14 +110,10 @@ async def generate(self, **kwargs: Any) -> None: # pylint: disable=inconsistent response_headers["Retry-After"] = self._deserialize("str", response.headers.get("Retry-After")) if cls: - return cls(pipeline_response, None, response_headers) - - generate.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/generateRecommendations"} # type: ignore + return cls(pipeline_response, None, response_headers) # type: ignore @distributed_trace_async - async def get_generate_status( # pylint: disable=inconsistent-return-statements - self, operation_id: str, **kwargs: Any - ) -> None: + async def get_generate_status(self, operation_id: str, **kwargs: Any) -> None: """Retrieves the status of the recommendation computation or generation process. Invoke this API after calling the generation recommendation. The URI of this API is returned in the Location field of the response header. @@ -131,12 +121,11 @@ async def get_generate_status( # pylint: disable=inconsistent-return-statements :param operation_id: The operation ID, which can be found from the Location field in the generate recommendation response header. Required. :type operation_id: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: None or the result of cls(response) :rtype: None :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -147,24 +136,21 @@ async def get_generate_status( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[None] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) - request = build_get_generate_status_request( + _request = build_get_generate_status_request( operation_id=operation_id, subscription_id=self._config.subscription_id, api_version=api_version, - template_url=self.get_generate_status.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -175,9 +161,7 @@ async def get_generate_status( # pylint: disable=inconsistent-return-statements raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if cls: - return cls(pipeline_response, None, {}) - - get_generate_status.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/generateRecommendations/{operationId}"} # type: ignore + return cls(pipeline_response, None, {}) # type: ignore @distributed_trace def list( @@ -186,9 +170,9 @@ def list( """Obtains cached recommendations for a subscription. The recommendations are generated or computed by invoking generateRecommendations. - :param filter: The filter to apply to the recommendations.:code:`
`Filter can be applied to - properties ['ResourceId', 'ResourceGroup', 'RecommendationTypeGuid', '\ `Category - <#category>`_\ '] with operators ['eq', 'and', 'or'].:code:`
`Example::code:`
`- + :param filter: The filter to apply to the recommendations.\\ :code:`
`Filter can be applied + to properties ['ResourceId', 'ResourceGroup', 'RecommendationTypeGuid', '\\ `Category + <#category>`_\\ '] with operators ['eq', 'and', 'or'].\\ :code:`
`Example:\\ :code:`
`- $filter=Category eq 'Cost' and ResourceGroup eq 'MyResourceGroup'. Default value is None. :type filter: str :param top: The number of recommendations per page if a paged version of this API is being @@ -197,7 +181,6 @@ def list( :param skip_token: The page-continuation token to use with a paged version of this API. Default value is None. :type skip_token: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either ResourceRecommendationBase or the result of cls(response) :rtype: @@ -207,12 +190,10 @@ def list( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ResourceRecommendationBaseListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ResourceRecommendationBaseListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -223,18 +204,16 @@ def list( def prepare_request(next_link=None): if not next_link: - request = build_list_request( + _request = build_list_request( subscription_id=self._config.subscription_id, filter=filter, top=top, skip_token=skip_token, api_version=api_version, - template_url=self.list.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -246,26 +225,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request async def extract_data(pipeline_response): deserialized = self._deserialize("ResourceRecommendationBaseListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, AsyncList(list_of_elem) async def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -278,8 +257,6 @@ async def get_next(next_link=None): return AsyncItemPaged(get_next, extract_data) - list.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/recommendations"} # type: ignore - @distributed_trace_async async def get(self, resource_uri: str, recommendation_id: str, **kwargs: Any) -> _models.ResourceRecommendationBase: """Obtains details of a cached recommendation. @@ -289,12 +266,11 @@ async def get(self, resource_uri: str, recommendation_id: str, **kwargs: Any) -> :type resource_uri: str :param recommendation_id: The recommendation ID. Required. :type recommendation_id: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: ResourceRecommendationBase or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ResourceRecommendationBase :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -305,24 +281,21 @@ async def get(self, resource_uri: str, recommendation_id: str, **kwargs: Any) -> _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ResourceRecommendationBase] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ResourceRecommendationBase] = kwargs.pop("cls", None) - request = build_get_request( + _request = build_get_request( resource_uri=resource_uri, recommendation_id=recommendation_id, api_version=api_version, - template_url=self.get.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -332,11 +305,140 @@ async def get(self, resource_uri: str, recommendation_id: str, **kwargs: Any) -> error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("ResourceRecommendationBase", pipeline_response) + deserialized = self._deserialize("ResourceRecommendationBase", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + async def patch( + self, + resource_uri: str, + recommendation_id: str, + tracked_properties: _models.TrackedRecommendationPropertiesPayload, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> _models.ResourceRecommendationBase: + """Update the tracked properties of a Recommendation. + + :param resource_uri: The fully qualified Azure Resource Manager identifier of the resource to + which the tracked recommendation applies. Required. + :type resource_uri: str + :param recommendation_id: The RecommendationId ID. Required. + :type recommendation_id: str + :param tracked_properties: The properties to update on the recommendation. Required. + :type tracked_properties: ~azure.mgmt.advisor.models.TrackedRecommendationPropertiesPayload + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: ResourceRecommendationBase or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.ResourceRecommendationBase + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def patch( + self, + resource_uri: str, + recommendation_id: str, + tracked_properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> _models.ResourceRecommendationBase: + """Update the tracked properties of a Recommendation. + + :param resource_uri: The fully qualified Azure Resource Manager identifier of the resource to + which the tracked recommendation applies. Required. + :type resource_uri: str + :param recommendation_id: The RecommendationId ID. Required. + :type recommendation_id: str + :param tracked_properties: The properties to update on the recommendation. Required. + :type tracked_properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: ResourceRecommendationBase or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.ResourceRecommendationBase + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + async def patch( + self, + resource_uri: str, + recommendation_id: str, + tracked_properties: Union[_models.TrackedRecommendationPropertiesPayload, IO[bytes]], + **kwargs: Any + ) -> _models.ResourceRecommendationBase: + """Update the tracked properties of a Recommendation. + + :param resource_uri: The fully qualified Azure Resource Manager identifier of the resource to + which the tracked recommendation applies. Required. + :type resource_uri: str + :param recommendation_id: The RecommendationId ID. Required. + :type recommendation_id: str + :param tracked_properties: The properties to update on the recommendation. Is either a + TrackedRecommendationPropertiesPayload type or a IO[bytes] type. Required. + :type tracked_properties: ~azure.mgmt.advisor.models.TrackedRecommendationPropertiesPayload or + IO[bytes] + :return: ResourceRecommendationBase or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.ResourceRecommendationBase + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) - return deserialized + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.ResourceRecommendationBase] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _json = None + _content = None + if isinstance(tracked_properties, (IOBase, bytes)): + _content = tracked_properties + else: + _json = self._serialize.body(tracked_properties, "TrackedRecommendationPropertiesPayload") + + _request = build_patch_request( + resource_uri=resource_uri, + recommendation_id=recommendation_id, + api_version=api_version, + content_type=content_type, + json=_json, + content=_content, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("ResourceRecommendationBase", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore - get.metadata = {"url": "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}"} # type: ignore + return deserialized # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_resiliency_reviews_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_resiliency_reviews_operations.py new file mode 100644 index 000000000000..719a81403c43 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_resiliency_reviews_operations.py @@ -0,0 +1,201 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar +import urllib.parse + +from azure.core import AsyncPipelineClient +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer +from ...operations._resiliency_reviews_operations import build_get_request, build_list_request +from .._configuration import AdvisorManagementClientConfiguration + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + + +class ResiliencyReviewsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.aio.AdvisorManagementClient`'s + :attr:`resiliency_reviews` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list( + self, top: Optional[int] = None, skip: Optional[int] = None, filter: Optional[str] = None, **kwargs: Any + ) -> AsyncIterable["_models.ResiliencyReview"]: + """Get list of resiliency reviews. + + Get list of Azure Advisor resiliency reviews. + + :param top: The number of items to be included in the result. Default value is None. + :type top: int + :param skip: The number of items to skip before starting to collect the result set. Default + value is None. + :type skip: int + :param filter: The filter to apply.\\ :code:`
`Filter can be applied to properties + ['reviewStatus', 'reviewId'] with operators ['eq', 'and', 'or'].\\ :code:`
`Example:\\ + :code:`
`- $filter=reviewStatus eq 'New'. Default value is None. + :type filter: str + :return: An iterator like instance of either ResiliencyReview or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.ResiliencyReview] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ResiliencyReviewCollection] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + subscription_id=self._config.subscription_id, + top=top, + skip=skip, + filter=filter, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("ResiliencyReviewCollection", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @distributed_trace_async + async def get(self, review_id: str, **kwargs: Any) -> _models.ResiliencyReview: + """Get existing resiliency review. + + Get existing Azure Advisor resiliency review by id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :return: ResiliencyReview or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.ResiliencyReview + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ResiliencyReview] = kwargs.pop("cls", None) + + _request = build_get_request( + review_id=review_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("ResiliencyReview", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_suppressions_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_suppressions_operations.py index eed345f44295..33aa6b161fa2 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_suppressions_operations.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_suppressions_operations.py @@ -1,4 +1,3 @@ -# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,10 +5,12 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys +from collections.abc import MutableMapping +from io import IOBase from typing import Any, AsyncIterable, Callable, Dict, IO, Optional, TypeVar, Union, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -20,26 +21,22 @@ map_error, ) from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import AsyncHttpResponse, HttpRequest from azure.core.tracing.decorator import distributed_trace from azure.core.tracing.decorator_async import distributed_trace_async from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from ... import models as _models -from ..._vendor import _convert_request +from ..._utils.serialization import Deserializer, Serializer from ...operations._suppressions_operations import ( build_create_request, build_delete_request, build_get_request, build_list_request, ) +from .._configuration import AdvisorManagementClientConfiguration -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -58,10 +55,10 @@ class SuppressionsOperations: def __init__(self, *args, **kwargs) -> None: input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace_async async def get( @@ -76,62 +73,56 @@ async def get( :type recommendation_id: str :param name: The name of the suppression. Required. :type name: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: SuppressionContract or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.SuppressionContract :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 409: ResourceExistsError, 304: ResourceNotModifiedError, - 404: lambda response: ResourceNotFoundError( - response=response, - model=self._deserialize(_models.ArmErrorResponse, response), - error_format=ARMErrorFormat, - ), } error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.SuppressionContract] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.SuppressionContract] = kwargs.pop("cls", None) - request = build_get_request( + _request = build_get_request( resource_uri=resource_uri, recommendation_id=recommendation_id, name=name, api_version=api_version, - template_url=self.get.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + error = None + if response.status_code == 404: + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise ResourceNotFoundError(response=response, model=error, error_format=ARMErrorFormat) + else: + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("SuppressionContract", pipeline_response) + deserialized = self._deserialize("SuppressionContract", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - get.metadata = {"url": "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}/suppressions/{name}"} # type: ignore + return deserialized # type: ignore @overload async def create( @@ -161,7 +152,6 @@ async def create( :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: SuppressionContract or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.SuppressionContract :raises ~azure.core.exceptions.HttpResponseError: @@ -173,7 +163,7 @@ async def create( resource_uri: str, recommendation_id: str, name: str, - suppression_contract: IO, + suppression_contract: IO[bytes], *, content_type: str = "application/json", **kwargs: Any @@ -191,11 +181,10 @@ async def create( :type name: str :param suppression_contract: The snoozed or dismissed attribute; for example, the snooze duration. Required. - :type suppression_contract: IO + :type suppression_contract: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: SuppressionContract or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.SuppressionContract :raises ~azure.core.exceptions.HttpResponseError: @@ -207,7 +196,7 @@ async def create( resource_uri: str, recommendation_id: str, name: str, - suppression_contract: Union[_models.SuppressionContract, IO], + suppression_contract: Union[_models.SuppressionContract, IO[bytes]], **kwargs: Any ) -> _models.SuppressionContract: """Enables the snoozed or dismissed attribute of a recommendation. The snoozed or dismissed @@ -222,46 +211,35 @@ async def create( :param name: The name of the suppression. Required. :type name: str :param suppression_contract: The snoozed or dismissed attribute; for example, the snooze - duration. Is either a model type or a IO type. Required. - :type suppression_contract: ~azure.mgmt.advisor.models.SuppressionContract or IO - :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. - Default value is None. - :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response + duration. Is either a SuppressionContract type or a IO[bytes] type. Required. + :type suppression_contract: ~azure.mgmt.advisor.models.SuppressionContract or IO[bytes] :return: SuppressionContract or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.SuppressionContract :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 409: ResourceExistsError, 304: ResourceNotModifiedError, - 404: lambda response: ResourceNotFoundError( - response=response, - model=self._deserialize(_models.ArmErrorResponse, response), - error_format=ARMErrorFormat, - ), } error_map.update(kwargs.pop("error_map", {}) or {}) _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - content_type = kwargs.pop("content_type", _headers.pop("Content-Type", None)) # type: Optional[str] - cls = kwargs.pop("cls", None) # type: ClsType[_models.SuppressionContract] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.SuppressionContract] = kwargs.pop("cls", None) content_type = content_type or "application/json" _json = None _content = None - if isinstance(suppression_contract, (IO, bytes)): + if isinstance(suppression_contract, (IOBase, bytes)): _content = suppression_contract else: _json = self._serialize.body(suppression_contract, "SuppressionContract") - request = build_create_request( + _request = build_create_request( resource_uri=resource_uri, recommendation_id=recommendation_id, name=name, @@ -269,37 +247,37 @@ async def create( content_type=content_type, json=_json, content=_content, - template_url=self.create.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + error = None + if response.status_code == 404: + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise ResourceNotFoundError(response=response, model=error, error_format=ARMErrorFormat) + else: + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("SuppressionContract", pipeline_response) + deserialized = self._deserialize("SuppressionContract", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - create.metadata = {"url": "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}/suppressions/{name}"} # type: ignore + return deserialized # type: ignore @distributed_trace_async - async def delete( # pylint: disable=inconsistent-return-statements - self, resource_uri: str, recommendation_id: str, name: str, **kwargs: Any - ) -> None: + async def delete(self, resource_uri: str, recommendation_id: str, name: str, **kwargs: Any) -> None: """Enables the activation of a snoozed or dismissed recommendation. The snoozed or dismissed attribute of a recommendation is referred to as a suppression. @@ -310,12 +288,11 @@ async def delete( # pylint: disable=inconsistent-return-statements :type recommendation_id: str :param name: The name of the suppression. Required. :type name: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: None or the result of cls(response) :rtype: None :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -326,25 +303,22 @@ async def delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[None] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) - request = build_delete_request( + _request = build_delete_request( resource_uri=resource_uri, recommendation_id=recommendation_id, name=name, api_version=api_version, - template_url=self.delete.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -355,9 +329,7 @@ async def delete( # pylint: disable=inconsistent-return-statements raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if cls: - return cls(pipeline_response, None, {}) - - delete.metadata = {"url": "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}/suppressions/{name}"} # type: ignore + return cls(pipeline_response, None, {}) # type: ignore @distributed_trace def list( @@ -372,7 +344,6 @@ def list( :param skip_token: The page-continuation token to use with a paged version of this API. Default value is None. :type skip_token: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either SuppressionContract or the result of cls(response) :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.SuppressionContract] :raises ~azure.core.exceptions.HttpResponseError: @@ -380,12 +351,10 @@ def list( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.SuppressionContractListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.SuppressionContractListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -396,17 +365,15 @@ def list( def prepare_request(next_link=None): if not next_link: - request = build_list_request( + _request = build_list_request( subscription_id=self._config.subscription_id, top=top, skip_token=skip_token, api_version=api_version, - template_url=self.list.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -418,26 +385,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request async def extract_data(pipeline_response): deserialized = self._deserialize("SuppressionContractListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, AsyncList(list_of_elem) async def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -449,5 +416,3 @@ async def get_next(next_link=None): return pipeline_response return AsyncItemPaged(get_next, extract_data) - - list.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/suppressions"} # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_triage_recommendations_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_triage_recommendations_operations.py new file mode 100644 index 000000000000..70988b4e8d79 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_triage_recommendations_operations.py @@ -0,0 +1,462 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from io import IOBase +from typing import Any, AsyncIterable, Callable, Dict, IO, Optional, TypeVar, Union, overload +import urllib.parse + +from azure.core import AsyncPipelineClient +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer +from ...operations._triage_recommendations_operations import ( + build_approve_triage_recommendation_request, + build_get_request, + build_list_request, + build_reject_triage_recommendation_request, + build_reset_triage_recommendation_request, +) +from .._configuration import AdvisorManagementClientConfiguration + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + + +class TriageRecommendationsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.aio.AdvisorManagementClient`'s + :attr:`triage_recommendations` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list( + self, review_id: str, top: Optional[int] = None, skip: Optional[int] = None, **kwargs: Any + ) -> AsyncIterable["_models.TriageRecommendation"]: + """Get list of recommendations for an existing resiliency review id. + + Get list of recommendations for an existing Azure Advisor Resiliency Review Id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param top: The number of items to be included in the result. Default value is None. + :type top: int + :param skip: The number of items to skip before starting to collect the result set. Default + value is None. + :type skip: int + :return: An iterator like instance of either TriageRecommendation or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.TriageRecommendation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.TriageRecommendationCollection] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + review_id=review_id, + subscription_id=self._config.subscription_id, + top=top, + skip=skip, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("TriageRecommendationCollection", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @distributed_trace_async + async def get(self, review_id: str, recommendation_id: str, **kwargs: Any) -> _models.TriageRecommendation: + """Get an existing recommendation by id for an existing resiliency review id. + + Get an existing recommendation by id for an existing Azure Advisor Resiliency Review Id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :return: TriageRecommendation or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.TriageRecommendation + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.TriageRecommendation] = kwargs.pop("cls", None) + + _request = build_get_request( + review_id=review_id, + recommendation_id=recommendation_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("TriageRecommendation", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def approve_triage_recommendation(self, review_id: str, recommendation_id: str, **kwargs: Any) -> None: + """Approve triage recommendation by id. + + Approve a triage recommendation for a given id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_approve_triage_recommendation_request( + review_id=review_id, + recommendation_id=recommendation_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @overload + async def reject_triage_recommendation( + self, + review_id: str, + recommendation_id: str, + recommendation_reject_body: _models.RecommendationRejectBody, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> None: + """Reject existing triage recommendation by id. + + Reject an existing triage recommendation for a given id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :param recommendation_reject_body: JSON object that contains reason for rejecting triage + recommendation. Required. + :type recommendation_reject_body: ~azure.mgmt.advisor.models.RecommendationRejectBody + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def reject_triage_recommendation( + self, + review_id: str, + recommendation_id: str, + recommendation_reject_body: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> None: + """Reject existing triage recommendation by id. + + Reject an existing triage recommendation for a given id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :param recommendation_reject_body: JSON object that contains reason for rejecting triage + recommendation. Required. + :type recommendation_reject_body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + async def reject_triage_recommendation( + self, + review_id: str, + recommendation_id: str, + recommendation_reject_body: Union[_models.RecommendationRejectBody, IO[bytes]], + **kwargs: Any + ) -> None: + """Reject existing triage recommendation by id. + + Reject an existing triage recommendation for a given id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :param recommendation_reject_body: JSON object that contains reason for rejecting triage + recommendation. Is either a RecommendationRejectBody type or a IO[bytes] type. Required. + :type recommendation_reject_body: ~azure.mgmt.advisor.models.RecommendationRejectBody or + IO[bytes] + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[None] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _json = None + _content = None + if isinstance(recommendation_reject_body, (IOBase, bytes)): + _content = recommendation_reject_body + else: + _json = self._serialize.body(recommendation_reject_body, "RecommendationRejectBody") + + _request = build_reject_triage_recommendation_request( + review_id=review_id, + recommendation_id=recommendation_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + content_type=content_type, + json=_json, + content=_content, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace_async + async def reset_triage_recommendation(self, review_id: str, recommendation_id: str, **kwargs: Any) -> None: + """Reset existing triage recommendation by id. + + Reset an existing triage recommendation for a given id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_reset_triage_recommendation_request( + review_id=review_id, + recommendation_id=recommendation_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_triage_resources_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_triage_resources_operations.py new file mode 100644 index 000000000000..7ee3647e17ec --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_triage_resources_operations.py @@ -0,0 +1,206 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar +import urllib.parse + +from azure.core import AsyncPipelineClient +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer +from ...operations._triage_resources_operations import build_get_request, build_list_request +from .._configuration import AdvisorManagementClientConfiguration + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + + +class TriageResourcesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.aio.AdvisorManagementClient`'s + :attr:`triage_resources` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace_async + async def get( + self, review_id: str, recommendation_id: str, recommendation_resource_id: str, **kwargs: Any + ) -> _models.TriageResource: + """Get existing triage resource. + + Get a triage resource for a given review and recommendation. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :param recommendation_resource_id: Existing recommendation triage resource associated with a + triage recommendation. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_resource_id: str + :return: TriageResource or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.TriageResource + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.TriageResource] = kwargs.pop("cls", None) + + _request = build_get_request( + review_id=review_id, + recommendation_id=recommendation_id, + recommendation_resource_id=recommendation_resource_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("TriageResource", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def list(self, review_id: str, recommendation_id: str, **kwargs: Any) -> AsyncIterable["_models.TriageResource"]: + """List triage resources based on a review and recommendation. + + List all triage resources that belong to a review and recommendation. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :return: An iterator like instance of either TriageResource or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.TriageResource] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.TriageResourceCollection] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + review_id=review_id, + recommendation_id=recommendation_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("TriageResourceCollection", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_workloads_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_workloads_operations.py new file mode 100644 index 000000000000..88f021c6a306 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/aio/operations/_workloads_operations.py @@ -0,0 +1,131 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar +import urllib.parse + +from azure.core import AsyncPipelineClient +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer +from ...operations._workloads_operations import build_list_request +from .._configuration import AdvisorManagementClientConfiguration + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + + +class WorkloadsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.aio.AdvisorManagementClient`'s + :attr:`workloads` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list(self, **kwargs: Any) -> AsyncIterable["_models.WorkloadResult"]: + """Get Workloads list. + + Get list of Workloads. + + :return: An iterator like instance of either WorkloadResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.advisor.models.WorkloadResult] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.WorkloadListResult] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("WorkloadListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/__init__.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/__init__.py index 5bb85a253ce5..0025eda6edfc 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/__init__.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/__init__.py @@ -5,61 +5,156 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position -from ._models_py3 import ARMErrorResponseBody -from ._models_py3 import ArmErrorResponse -from ._models_py3 import ConfigData -from ._models_py3 import ConfigurationListResult -from ._models_py3 import DigestConfig -from ._models_py3 import MetadataEntity -from ._models_py3 import MetadataEntityListResult -from ._models_py3 import MetadataSupportedValueDetail -from ._models_py3 import OperationDisplayInfo -from ._models_py3 import OperationEntity -from ._models_py3 import OperationEntityListResult -from ._models_py3 import Resource -from ._models_py3 import ResourceMetadata -from ._models_py3 import ResourceRecommendationBase -from ._models_py3 import ResourceRecommendationBaseListResult -from ._models_py3 import ShortDescription -from ._models_py3 import SuppressionContract -from ._models_py3 import SuppressionContractListResult +from typing import TYPE_CHECKING -from ._advisor_management_client_enums import Category -from ._advisor_management_client_enums import ConfigurationName -from ._advisor_management_client_enums import CpuThreshold -from ._advisor_management_client_enums import DigestConfigState -from ._advisor_management_client_enums import Impact -from ._advisor_management_client_enums import Scenario +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + + +from ._models_py3 import ( # type: ignore + ARMErrorResponseBody, + AdvisorScoreEntity, + AdvisorScoreEntityProperties, + AdvisorScoreResponse, + ArmErrorResponse, + AssessmentListResult, + AssessmentResult, + AssessmentTypeListResult, + AssessmentTypeResult, + ConfigData, + ConfigurationListResult, + DigestConfig, + ErrorAdditionalInfo, + ErrorDetail, + ErrorResponse, + MetadataEntity, + MetadataEntityListResult, + MetadataSupportedValueDetail, + OperationDisplayInfo, + OperationEntity, + OperationEntityListResult, + PredictionRequest, + PredictionResponse, + ProxyResource, + RecommendationPropertiesResourceWorkload, + RecommendationPropertiesReview, + RecommendationRejectBody, + ResiliencyReview, + ResiliencyReviewCollection, + Resource, + ResourceMetadata, + ResourceRecommendationBase, + ResourceRecommendationBaseListResult, + ScoreEntity, + ShortDescription, + SuppressionContract, + SuppressionContractListResult, + SystemData, + TimeSeriesEntityItem, + TrackedRecommendationProperties, + TrackedRecommendationPropertiesPayload, + TrackedRecommendationPropertiesPayloadProperties, + TriageRecommendation, + TriageRecommendationCollection, + TriageResource, + TriageResourceCollection, + WorkloadListResult, + WorkloadResult, +) + +from ._advisor_management_client_enums import ( # type: ignore + Aggregated, + Category, + ConfigurationName, + CpuThreshold, + CreatedByType, + DigestConfigState, + Duration, + Impact, + PredictionType, + Priority, + PriorityName, + Reason, + ReasonForRejectionName, + RecommendationStatusName, + ReviewStatus, + Risk, + Scenario, + State, +) from ._patch import __all__ as _patch_all -from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import * from ._patch import patch_sdk as _patch_sdk __all__ = [ "ARMErrorResponseBody", + "AdvisorScoreEntity", + "AdvisorScoreEntityProperties", + "AdvisorScoreResponse", "ArmErrorResponse", + "AssessmentListResult", + "AssessmentResult", + "AssessmentTypeListResult", + "AssessmentTypeResult", "ConfigData", "ConfigurationListResult", "DigestConfig", + "ErrorAdditionalInfo", + "ErrorDetail", + "ErrorResponse", "MetadataEntity", "MetadataEntityListResult", "MetadataSupportedValueDetail", "OperationDisplayInfo", "OperationEntity", "OperationEntityListResult", + "PredictionRequest", + "PredictionResponse", + "ProxyResource", + "RecommendationPropertiesResourceWorkload", + "RecommendationPropertiesReview", + "RecommendationRejectBody", + "ResiliencyReview", + "ResiliencyReviewCollection", "Resource", "ResourceMetadata", "ResourceRecommendationBase", "ResourceRecommendationBaseListResult", + "ScoreEntity", "ShortDescription", "SuppressionContract", "SuppressionContractListResult", + "SystemData", + "TimeSeriesEntityItem", + "TrackedRecommendationProperties", + "TrackedRecommendationPropertiesPayload", + "TrackedRecommendationPropertiesPayloadProperties", + "TriageRecommendation", + "TriageRecommendationCollection", + "TriageResource", + "TriageResourceCollection", + "WorkloadListResult", + "WorkloadResult", + "Aggregated", "Category", "ConfigurationName", "CpuThreshold", + "CreatedByType", "DigestConfigState", + "Duration", "Impact", + "PredictionType", + "Priority", + "PriorityName", + "Reason", + "ReasonForRejectionName", + "RecommendationStatusName", + "ReviewStatus", + "Risk", "Scenario", + "State", ] -__all__.extend([p for p in _patch_all if p not in __all__]) +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_advisor_management_client_enums.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_advisor_management_client_enums.py index e829a70bf186..ec13fc031eae 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_advisor_management_client_enums.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_advisor_management_client_enums.py @@ -10,6 +10,14 @@ from azure.core import CaseInsensitiveEnumMeta +class Aggregated(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The aggregation level of the score.""" + + WEEK = "week" + DAY = "day" + MONTH = "month" + + class Category(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Category.""" @@ -37,6 +45,15 @@ class CpuThreshold(str, Enum, metaclass=CaseInsensitiveEnumMeta): TWENTY = "20" +class CreatedByType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type of identity that created the resource.""" + + USER = "User" + APPLICATION = "Application" + MANAGED_IDENTITY = "ManagedIdentity" + KEY = "Key" + + class DigestConfigState(str, Enum, metaclass=CaseInsensitiveEnumMeta): """State of digest configuration.""" @@ -44,6 +61,19 @@ class DigestConfigState(str, Enum, metaclass=CaseInsensitiveEnumMeta): DISABLED = "Disabled" +class Duration(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Minimum duration for Advisor low CPU utilization evaluation. Valid only for subscriptions. + Valid values: 7 (default), 14, 21, 30, 60 or 90. + """ + + SEVEN = "7" + FOURTEEN = "14" + TWENTY_ONE = "21" + THIRTY = "30" + SIXTY = "60" + NINETY = "90" + + class Impact(str, Enum, metaclass=CaseInsensitiveEnumMeta): """The business impact of the recommendation.""" @@ -52,7 +82,100 @@ class Impact(str, Enum, metaclass=CaseInsensitiveEnumMeta): LOW = "Low" +class PredictionType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Type of the prediction.""" + + PREDICTIVE_RIGHTSIZING = "PredictiveRightsizing" + + +class Priority(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The Priority of the Recommendation.""" + + CRITICAL = "Critical" + HIGH = "High" + MEDIUM = "Medium" + LOW = "Low" + INFORMATIONAL = "Informational" + + +class PriorityName(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Recommendation priority name enum.""" + + HIGH = "High" + """High""" + MEDIUM = "Medium" + """Medium""" + LOW = "Low" + """Low""" + + +class Reason(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The reason the state of the Recommendation was changed.""" + + EXCESSIVE_INVESTMENT = "ExcessiveInvestment" + TOO_COMPLEX = "TooComplex" + ALTERNATIVE_SOLUTION = "AlternativeSolution" + INCOMPATIBLE = "Incompatible" + UNCLEAR = "Unclear" + RISK_ACCEPTED = "RiskAccepted" + + +class ReasonForRejectionName(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Reason for rejecting recommendation name enum.""" + + NOT_A_RISK = "NotARisk" + """Not A Risk""" + RISK_ACCEPTED = "RiskAccepted" + """Risk Accepted""" + + +class RecommendationStatusName(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Recommendation status name enum.""" + + APPROVED = "Approved" + """Approved""" + REJECTED = "Rejected" + """Rejected""" + PENDING = "Pending" + """Pending""" + + +class ReviewStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Review status string, returns the Reviews by the given status (e.g. 'New', 'Triaged', + 'Completed'). + """ + + NEW = "New" + """New""" + IN_PROGRESS = "InProgress" + """In Progress""" + TRIAGED = "Triaged" + """Triaged""" + COMPLETED = "Completed" + """Completed""" + + +class Risk(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The potential risk of not implementing the recommendation.""" + + ERROR = "Error" + WARNING = "Warning" + NONE = "None" + + class Scenario(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Scenario.""" ALERTS = "Alerts" + + +class State(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The state of the Recommendation.""" + + APPROVED = "Approved" + REJECTED = "Rejected" + PENDING = "Pending" + IN_PROGRESS = "InProgress" + POSTPONED = "Postponed" + DISMISSED = "Dismissed" + COMPLETED = "Completed" diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models_py3.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models_py3.py index a97c0a50fa37..48c9d6a563a2 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models_py3.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/models/_models_py3.py @@ -1,5 +1,5 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 -# pylint: disable=too-many-lines # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. @@ -7,21 +7,172 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from collections.abc import MutableMapping import datetime -import sys from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union -from .. import _serialization - -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore # pylint: disable=ungrouped-imports +from .._utils import serialization as _serialization if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] + + +class Resource(_serialization.Model): + """Common fields that are returned in the response for all Azure Resource Manager resources. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Fully qualified resource ID for the resource. E.g. + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}". + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.advisor.models.SystemData + """ + + _validation = { + "id": {"readonly": True}, + "name": {"readonly": True}, + "type": {"readonly": True}, + "system_data": {"readonly": True}, + } + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + "type": {"key": "type", "type": "str"}, + "system_data": {"key": "systemData", "type": "SystemData"}, + } + + def __init__(self, **kwargs: Any) -> None: + """ """ + super().__init__(**kwargs) + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.system_data: Optional["_models.SystemData"] = None + + +class ProxyResource(Resource): + """The resource model definition for a Azure Resource Manager proxy resource. It will not have + tags and a location. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Fully qualified resource ID for the resource. E.g. + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}". + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.advisor.models.SystemData + """ + + +class AdvisorScoreEntity(ProxyResource): + """The details of Advisor score for a single category. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Fully qualified resource ID for the resource. E.g. + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}". + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.advisor.models.SystemData + :ivar properties: The Advisor score data. + :vartype properties: ~azure.mgmt.advisor.models.AdvisorScoreEntityProperties + """ + + _validation = { + "id": {"readonly": True}, + "name": {"readonly": True}, + "type": {"readonly": True}, + "system_data": {"readonly": True}, + } + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + "type": {"key": "type", "type": "str"}, + "system_data": {"key": "systemData", "type": "SystemData"}, + "properties": {"key": "properties", "type": "AdvisorScoreEntityProperties"}, + } + + def __init__(self, *, properties: Optional["_models.AdvisorScoreEntityProperties"] = None, **kwargs: Any) -> None: + """ + :keyword properties: The Advisor score data. + :paramtype properties: ~azure.mgmt.advisor.models.AdvisorScoreEntityProperties + """ + super().__init__(**kwargs) + self.properties = properties + + +class AdvisorScoreEntityProperties(_serialization.Model): + """The Advisor score data. + + :ivar last_refreshed_score: The details of latest available score. + :vartype last_refreshed_score: ~azure.mgmt.advisor.models.ScoreEntity + :ivar time_series: The historic Advisor score data. + :vartype time_series: list[~azure.mgmt.advisor.models.TimeSeriesEntityItem] + """ + + _attribute_map = { + "last_refreshed_score": {"key": "lastRefreshedScore", "type": "ScoreEntity"}, + "time_series": {"key": "timeSeries", "type": "[TimeSeriesEntityItem]"}, + } + + def __init__( + self, + *, + last_refreshed_score: Optional["_models.ScoreEntity"] = None, + time_series: Optional[List["_models.TimeSeriesEntityItem"]] = None, + **kwargs: Any + ) -> None: + """ + :keyword last_refreshed_score: The details of latest available score. + :paramtype last_refreshed_score: ~azure.mgmt.advisor.models.ScoreEntity + :keyword time_series: The historic Advisor score data. + :paramtype time_series: list[~azure.mgmt.advisor.models.TimeSeriesEntityItem] + """ + super().__init__(**kwargs) + self.last_refreshed_score = last_refreshed_score + self.time_series = time_series + + +class AdvisorScoreResponse(_serialization.Model): + """AdvisorScoreResponse. + + :ivar value: The list of operations. + :vartype value: list[~azure.mgmt.advisor.models.AdvisorScoreEntity] + """ + + _attribute_map = { + "value": {"key": "value", "type": "[AdvisorScoreEntity]"}, + } + + def __init__(self, *, value: Optional[List["_models.AdvisorScoreEntity"]] = None, **kwargs: Any) -> None: + """ + :keyword value: The list of operations. + :paramtype value: list[~azure.mgmt.advisor.models.AdvisorScoreEntity] + """ + super().__init__(**kwargs) + self.value = value class ArmErrorResponse(_serialization.Model): @@ -35,7 +186,7 @@ class ArmErrorResponse(_serialization.Model): "error": {"key": "error", "type": "ARMErrorResponseBody"}, } - def __init__(self, *, error: Optional["_models.ARMErrorResponseBody"] = None, **kwargs): + def __init__(self, *, error: Optional["_models.ARMErrorResponseBody"] = None, **kwargs: Any) -> None: """ :keyword error: ARM error response body. :paramtype error: ~azure.mgmt.advisor.models.ARMErrorResponseBody @@ -59,7 +210,7 @@ class ARMErrorResponseBody(_serialization.Model): "code": {"key": "code", "type": "str"}, } - def __init__(self, *, message: Optional[str] = None, code: Optional[str] = None, **kwargs): + def __init__(self, *, message: Optional[str] = None, code: Optional[str] = None, **kwargs: Any) -> None: """ :keyword message: Gets or sets the string that describes the error in detail and provides debugging information. @@ -72,37 +223,220 @@ def __init__(self, *, message: Optional[str] = None, code: Optional[str] = None, self.code = code -class Resource(_serialization.Model): - """An Azure resource. +class AssessmentListResult(_serialization.Model): + """The Advisor assessment list result data structure. + + :ivar value: List of Assessments. + :vartype value: list[~azure.mgmt.advisor.models.AssessmentResult] + :ivar next_link: The URL to get the next set of Advisor assessments, if there are any. + :vartype next_link: str + """ + + _attribute_map = { + "value": {"key": "value", "type": "[AssessmentResult]"}, + "next_link": {"key": "nextLink", "type": "str"}, + } + + def __init__( + self, + *, + value: Optional[List["_models.AssessmentResult"]] = None, + next_link: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + :keyword value: List of Assessments. + :paramtype value: list[~azure.mgmt.advisor.models.AssessmentResult] + :keyword next_link: The URL to get the next set of Advisor assessments, if there are any. + :paramtype next_link: str + """ + super().__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class AssessmentResult(_serialization.Model): + """The Advisor assessment result data structure. Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: The resource ID. + :ivar id: Assessment Id. :vartype id: str - :ivar name: The name of the resource. + :ivar name: Assessment Name. :vartype name: str - :ivar type: The type of the resource. + :ivar type: Resource Type. :vartype type: str + :ivar system_data: Metadata pertaining to creation and last modification of the resource. + :vartype system_data: ~azure.mgmt.advisor.models.SystemData + :ivar workload_id: Workload Id. + :vartype workload_id: str + :ivar workload_name: Workload Name. + :vartype workload_name: str + :ivar assessment_id: Assessment Id. + :vartype assessment_id: str + :ivar description: Assessment Type Description. + :vartype description: str + :ivar type_id: Assessment Type Id. + :vartype type_id: str + :ivar type_properties_type: Assessment Type. + :vartype type_properties_type: str + :ivar score: Assessment Score. + :vartype score: int + :ivar state: Assessment State. + :vartype state: str + :ivar type_version: Assessment Type Version. + :vartype type_version: str + :ivar locale: Assessment Type Locale. + :vartype locale: str """ _validation = { "id": {"readonly": True}, "name": {"readonly": True}, "type": {"readonly": True}, + "system_data": {"readonly": True}, + "workload_name": {"readonly": True}, + "assessment_id": {"readonly": True}, + "description": {"readonly": True}, + "type_properties_type": {"readonly": True}, + "score": {"readonly": True}, + "state": {"readonly": True}, + "type_version": {"readonly": True}, } _attribute_map = { "id": {"key": "id", "type": "str"}, "name": {"key": "name", "type": "str"}, "type": {"key": "type", "type": "str"}, + "system_data": {"key": "systemData", "type": "SystemData"}, + "workload_id": {"key": "properties.workloadId", "type": "str"}, + "workload_name": {"key": "properties.workloadName", "type": "str"}, + "assessment_id": {"key": "properties.assessmentId", "type": "str"}, + "description": {"key": "properties.description", "type": "str"}, + "type_id": {"key": "properties.typeId", "type": "str"}, + "type_properties_type": {"key": "properties.type", "type": "str"}, + "score": {"key": "properties.score", "type": "int"}, + "state": {"key": "properties.state", "type": "str"}, + "type_version": {"key": "properties.typeVersion", "type": "str"}, + "locale": {"key": "properties.locale", "type": "str"}, } - def __init__(self, **kwargs): - """ """ + def __init__( + self, + *, + workload_id: Optional[str] = None, + type_id: Optional[str] = None, + locale: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + :keyword workload_id: Workload Id. + :paramtype workload_id: str + :keyword type_id: Assessment Type Id. + :paramtype type_id: str + :keyword locale: Assessment Type Locale. + :paramtype locale: str + """ + super().__init__(**kwargs) + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.system_data: Optional["_models.SystemData"] = None + self.workload_id = workload_id + self.workload_name: Optional[str] = None + self.assessment_id: Optional[str] = None + self.description: Optional[str] = None + self.type_id = type_id + self.type_properties_type: Optional[str] = None + self.score: Optional[int] = None + self.state: Optional[str] = None + self.type_version: Optional[str] = None + self.locale = locale + + +class AssessmentTypeListResult(_serialization.Model): + """The Advisor assessment type list result data structure. + + :ivar value: List of Assessments Types. + :vartype value: list[~azure.mgmt.advisor.models.AssessmentTypeResult] + :ivar next_link: The URL to get the next set of Advisor assessments types, if there are any. + :vartype next_link: str + """ + + _attribute_map = { + "value": {"key": "value", "type": "[AssessmentTypeResult]"}, + "next_link": {"key": "nextLink", "type": "str"}, + } + + def __init__( + self, + *, + value: Optional[List["_models.AssessmentTypeResult"]] = None, + next_link: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + :keyword value: List of Assessments Types. + :paramtype value: list[~azure.mgmt.advisor.models.AssessmentTypeResult] + :keyword next_link: The URL to get the next set of Advisor assessments types, if there are any. + :paramtype next_link: str + """ + super().__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class AssessmentTypeResult(_serialization.Model): + """The Advisor assessment type result data structure. + + :ivar id: Assessment Type Id. + :vartype id: str + :ivar title: Assessment Type Title. + :vartype title: str + :ivar description: Assessment Type Description. + :vartype description: str + :ivar locale: Assessment Type Locale. + :vartype locale: str + :ivar version: Assessment Type Version. + :vartype version: str + """ + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "title": {"key": "title", "type": "str"}, + "description": {"key": "description", "type": "str"}, + "locale": {"key": "locale", "type": "str"}, + "version": {"key": "version", "type": "str"}, + } + + def __init__( + self, + *, + id: Optional[str] = None, # pylint: disable=redefined-builtin + title: Optional[str] = None, + description: Optional[str] = None, + locale: Optional[str] = None, + version: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + :keyword id: Assessment Type Id. + :paramtype id: str + :keyword title: Assessment Type Title. + :paramtype title: str + :keyword description: Assessment Type Description. + :paramtype description: str + :keyword locale: Assessment Type Locale. + :paramtype locale: str + :keyword version: Assessment Type Version. + :paramtype version: str + """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id = id + self.title = title + self.description = description + self.locale = locale + self.version = version class ConfigData(Resource): @@ -110,12 +444,17 @@ class ConfigData(Resource): Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: The resource ID. + :ivar id: Fully qualified resource ID for the resource. E.g. + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}". :vartype id: str :ivar name: The name of the resource. :vartype name: str - :ivar type: The type of the resource. + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.advisor.models.SystemData :ivar exclude: Exclude the resource from Advisor evaluations. Valid values: False (default) or True. :vartype exclude: bool @@ -123,6 +462,10 @@ class ConfigData(Resource): evaluation. Valid only for subscriptions. Valid values: 5 (default), 10, 15 or 20. Known values are: "5", "10", "15", and "20". :vartype low_cpu_threshold: str or ~azure.mgmt.advisor.models.CpuThreshold + :ivar duration: Minimum duration for Advisor low CPU utilization evaluation. Valid only for + subscriptions. Valid values: 7 (default), 14, 21, 30, 60 or 90. Known values are: "7", "14", + "21", "30", "60", and "90". + :vartype duration: str or ~azure.mgmt.advisor.models.Duration :ivar digests: Advisor digest configuration. Valid only for subscriptions. :vartype digests: list[~azure.mgmt.advisor.models.DigestConfig] """ @@ -131,14 +474,17 @@ class ConfigData(Resource): "id": {"readonly": True}, "name": {"readonly": True}, "type": {"readonly": True}, + "system_data": {"readonly": True}, } _attribute_map = { "id": {"key": "id", "type": "str"}, "name": {"key": "name", "type": "str"}, "type": {"key": "type", "type": "str"}, + "system_data": {"key": "systemData", "type": "SystemData"}, "exclude": {"key": "properties.exclude", "type": "bool"}, "low_cpu_threshold": {"key": "properties.lowCpuThreshold", "type": "str"}, + "duration": {"key": "properties.duration", "type": "str"}, "digests": {"key": "properties.digests", "type": "[DigestConfig]"}, } @@ -147,9 +493,10 @@ def __init__( *, exclude: Optional[bool] = None, low_cpu_threshold: Optional[Union[str, "_models.CpuThreshold"]] = None, + duration: Optional[Union[str, "_models.Duration"]] = None, digests: Optional[List["_models.DigestConfig"]] = None, - **kwargs - ): + **kwargs: Any + ) -> None: """ :keyword exclude: Exclude the resource from Advisor evaluations. Valid values: False (default) or True. @@ -158,12 +505,17 @@ def __init__( evaluation. Valid only for subscriptions. Valid values: 5 (default), 10, 15 or 20. Known values are: "5", "10", "15", and "20". :paramtype low_cpu_threshold: str or ~azure.mgmt.advisor.models.CpuThreshold + :keyword duration: Minimum duration for Advisor low CPU utilization evaluation. Valid only for + subscriptions. Valid values: 7 (default), 14, 21, 30, 60 or 90. Known values are: "7", "14", + "21", "30", "60", and "90". + :paramtype duration: str or ~azure.mgmt.advisor.models.Duration :keyword digests: Advisor digest configuration. Valid only for subscriptions. :paramtype digests: list[~azure.mgmt.advisor.models.DigestConfig] """ super().__init__(**kwargs) self.exclude = exclude self.low_cpu_threshold = low_cpu_threshold + self.duration = duration self.digests = digests @@ -182,8 +534,8 @@ class ConfigurationListResult(_serialization.Model): } def __init__( - self, *, value: Optional[List["_models.ConfigData"]] = None, next_link: Optional[str] = None, **kwargs - ): + self, *, value: Optional[List["_models.ConfigData"]] = None, next_link: Optional[str] = None, **kwargs: Any + ) -> None: """ :keyword value: The list of configurations. :paramtype value: list[~azure.mgmt.advisor.models.ConfigData] @@ -235,8 +587,8 @@ def __init__( categories: Optional[List[Union[str, "_models.Category"]]] = None, language: Optional[str] = None, state: Optional[Union[str, "_models.DigestConfigState"]] = None, - **kwargs - ): + **kwargs: Any + ) -> None: """ :keyword name: Name of digest configuration. Value is case-insensitive and must be unique within a subscription. @@ -265,6 +617,98 @@ def __init__( self.state = state +class ErrorAdditionalInfo(_serialization.Model): + """The resource management error additional info. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar type: The additional info type. + :vartype type: str + :ivar info: The additional info. + :vartype info: JSON + """ + + _validation = { + "type": {"readonly": True}, + "info": {"readonly": True}, + } + + _attribute_map = { + "type": {"key": "type", "type": "str"}, + "info": {"key": "info", "type": "object"}, + } + + def __init__(self, **kwargs: Any) -> None: + """ """ + super().__init__(**kwargs) + self.type: Optional[str] = None + self.info: Optional[JSON] = None + + +class ErrorDetail(_serialization.Model): + """The error detail. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar code: The error code. + :vartype code: str + :ivar message: The error message. + :vartype message: str + :ivar target: The error target. + :vartype target: str + :ivar details: The error details. + :vartype details: list[~azure.mgmt.advisor.models.ErrorDetail] + :ivar additional_info: The error additional info. + :vartype additional_info: list[~azure.mgmt.advisor.models.ErrorAdditionalInfo] + """ + + _validation = { + "code": {"readonly": True}, + "message": {"readonly": True}, + "target": {"readonly": True}, + "details": {"readonly": True}, + "additional_info": {"readonly": True}, + } + + _attribute_map = { + "code": {"key": "code", "type": "str"}, + "message": {"key": "message", "type": "str"}, + "target": {"key": "target", "type": "str"}, + "details": {"key": "details", "type": "[ErrorDetail]"}, + "additional_info": {"key": "additionalInfo", "type": "[ErrorAdditionalInfo]"}, + } + + def __init__(self, **kwargs: Any) -> None: + """ """ + super().__init__(**kwargs) + self.code: Optional[str] = None + self.message: Optional[str] = None + self.target: Optional[str] = None + self.details: Optional[List["_models.ErrorDetail"]] = None + self.additional_info: Optional[List["_models.ErrorAdditionalInfo"]] = None + + +class ErrorResponse(_serialization.Model): + """Common error response for all Azure Resource Manager APIs to return error details for failed + operations. (This also follows the OData error response format.). + + :ivar error: The error object. + :vartype error: ~azure.mgmt.advisor.models.ErrorDetail + """ + + _attribute_map = { + "error": {"key": "error", "type": "ErrorDetail"}, + } + + def __init__(self, *, error: Optional["_models.ErrorDetail"] = None, **kwargs: Any) -> None: + """ + :keyword error: The error object. + :paramtype error: ~azure.mgmt.advisor.models.ErrorDetail + """ + super().__init__(**kwargs) + self.error = error + + class MetadataEntity(_serialization.Model): """The metadata entity contract. @@ -304,8 +748,8 @@ def __init__( depends_on: Optional[List[str]] = None, applicable_scenarios: Optional[List[Union[str, "_models.Scenario"]]] = None, supported_values: Optional[List["_models.MetadataSupportedValueDetail"]] = None, - **kwargs - ): + **kwargs: Any + ) -> None: """ :keyword id: The resource Id of the metadata entity. :paramtype id: str @@ -347,8 +791,8 @@ class MetadataEntityListResult(_serialization.Model): } def __init__( - self, *, value: Optional[List["_models.MetadataEntity"]] = None, next_link: Optional[str] = None, **kwargs - ): + self, *, value: Optional[List["_models.MetadataEntity"]] = None, next_link: Optional[str] = None, **kwargs: Any + ) -> None: """ :keyword value: The list of metadata entities. :paramtype value: list[~azure.mgmt.advisor.models.MetadataEntity] @@ -379,8 +823,8 @@ def __init__( *, id: Optional[str] = None, # pylint: disable=redefined-builtin display_name: Optional[str] = None, - **kwargs - ): + **kwargs: Any + ) -> None: """ :keyword id: The id. :paramtype id: str @@ -419,8 +863,8 @@ def __init__( operation: Optional[str] = None, provider: Optional[str] = None, resource: Optional[str] = None, - **kwargs - ): + **kwargs: Any + ) -> None: """ :keyword description: The description of the operation. :paramtype description: str @@ -453,8 +897,8 @@ class OperationEntity(_serialization.Model): } def __init__( - self, *, name: Optional[str] = None, display: Optional["_models.OperationDisplayInfo"] = None, **kwargs - ): + self, *, name: Optional[str] = None, display: Optional["_models.OperationDisplayInfo"] = None, **kwargs: Any + ) -> None: """ :keyword name: Operation name: {provider}/{resource}/{operation}. :paramtype name: str @@ -481,8 +925,8 @@ class OperationEntityListResult(_serialization.Model): } def __init__( - self, *, next_link: Optional[str] = None, value: Optional[List["_models.OperationEntity"]] = None, **kwargs - ): + self, *, next_link: Optional[str] = None, value: Optional[List["_models.OperationEntity"]] = None, **kwargs: Any + ) -> None: """ :keyword next_link: The link used to get the next page of operations. :paramtype next_link: str @@ -494,70 +938,374 @@ def __init__( self.value = value -class ResourceMetadata(_serialization.Model): - """Recommendation resource metadata. +class PredictionRequest(_serialization.Model): + """Parameters for predict recommendation. - :ivar resource_id: Azure resource Id of the assessed resource. - :vartype resource_id: str - :ivar source: Source from which recommendation is generated. - :vartype source: str - :ivar action: The action to view resource. - :vartype action: dict[str, JSON] - :ivar singular: The singular user friendly name of resource type. eg: virtual machine. - :vartype singular: str - :ivar plural: The plural user friendly name of resource type. eg: virtual machines. - :vartype plural: str + :ivar prediction_type: Type of the prediction. "PredictiveRightsizing" + :vartype prediction_type: str or ~azure.mgmt.advisor.models.PredictionType + :ivar extended_properties: Extended properties are arguments specific for each prediction type. + :vartype extended_properties: JSON """ _attribute_map = { - "resource_id": {"key": "resourceId", "type": "str"}, - "source": {"key": "source", "type": "str"}, - "action": {"key": "action", "type": "{object}"}, - "singular": {"key": "singular", "type": "str"}, - "plural": {"key": "plural", "type": "str"}, + "prediction_type": {"key": "properties.predictionType", "type": "str"}, + "extended_properties": {"key": "properties.extendedProperties", "type": "object"}, } def __init__( self, *, - resource_id: Optional[str] = None, - source: Optional[str] = None, - action: Optional[Dict[str, JSON]] = None, - singular: Optional[str] = None, - plural: Optional[str] = None, - **kwargs - ): + prediction_type: Optional[Union[str, "_models.PredictionType"]] = None, + extended_properties: Optional[JSON] = None, + **kwargs: Any + ) -> None: """ - :keyword resource_id: Azure resource Id of the assessed resource. - :paramtype resource_id: str - :keyword source: Source from which recommendation is generated. - :paramtype source: str - :keyword action: The action to view resource. - :paramtype action: dict[str, JSON] - :keyword singular: The singular user friendly name of resource type. eg: virtual machine. - :paramtype singular: str - :keyword plural: The plural user friendly name of resource type. eg: virtual machines. - :paramtype plural: str + :keyword prediction_type: Type of the prediction. "PredictiveRightsizing" + :paramtype prediction_type: str or ~azure.mgmt.advisor.models.PredictionType + :keyword extended_properties: Extended properties are arguments specific for each prediction + type. + :paramtype extended_properties: JSON """ super().__init__(**kwargs) - self.resource_id = resource_id - self.source = source - self.action = action - self.singular = singular - self.plural = plural - + self.prediction_type = prediction_type + self.extended_properties = extended_properties -class ResourceRecommendationBase(Resource): # pylint: disable=too-many-instance-attributes - """Advisor Recommendation. - Variables are only populated by the server, and will be ignored when sending a request. +class PredictionResponse(_serialization.Model): + """Response used by predictions. - :ivar id: The resource ID. - :vartype id: str - :ivar name: The name of the resource. - :vartype name: str - :ivar type: The type of the resource. - :vartype type: str + :ivar extended_properties: Extended properties. + :vartype extended_properties: JSON + :ivar prediction_type: Type of the prediction. "PredictiveRightsizing" + :vartype prediction_type: str or ~azure.mgmt.advisor.models.PredictionType + :ivar category: The category of the recommendation. Known values are: "HighAvailability", + "Security", "Performance", "Cost", and "OperationalExcellence". + :vartype category: str or ~azure.mgmt.advisor.models.Category + :ivar impact: The business impact of the recommendation. Known values are: "High", "Medium", + and "Low". + :vartype impact: str or ~azure.mgmt.advisor.models.Impact + :ivar impacted_field: The resource type identified by Advisor. + :vartype impacted_field: str + :ivar last_updated: The most recent time that Advisor checked the validity of the + recommendation. + :vartype last_updated: ~datetime.datetime + :ivar short_description: A summary of the recommendation. + :vartype short_description: ~azure.mgmt.advisor.models.ShortDescription + """ + + _attribute_map = { + "extended_properties": {"key": "properties.extendedProperties", "type": "object"}, + "prediction_type": {"key": "properties.predictionType", "type": "str"}, + "category": {"key": "properties.category", "type": "str"}, + "impact": {"key": "properties.impact", "type": "str"}, + "impacted_field": {"key": "properties.impactedField", "type": "str"}, + "last_updated": {"key": "properties.lastUpdated", "type": "iso-8601"}, + "short_description": {"key": "properties.shortDescription", "type": "ShortDescription"}, + } + + def __init__( + self, + *, + extended_properties: Optional[JSON] = None, + prediction_type: Optional[Union[str, "_models.PredictionType"]] = None, + category: Optional[Union[str, "_models.Category"]] = None, + impact: Optional[Union[str, "_models.Impact"]] = None, + impacted_field: Optional[str] = None, + last_updated: Optional[datetime.datetime] = None, + short_description: Optional["_models.ShortDescription"] = None, + **kwargs: Any + ) -> None: + """ + :keyword extended_properties: Extended properties. + :paramtype extended_properties: JSON + :keyword prediction_type: Type of the prediction. "PredictiveRightsizing" + :paramtype prediction_type: str or ~azure.mgmt.advisor.models.PredictionType + :keyword category: The category of the recommendation. Known values are: "HighAvailability", + "Security", "Performance", "Cost", and "OperationalExcellence". + :paramtype category: str or ~azure.mgmt.advisor.models.Category + :keyword impact: The business impact of the recommendation. Known values are: "High", "Medium", + and "Low". + :paramtype impact: str or ~azure.mgmt.advisor.models.Impact + :keyword impacted_field: The resource type identified by Advisor. + :paramtype impacted_field: str + :keyword last_updated: The most recent time that Advisor checked the validity of the + recommendation. + :paramtype last_updated: ~datetime.datetime + :keyword short_description: A summary of the recommendation. + :paramtype short_description: ~azure.mgmt.advisor.models.ShortDescription + """ + super().__init__(**kwargs) + self.extended_properties = extended_properties + self.prediction_type = prediction_type + self.category = category + self.impact = impact + self.impacted_field = impacted_field + self.last_updated = last_updated + self.short_description = short_description + + +class RecommendationPropertiesResourceWorkload(_serialization.Model): + """The Workload that this Resource belongs to. + + :ivar id: The Id of the Workload. + :vartype id: str + :ivar name: The Name of the Workload. + :vartype name: str + """ + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + } + + def __init__( + self, + *, + id: Optional[str] = None, # pylint: disable=redefined-builtin + name: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + :keyword id: The Id of the Workload. + :paramtype id: str + :keyword name: The Name of the Workload. + :paramtype name: str + """ + super().__init__(**kwargs) + self.id = id + self.name = name + + +class RecommendationPropertiesReview(_serialization.Model): + """The Review that this Recommendation belongs to. + + :ivar id: The ARM Resource Id of the Review. + :vartype id: str + :ivar name: The Name of the Review. + :vartype name: str + """ + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + } + + def __init__( + self, + *, + id: Optional[str] = None, # pylint: disable=redefined-builtin + name: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + :keyword id: The ARM Resource Id of the Review. + :paramtype id: str + :keyword name: The Name of the Review. + :paramtype name: str + """ + super().__init__(**kwargs) + self.id = id + self.name = name + + +class RecommendationRejectBody(_serialization.Model): + """Recommendation reject body. + + :ivar reason_for_rejection: Reason for rejecting recommendation. Known values are: "NotARisk" + and "RiskAccepted". + :vartype reason_for_rejection: str or ~azure.mgmt.advisor.models.ReasonForRejectionName + """ + + _attribute_map = { + "reason_for_rejection": {"key": "reasonForRejection", "type": "str"}, + } + + def __init__( + self, *, reason_for_rejection: Optional[Union[str, "_models.ReasonForRejectionName"]] = None, **kwargs: Any + ) -> None: + """ + :keyword reason_for_rejection: Reason for rejecting recommendation. Known values are: + "NotARisk" and "RiskAccepted". + :paramtype reason_for_rejection: str or ~azure.mgmt.advisor.models.ReasonForRejectionName + """ + super().__init__(**kwargs) + self.reason_for_rejection = reason_for_rejection + + +class ResiliencyReview(_serialization.Model): + """The Advisor resiliency review data structure. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Fully qualified resource ID for the resource. E.g. + "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/ResiliencyReviews/{reviewId}". + :vartype id: str + :ivar name: Resource name E.g. "{guid}". + :vartype name: str + :ivar type: Resource type E.g. "Microsoft.Advisor/resiliencyReviews". + :vartype type: str + :ivar system_data: Metadata pertaining to creation and last modification of the resource. + :vartype system_data: ~azure.mgmt.advisor.models.SystemData + :ivar review_name: Review name. + :vartype review_name: str + :ivar workload_name: Workload Name. + :vartype workload_name: str + :ivar review_status: Review status. Known values are: "New", "InProgress", "Triaged", and + "Completed". + :vartype review_status: str or ~azure.mgmt.advisor.models.ReviewStatus + :ivar recommendations_count: Review recommendations count. + :vartype recommendations_count: int + :ivar published_at: Review last updated timestamp. + :vartype published_at: str + :ivar updated_at: Review last updated timestamp. + :vartype updated_at: str + """ + + _validation = { + "id": {"readonly": True}, + "name": {"readonly": True}, + "type": {"readonly": True}, + "system_data": {"readonly": True}, + "review_name": {"readonly": True}, + "workload_name": {"readonly": True}, + "review_status": {"readonly": True}, + "recommendations_count": {"readonly": True}, + "published_at": {"readonly": True}, + "updated_at": {"readonly": True}, + } + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + "type": {"key": "type", "type": "str"}, + "system_data": {"key": "systemData", "type": "SystemData"}, + "review_name": {"key": "properties.reviewName", "type": "str"}, + "workload_name": {"key": "properties.workloadName", "type": "str"}, + "review_status": {"key": "properties.reviewStatus", "type": "str"}, + "recommendations_count": {"key": "properties.recommendationsCount", "type": "int"}, + "published_at": {"key": "properties.publishedAt", "type": "str"}, + "updated_at": {"key": "properties.updatedAt", "type": "str"}, + } + + def __init__(self, **kwargs: Any) -> None: + """ """ + super().__init__(**kwargs) + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.system_data: Optional["_models.SystemData"] = None + self.review_name: Optional[str] = None + self.workload_name: Optional[str] = None + self.review_status: Optional[Union[str, "_models.ReviewStatus"]] = None + self.recommendations_count: Optional[int] = None + self.published_at: Optional[str] = None + self.updated_at: Optional[str] = None + + +class ResiliencyReviewCollection(_serialization.Model): + """Collection of Resiliency Reviews. + + All required parameters must be populated in order to send to server. + + :ivar value: List of resiliency reviews. Required. + :vartype value: list[~azure.mgmt.advisor.models.ResiliencyReview] + :ivar next_link: The URL to get the next set of Advisor resiliency reviews, if there are any. + :vartype next_link: str + """ + + _validation = { + "value": {"required": True}, + } + + _attribute_map = { + "value": {"key": "value", "type": "[ResiliencyReview]"}, + "next_link": {"key": "nextLink", "type": "str"}, + } + + def __init__( + self, *, value: List["_models.ResiliencyReview"], next_link: Optional[str] = None, **kwargs: Any + ) -> None: + """ + :keyword value: List of resiliency reviews. Required. + :paramtype value: list[~azure.mgmt.advisor.models.ResiliencyReview] + :keyword next_link: The URL to get the next set of Advisor resiliency reviews, if there are + any. + :paramtype next_link: str + """ + super().__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class ResourceMetadata(_serialization.Model): + """Recommendation resource metadata. + + :ivar resource_id: Azure resource Id of the assessed resource. + :vartype resource_id: str + :ivar source: Source from which recommendation is generated. + :vartype source: str + :ivar action: The action to view resource. + :vartype action: dict[str, JSON] + :ivar singular: The singular user friendly name of resource type. eg: virtual machine. + :vartype singular: str + :ivar plural: The plural user friendly name of resource type. eg: virtual machines. + :vartype plural: str + """ + + _attribute_map = { + "resource_id": {"key": "resourceId", "type": "str"}, + "source": {"key": "source", "type": "str"}, + "action": {"key": "action", "type": "{object}"}, + "singular": {"key": "singular", "type": "str"}, + "plural": {"key": "plural", "type": "str"}, + } + + def __init__( + self, + *, + resource_id: Optional[str] = None, + source: Optional[str] = None, + action: Optional[Dict[str, JSON]] = None, + singular: Optional[str] = None, + plural: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + :keyword resource_id: Azure resource Id of the assessed resource. + :paramtype resource_id: str + :keyword source: Source from which recommendation is generated. + :paramtype source: str + :keyword action: The action to view resource. + :paramtype action: dict[str, JSON] + :keyword singular: The singular user friendly name of resource type. eg: virtual machine. + :paramtype singular: str + :keyword plural: The plural user friendly name of resource type. eg: virtual machines. + :paramtype plural: str + """ + super().__init__(**kwargs) + self.resource_id = resource_id + self.source = source + self.action = action + self.singular = singular + self.plural = plural + + +class ResourceRecommendationBase(Resource): + """Advisor Recommendation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Fully qualified resource ID for the resource. E.g. + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}". + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.advisor.models.SystemData :ivar category: The category of the recommendation. Known values are: "HighAvailability", "Security", "Performance", "Cost", and "OperationalExcellence". :vartype category: str or ~azure.mgmt.advisor.models.Category @@ -575,6 +1323,9 @@ class ResourceRecommendationBase(Resource): # pylint: disable=too-many-instance :vartype metadata: dict[str, JSON] :ivar recommendation_type_id: The recommendation-type GUID. :vartype recommendation_type_id: str + :ivar risk: The potential risk of not implementing the recommendation. Known values are: + "Error", "Warning", and "None". + :vartype risk: str or ~azure.mgmt.advisor.models.Risk :ivar short_description: A summary of the recommendation. :vartype short_description: ~azure.mgmt.advisor.models.ShortDescription :ivar suppression_ids: The list of snoozed and dismissed rules for the recommendation. @@ -598,18 +1349,32 @@ class ResourceRecommendationBase(Resource): # pylint: disable=too-many-instance :ivar exposed_metadata_properties: The recommendation metadata properties exposed to customer to provide additional information. :vartype exposed_metadata_properties: dict[str, JSON] + :ivar tracked: If the Recommendation has Tracking enabled. + :vartype tracked: bool + :ivar tracked_properties: The properties of a tracked recommendation. + :vartype tracked_properties: ~azure.mgmt.advisor.models.TrackedRecommendationProperties + :ivar review: The Review that this Recommendation belongs to. + :vartype review: ~azure.mgmt.advisor.models.RecommendationPropertiesReview + :ivar resource_workload: The Workload that this Resource belongs to. + :vartype resource_workload: ~azure.mgmt.advisor.models.RecommendationPropertiesResourceWorkload + :ivar source_system: The Source System that this Recommendation originated from. + :vartype source_system: str + :ivar notes: Additional notes for the Recommendation. + :vartype notes: str """ _validation = { "id": {"readonly": True}, "name": {"readonly": True}, "type": {"readonly": True}, + "system_data": {"readonly": True}, } _attribute_map = { "id": {"key": "id", "type": "str"}, "name": {"key": "name", "type": "str"}, "type": {"key": "type", "type": "str"}, + "system_data": {"key": "systemData", "type": "SystemData"}, "category": {"key": "properties.category", "type": "str"}, "impact": {"key": "properties.impact", "type": "str"}, "impacted_field": {"key": "properties.impactedField", "type": "str"}, @@ -617,6 +1382,7 @@ class ResourceRecommendationBase(Resource): # pylint: disable=too-many-instance "last_updated": {"key": "properties.lastUpdated", "type": "iso-8601"}, "metadata": {"key": "properties.metadata", "type": "{object}"}, "recommendation_type_id": {"key": "properties.recommendationTypeId", "type": "str"}, + "risk": {"key": "properties.risk", "type": "str"}, "short_description": {"key": "properties.shortDescription", "type": "ShortDescription"}, "suppression_ids": {"key": "properties.suppressionIds", "type": "[str]"}, "extended_properties": {"key": "properties.extendedProperties", "type": "{str}"}, @@ -628,9 +1394,15 @@ class ResourceRecommendationBase(Resource): # pylint: disable=too-many-instance "actions": {"key": "properties.actions", "type": "[{object}]"}, "remediation": {"key": "properties.remediation", "type": "{object}"}, "exposed_metadata_properties": {"key": "properties.exposedMetadataProperties", "type": "{object}"}, + "tracked": {"key": "properties.tracked", "type": "bool"}, + "tracked_properties": {"key": "properties.trackedProperties", "type": "TrackedRecommendationProperties"}, + "review": {"key": "properties.review", "type": "RecommendationPropertiesReview"}, + "resource_workload": {"key": "properties.resourceWorkload", "type": "RecommendationPropertiesResourceWorkload"}, + "source_system": {"key": "properties.sourceSystem", "type": "str"}, + "notes": {"key": "properties.notes", "type": "str"}, } - def __init__( + def __init__( # pylint: disable=too-many-locals self, *, category: Optional[Union[str, "_models.Category"]] = None, @@ -640,6 +1412,7 @@ def __init__( last_updated: Optional[datetime.datetime] = None, metadata: Optional[Dict[str, JSON]] = None, recommendation_type_id: Optional[str] = None, + risk: Optional[Union[str, "_models.Risk"]] = None, short_description: Optional["_models.ShortDescription"] = None, suppression_ids: Optional[List[str]] = None, extended_properties: Optional[Dict[str, str]] = None, @@ -651,8 +1424,14 @@ def __init__( actions: Optional[List[Dict[str, JSON]]] = None, remediation: Optional[Dict[str, JSON]] = None, exposed_metadata_properties: Optional[Dict[str, JSON]] = None, - **kwargs - ): + tracked: Optional[bool] = None, + tracked_properties: Optional["_models.TrackedRecommendationProperties"] = None, + review: Optional["_models.RecommendationPropertiesReview"] = None, + resource_workload: Optional["_models.RecommendationPropertiesResourceWorkload"] = None, + source_system: Optional[str] = None, + notes: Optional[str] = None, + **kwargs: Any + ) -> None: """ :keyword category: The category of the recommendation. Known values are: "HighAvailability", "Security", "Performance", "Cost", and "OperationalExcellence". @@ -671,6 +1450,9 @@ def __init__( :paramtype metadata: dict[str, JSON] :keyword recommendation_type_id: The recommendation-type GUID. :paramtype recommendation_type_id: str + :keyword risk: The potential risk of not implementing the recommendation. Known values are: + "Error", "Warning", and "None". + :paramtype risk: str or ~azure.mgmt.advisor.models.Risk :keyword short_description: A summary of the recommendation. :paramtype short_description: ~azure.mgmt.advisor.models.ShortDescription :keyword suppression_ids: The list of snoozed and dismissed rules for the recommendation. @@ -694,6 +1476,19 @@ def __init__( :keyword exposed_metadata_properties: The recommendation metadata properties exposed to customer to provide additional information. :paramtype exposed_metadata_properties: dict[str, JSON] + :keyword tracked: If the Recommendation has Tracking enabled. + :paramtype tracked: bool + :keyword tracked_properties: The properties of a tracked recommendation. + :paramtype tracked_properties: ~azure.mgmt.advisor.models.TrackedRecommendationProperties + :keyword review: The Review that this Recommendation belongs to. + :paramtype review: ~azure.mgmt.advisor.models.RecommendationPropertiesReview + :keyword resource_workload: The Workload that this Resource belongs to. + :paramtype resource_workload: + ~azure.mgmt.advisor.models.RecommendationPropertiesResourceWorkload + :keyword source_system: The Source System that this Recommendation originated from. + :paramtype source_system: str + :keyword notes: Additional notes for the Recommendation. + :paramtype notes: str """ super().__init__(**kwargs) self.category = category @@ -703,6 +1498,7 @@ def __init__( self.last_updated = last_updated self.metadata = metadata self.recommendation_type_id = recommendation_type_id + self.risk = risk self.short_description = short_description self.suppression_ids = suppression_ids self.extended_properties = extended_properties @@ -714,6 +1510,12 @@ def __init__( self.actions = actions self.remediation = remediation self.exposed_metadata_properties = exposed_metadata_properties + self.tracked = tracked + self.tracked_properties = tracked_properties + self.review = review + self.resource_workload = resource_workload + self.source_system = source_system + self.notes = notes class ResourceRecommendationBaseListResult(_serialization.Model): @@ -735,8 +1537,8 @@ def __init__( *, next_link: Optional[str] = None, value: Optional[List["_models.ResourceRecommendationBase"]] = None, - **kwargs - ): + **kwargs: Any + ) -> None: """ :keyword next_link: The link used to get the next page of recommendations. :paramtype next_link: str @@ -748,6 +1550,71 @@ def __init__( self.value = value +class ScoreEntity(_serialization.Model): + """The details of Advisor Score. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar date: The date score was calculated. + :vartype date: str + :ivar score: The percentage score. + :vartype score: float + :ivar consumption_units: The consumption units for the score. + :vartype consumption_units: float + :ivar impacted_resource_count: The number of impacted resources. + :vartype impacted_resource_count: float + :ivar potential_score_increase: The potential percentage increase in overall score at + subscription level once all recommendations in this scope are implemented. + :vartype potential_score_increase: float + :ivar category_count: The count of impacted categories. + :vartype category_count: float + """ + + _validation = { + "category_count": {"readonly": True}, + } + + _attribute_map = { + "date": {"key": "date", "type": "str"}, + "score": {"key": "score", "type": "float"}, + "consumption_units": {"key": "consumptionUnits", "type": "float"}, + "impacted_resource_count": {"key": "impactedResourceCount", "type": "float"}, + "potential_score_increase": {"key": "potentialScoreIncrease", "type": "float"}, + "category_count": {"key": "categoryCount", "type": "float"}, + } + + def __init__( + self, + *, + date: Optional[str] = None, + score: Optional[float] = None, + consumption_units: Optional[float] = None, + impacted_resource_count: Optional[float] = None, + potential_score_increase: Optional[float] = None, + **kwargs: Any + ) -> None: + """ + :keyword date: The date score was calculated. + :paramtype date: str + :keyword score: The percentage score. + :paramtype score: float + :keyword consumption_units: The consumption units for the score. + :paramtype consumption_units: float + :keyword impacted_resource_count: The number of impacted resources. + :paramtype impacted_resource_count: float + :keyword potential_score_increase: The potential percentage increase in overall score at + subscription level once all recommendations in this scope are implemented. + :paramtype potential_score_increase: float + """ + super().__init__(**kwargs) + self.date = date + self.score = score + self.consumption_units = consumption_units + self.impacted_resource_count = impacted_resource_count + self.potential_score_increase = potential_score_increase + self.category_count: Optional[float] = None + + class ShortDescription(_serialization.Model): """A summary of the recommendation. @@ -763,7 +1630,7 @@ class ShortDescription(_serialization.Model): "solution": {"key": "solution", "type": "str"}, } - def __init__(self, *, problem: Optional[str] = None, solution: Optional[str] = None, **kwargs): + def __init__(self, *, problem: Optional[str] = None, solution: Optional[str] = None, **kwargs: Any) -> None: """ :keyword problem: The issue or opportunity identified by the recommendation and proposed solution. @@ -778,16 +1645,22 @@ def __init__(self, *, problem: Optional[str] = None, solution: Optional[str] = N class SuppressionContract(Resource): - """The details of the snoozed or dismissed rule; for example, the duration, name, and GUID associated with the rule. + """The details of the snoozed or dismissed rule; for example, the duration, name, and GUID + associated with the rule. Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: The resource ID. + :ivar id: Fully qualified resource ID for the resource. E.g. + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}". :vartype id: str :ivar name: The name of the resource. :vartype name: str - :ivar type: The type of the resource. + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.advisor.models.SystemData :ivar suppression_id: The GUID of the suppression. :vartype suppression_id: str :ivar ttl: The duration for which the suppression is valid. @@ -800,6 +1673,7 @@ class SuppressionContract(Resource): "id": {"readonly": True}, "name": {"readonly": True}, "type": {"readonly": True}, + "system_data": {"readonly": True}, "expiration_time_stamp": {"readonly": True}, } @@ -807,12 +1681,13 @@ class SuppressionContract(Resource): "id": {"key": "id", "type": "str"}, "name": {"key": "name", "type": "str"}, "type": {"key": "type", "type": "str"}, + "system_data": {"key": "systemData", "type": "SystemData"}, "suppression_id": {"key": "properties.suppressionId", "type": "str"}, "ttl": {"key": "properties.ttl", "type": "str"}, "expiration_time_stamp": {"key": "properties.expirationTimeStamp", "type": "iso-8601"}, } - def __init__(self, *, suppression_id: Optional[str] = None, ttl: Optional[str] = None, **kwargs): + def __init__(self, *, suppression_id: Optional[str] = None, ttl: Optional[str] = None, **kwargs: Any) -> None: """ :keyword suppression_id: The GUID of the suppression. :paramtype suppression_id: str @@ -822,7 +1697,7 @@ def __init__(self, *, suppression_id: Optional[str] = None, ttl: Optional[str] = super().__init__(**kwargs) self.suppression_id = suppression_id self.ttl = ttl - self.expiration_time_stamp = None + self.expiration_time_stamp: Optional[datetime.datetime] = None class SuppressionContractListResult(_serialization.Model): @@ -840,8 +1715,12 @@ class SuppressionContractListResult(_serialization.Model): } def __init__( - self, *, next_link: Optional[str] = None, value: Optional[List["_models.SuppressionContract"]] = None, **kwargs - ): + self, + *, + next_link: Optional[str] = None, + value: Optional[List["_models.SuppressionContract"]] = None, + **kwargs: Any + ) -> None: """ :keyword next_link: The link used to get the next page of suppressions. :paramtype next_link: str @@ -851,3 +1730,508 @@ def __init__( super().__init__(**kwargs) self.next_link = next_link self.value = value + + +class SystemData(_serialization.Model): + """Metadata pertaining to creation and last modification of the resource. + + :ivar created_by: The identity that created the resource. + :vartype created_by: str + :ivar created_by_type: The type of identity that created the resource. Known values are: + "User", "Application", "ManagedIdentity", and "Key". + :vartype created_by_type: str or ~azure.mgmt.advisor.models.CreatedByType + :ivar created_at: The timestamp of resource creation (UTC). + :vartype created_at: ~datetime.datetime + :ivar last_modified_by: The identity that last modified the resource. + :vartype last_modified_by: str + :ivar last_modified_by_type: The type of identity that last modified the resource. Known values + are: "User", "Application", "ManagedIdentity", and "Key". + :vartype last_modified_by_type: str or ~azure.mgmt.advisor.models.CreatedByType + :ivar last_modified_at: The timestamp of resource last modification (UTC). + :vartype last_modified_at: ~datetime.datetime + """ + + _attribute_map = { + "created_by": {"key": "createdBy", "type": "str"}, + "created_by_type": {"key": "createdByType", "type": "str"}, + "created_at": {"key": "createdAt", "type": "iso-8601"}, + "last_modified_by": {"key": "lastModifiedBy", "type": "str"}, + "last_modified_by_type": {"key": "lastModifiedByType", "type": "str"}, + "last_modified_at": {"key": "lastModifiedAt", "type": "iso-8601"}, + } + + def __init__( + self, + *, + created_by: Optional[str] = None, + created_by_type: Optional[Union[str, "_models.CreatedByType"]] = None, + created_at: Optional[datetime.datetime] = None, + last_modified_by: Optional[str] = None, + last_modified_by_type: Optional[Union[str, "_models.CreatedByType"]] = None, + last_modified_at: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """ + :keyword created_by: The identity that created the resource. + :paramtype created_by: str + :keyword created_by_type: The type of identity that created the resource. Known values are: + "User", "Application", "ManagedIdentity", and "Key". + :paramtype created_by_type: str or ~azure.mgmt.advisor.models.CreatedByType + :keyword created_at: The timestamp of resource creation (UTC). + :paramtype created_at: ~datetime.datetime + :keyword last_modified_by: The identity that last modified the resource. + :paramtype last_modified_by: str + :keyword last_modified_by_type: The type of identity that last modified the resource. Known + values are: "User", "Application", "ManagedIdentity", and "Key". + :paramtype last_modified_by_type: str or ~azure.mgmt.advisor.models.CreatedByType + :keyword last_modified_at: The timestamp of resource last modification (UTC). + :paramtype last_modified_at: ~datetime.datetime + """ + super().__init__(**kwargs) + self.created_by = created_by + self.created_by_type = created_by_type + self.created_at = created_at + self.last_modified_by = last_modified_by + self.last_modified_by_type = last_modified_by_type + self.last_modified_at = last_modified_at + + +class TimeSeriesEntityItem(_serialization.Model): + """The data from different aggregation levels. + + :ivar aggregation_level: The aggregation level of the score. Known values are: "week", "day", + and "month". + :vartype aggregation_level: str or ~azure.mgmt.advisor.models.Aggregated + :ivar score_history: The past score data. + :vartype score_history: list[~azure.mgmt.advisor.models.ScoreEntity] + """ + + _attribute_map = { + "aggregation_level": {"key": "aggregationLevel", "type": "str"}, + "score_history": {"key": "scoreHistory", "type": "[ScoreEntity]"}, + } + + def __init__( + self, + *, + aggregation_level: Optional[Union[str, "_models.Aggregated"]] = None, + score_history: Optional[List["_models.ScoreEntity"]] = None, + **kwargs: Any + ) -> None: + """ + :keyword aggregation_level: The aggregation level of the score. Known values are: "week", + "day", and "month". + :paramtype aggregation_level: str or ~azure.mgmt.advisor.models.Aggregated + :keyword score_history: The past score data. + :paramtype score_history: list[~azure.mgmt.advisor.models.ScoreEntity] + """ + super().__init__(**kwargs) + self.aggregation_level = aggregation_level + self.score_history = score_history + + +class TrackedRecommendationProperties(_serialization.Model): + """The tracked properties of a Recommendation. + + :ivar state: The state of the Recommendation. Known values are: "Approved", "Rejected", + "Pending", "InProgress", "Postponed", "Dismissed", and "Completed". + :vartype state: str or ~azure.mgmt.advisor.models.State + :ivar postponed_time: The time the Recommendation was postponed until. + :vartype postponed_time: ~datetime.datetime + :ivar reason: The reason the state of the Recommendation was changed. Known values are: + "ExcessiveInvestment", "TooComplex", "AlternativeSolution", "Incompatible", "Unclear", and + "RiskAccepted". + :vartype reason: str or ~azure.mgmt.advisor.models.Reason + :ivar priority: The Priority of the Recommendation. Known values are: "Critical", "High", + "Medium", "Low", and "Informational". + :vartype priority: str or ~azure.mgmt.advisor.models.Priority + """ + + _attribute_map = { + "state": {"key": "state", "type": "str"}, + "postponed_time": {"key": "postponedTime", "type": "iso-8601"}, + "reason": {"key": "reason", "type": "str"}, + "priority": {"key": "priority", "type": "str"}, + } + + def __init__( + self, + *, + state: Optional[Union[str, "_models.State"]] = None, + postponed_time: Optional[datetime.datetime] = None, + reason: Optional[Union[str, "_models.Reason"]] = None, + priority: Optional[Union[str, "_models.Priority"]] = None, + **kwargs: Any + ) -> None: + """ + :keyword state: The state of the Recommendation. Known values are: "Approved", "Rejected", + "Pending", "InProgress", "Postponed", "Dismissed", and "Completed". + :paramtype state: str or ~azure.mgmt.advisor.models.State + :keyword postponed_time: The time the Recommendation was postponed until. + :paramtype postponed_time: ~datetime.datetime + :keyword reason: The reason the state of the Recommendation was changed. Known values are: + "ExcessiveInvestment", "TooComplex", "AlternativeSolution", "Incompatible", "Unclear", and + "RiskAccepted". + :paramtype reason: str or ~azure.mgmt.advisor.models.Reason + :keyword priority: The Priority of the Recommendation. Known values are: "Critical", "High", + "Medium", "Low", and "Informational". + :paramtype priority: str or ~azure.mgmt.advisor.models.Priority + """ + super().__init__(**kwargs) + self.state = state + self.postponed_time = postponed_time + self.reason = reason + self.priority = priority + + +class TrackedRecommendationPropertiesPayload(_serialization.Model): + """TrackedRecommendationPropertiesPayload. + + :ivar properties: + :vartype properties: + ~azure.mgmt.advisor.models.TrackedRecommendationPropertiesPayloadProperties + """ + + _attribute_map = { + "properties": {"key": "properties", "type": "TrackedRecommendationPropertiesPayloadProperties"}, + } + + def __init__( + self, *, properties: Optional["_models.TrackedRecommendationPropertiesPayloadProperties"] = None, **kwargs: Any + ) -> None: + """ + :keyword properties: + :paramtype properties: + ~azure.mgmt.advisor.models.TrackedRecommendationPropertiesPayloadProperties + """ + super().__init__(**kwargs) + self.properties = properties + + +class TrackedRecommendationPropertiesPayloadProperties(_serialization.Model): # pylint: disable=name-too-long + """TrackedRecommendationPropertiesPayloadProperties. + + :ivar tracked_properties: The tracked properties of a Recommendation. + :vartype tracked_properties: ~azure.mgmt.advisor.models.TrackedRecommendationProperties + """ + + _attribute_map = { + "tracked_properties": {"key": "trackedProperties", "type": "TrackedRecommendationProperties"}, + } + + def __init__( + self, *, tracked_properties: Optional["_models.TrackedRecommendationProperties"] = None, **kwargs: Any + ) -> None: + """ + :keyword tracked_properties: The tracked properties of a Recommendation. + :paramtype tracked_properties: ~azure.mgmt.advisor.models.TrackedRecommendationProperties + """ + super().__init__(**kwargs) + self.tracked_properties = tracked_properties + + +class TriageRecommendation(_serialization.Model): + """Triage recommendation data structure. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Fully qualified resource ID for the resource. E.g. + "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/ResiliencyReviews/{reviewId}/providers/Microsoft.Advisor/triageRecommendation/{recommendationId}". + :vartype id: str + :ivar name: Resource name E.g. "{guid}". + :vartype name: str + :ivar type: Resource type E.g. "Microsoft.Advisor/triageRecommendation". + :vartype type: str + :ivar system_data: Metadata pertaining to creation and last modification of the resource. + :vartype system_data: ~azure.mgmt.advisor.models.SystemData + :ivar review_id: Review id. + :vartype review_id: str + :ivar title: Recommendation label. + :vartype title: str + :ivar priority: Recommendation priority. Known values are: "High", "Medium", and "Low". + :vartype priority: str or ~azure.mgmt.advisor.models.PriorityName + :ivar applies_to_subscriptions: List of subscription ids. + :vartype applies_to_subscriptions: list[str] + :ivar recommendation_status: Recommendation status. Known values are: "Approved", "Rejected", + and "Pending". + :vartype recommendation_status: str or ~azure.mgmt.advisor.models.RecommendationStatusName + :ivar updated_at: Recommendation potential benefit. + :vartype updated_at: str + :ivar reject_reason: Recommendation rejection reason. + :vartype reject_reason: str + :ivar potential_benefits: Recommendation potential benefit. + :vartype potential_benefits: str + :ivar description: Recommendation description. + :vartype description: str + :ivar notes: Recommendation notes. + :vartype notes: str + """ + + _validation = { + "id": {"readonly": True}, + "name": {"readonly": True}, + "type": {"readonly": True}, + "system_data": {"readonly": True}, + "review_id": {"readonly": True}, + "title": {"readonly": True}, + "priority": {"readonly": True}, + "applies_to_subscriptions": {"readonly": True}, + "recommendation_status": {"readonly": True}, + "updated_at": {"readonly": True}, + "reject_reason": {"readonly": True}, + "potential_benefits": {"readonly": True}, + "description": {"readonly": True}, + "notes": {"readonly": True}, + } + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + "type": {"key": "type", "type": "str"}, + "system_data": {"key": "systemData", "type": "SystemData"}, + "review_id": {"key": "properties.reviewId", "type": "str"}, + "title": {"key": "properties.title", "type": "str"}, + "priority": {"key": "properties.priority", "type": "str"}, + "applies_to_subscriptions": {"key": "properties.appliesToSubscriptions", "type": "[str]"}, + "recommendation_status": {"key": "properties.recommendationStatus", "type": "str"}, + "updated_at": {"key": "properties.updatedAt", "type": "str"}, + "reject_reason": {"key": "properties.rejectReason", "type": "str"}, + "potential_benefits": {"key": "properties.potentialBenefits", "type": "str"}, + "description": {"key": "properties.description", "type": "str"}, + "notes": {"key": "properties.notes", "type": "str"}, + } + + def __init__(self, **kwargs: Any) -> None: + """ """ + super().__init__(**kwargs) + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.system_data: Optional["_models.SystemData"] = None + self.review_id: Optional[str] = None + self.title: Optional[str] = None + self.priority: Optional[Union[str, "_models.PriorityName"]] = None + self.applies_to_subscriptions: Optional[List[str]] = None + self.recommendation_status: Optional[Union[str, "_models.RecommendationStatusName"]] = None + self.updated_at: Optional[str] = None + self.reject_reason: Optional[str] = None + self.potential_benefits: Optional[str] = None + self.description: Optional[str] = None + self.notes: Optional[str] = None + + +class TriageRecommendationCollection(_serialization.Model): + """Collection of Advisor triage recommendations. + + All required parameters must be populated in order to send to server. + + :ivar value: List of triage recommendations. Required. + :vartype value: list[~azure.mgmt.advisor.models.TriageRecommendation] + :ivar next_link: The URL to get the next set of triage recommendations, if there are any. + :vartype next_link: str + """ + + _validation = { + "value": {"required": True}, + } + + _attribute_map = { + "value": {"key": "value", "type": "[TriageRecommendation]"}, + "next_link": {"key": "nextLink", "type": "str"}, + } + + def __init__( + self, *, value: List["_models.TriageRecommendation"], next_link: Optional[str] = None, **kwargs: Any + ) -> None: + """ + :keyword value: List of triage recommendations. Required. + :paramtype value: list[~azure.mgmt.advisor.models.TriageRecommendation] + :keyword next_link: The URL to get the next set of triage recommendations, if there are any. + :paramtype next_link: str + """ + super().__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class TriageResource(ProxyResource): + """Triage resource data structure. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Fully qualified resource ID for the resource. E.g. + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}". + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.advisor.models.SystemData + :ivar review_id: Unique identifier for the review resource this triageResource belongs to. + :vartype review_id: str + :ivar recommendation_id: Unique identifier for the recommendation resource this triageResource + belongs to. + :vartype recommendation_id: str + :ivar subscription_id: Unique identifier for the subscription resource this triageResource + belongs to. + :vartype subscription_id: str + :ivar resource_group: Name of the resource group this triageResource belongs to. + :vartype resource_group: str + :ivar resource_type: Type of resource this triageResource corresponds to e.g. "Cosmos DB". + :vartype resource_type: str + :ivar resource_id: Full Azure resource id path of the resource this triageResource corresponds + to. + :vartype resource_id: str + :ivar resource_name: Name of the resource this triageResource corresponds to. + :vartype resource_name: str + """ + + _validation = { + "id": {"readonly": True}, + "name": {"readonly": True}, + "type": {"readonly": True}, + "system_data": {"readonly": True}, + "review_id": {"readonly": True}, + "recommendation_id": {"readonly": True}, + "subscription_id": {"readonly": True}, + "resource_group": {"readonly": True}, + "resource_type": {"readonly": True}, + "resource_id": {"readonly": True}, + "resource_name": {"readonly": True}, + } + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + "type": {"key": "type", "type": "str"}, + "system_data": {"key": "systemData", "type": "SystemData"}, + "review_id": {"key": "properties.reviewId", "type": "str"}, + "recommendation_id": {"key": "properties.recommendationId", "type": "str"}, + "subscription_id": {"key": "properties.subscriptionId", "type": "str"}, + "resource_group": {"key": "properties.resourceGroup", "type": "str"}, + "resource_type": {"key": "properties.resourceType", "type": "str"}, + "resource_id": {"key": "properties.resourceId", "type": "str"}, + "resource_name": {"key": "properties.resourceName", "type": "str"}, + } + + def __init__(self, **kwargs: Any) -> None: + """ """ + super().__init__(**kwargs) + self.review_id: Optional[str] = None + self.recommendation_id: Optional[str] = None + self.subscription_id: Optional[str] = None + self.resource_group: Optional[str] = None + self.resource_type: Optional[str] = None + self.resource_id: Optional[str] = None + self.resource_name: Optional[str] = None + + +class TriageResourceCollection(_serialization.Model): + """Collection of Advisor triage resources. + + All required parameters must be populated in order to send to server. + + :ivar value: List of triage resources. Required. + :vartype value: list[~azure.mgmt.advisor.models.TriageResource] + :ivar next_link: The URL to get the next set of triage resources, if there are any. + :vartype next_link: str + """ + + _validation = { + "value": {"required": True}, + } + + _attribute_map = { + "value": {"key": "value", "type": "[TriageResource]"}, + "next_link": {"key": "nextLink", "type": "str"}, + } + + def __init__( + self, *, value: List["_models.TriageResource"], next_link: Optional[str] = None, **kwargs: Any + ) -> None: + """ + :keyword value: List of triage resources. Required. + :paramtype value: list[~azure.mgmt.advisor.models.TriageResource] + :keyword next_link: The URL to get the next set of triage resources, if there are any. + :paramtype next_link: str + """ + super().__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class WorkloadListResult(_serialization.Model): + """The Workload list result data structure. + + :ivar value: List of Workload. + :vartype value: list[~azure.mgmt.advisor.models.WorkloadResult] + :ivar next_link: The URL to get the next set of Workloads, if there are any. + :vartype next_link: str + """ + + _attribute_map = { + "value": {"key": "value", "type": "[WorkloadResult]"}, + "next_link": {"key": "nextLink", "type": "str"}, + } + + def __init__( + self, *, value: Optional[List["_models.WorkloadResult"]] = None, next_link: Optional[str] = None, **kwargs: Any + ) -> None: + """ + :keyword value: List of Workload. + :paramtype value: list[~azure.mgmt.advisor.models.WorkloadResult] + :keyword next_link: The URL to get the next set of Workloads, if there are any. + :paramtype next_link: str + """ + super().__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class WorkloadResult(_serialization.Model): + """The Workload result data structure. + + :ivar id: Workload Id. + :vartype id: str + :ivar name: Workload Name. + :vartype name: str + :ivar subscription_id: Subscription Id. + :vartype subscription_id: str + :ivar subscription_name: Subscription Name. + :vartype subscription_name: str + """ + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + "subscription_id": {"key": "subscriptionId", "type": "str"}, + "subscription_name": {"key": "subscriptionName", "type": "str"}, + } + + def __init__( + self, + *, + id: Optional[str] = None, # pylint: disable=redefined-builtin + name: Optional[str] = None, + subscription_id: Optional[str] = None, + subscription_name: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + :keyword id: Workload Id. + :paramtype id: str + :keyword name: Workload Name. + :paramtype name: str + :keyword subscription_id: Subscription Id. + :paramtype subscription_id: str + :keyword subscription_name: Subscription Name. + :paramtype subscription_name: str + """ + super().__init__(**kwargs) + self.id = id + self.name = name + self.subscription_id = subscription_id + self.subscription_name = subscription_name diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/__init__.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/__init__.py index f1f93e70a274..b473aac1d2ed 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/__init__.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/__init__.py @@ -5,15 +5,29 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position -from ._recommendation_metadata_operations import RecommendationMetadataOperations -from ._configurations_operations import ConfigurationsOperations -from ._recommendations_operations import RecommendationsOperations -from ._operations import Operations -from ._suppressions_operations import SuppressionsOperations +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + +from ._recommendation_metadata_operations import RecommendationMetadataOperations # type: ignore +from ._configurations_operations import ConfigurationsOperations # type: ignore +from ._recommendations_operations import RecommendationsOperations # type: ignore +from ._operations import Operations # type: ignore +from ._suppressions_operations import SuppressionsOperations # type: ignore +from ._advisor_management_client_operations import AdvisorManagementClientOperationsMixin # type: ignore +from ._advisor_scores_operations import AdvisorScoresOperations # type: ignore +from ._assessments_operations import AssessmentsOperations # type: ignore +from ._assessment_types_operations import AssessmentTypesOperations # type: ignore +from ._workloads_operations import WorkloadsOperations # type: ignore +from ._resiliency_reviews_operations import ResiliencyReviewsOperations # type: ignore +from ._triage_recommendations_operations import TriageRecommendationsOperations # type: ignore +from ._triage_resources_operations import TriageResourcesOperations # type: ignore from ._patch import __all__ as _patch_all -from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import * from ._patch import patch_sdk as _patch_sdk __all__ = [ @@ -22,6 +36,14 @@ "RecommendationsOperations", "Operations", "SuppressionsOperations", + "AdvisorManagementClientOperationsMixin", + "AdvisorScoresOperations", + "AssessmentsOperations", + "AssessmentTypesOperations", + "WorkloadsOperations", + "ResiliencyReviewsOperations", + "TriageRecommendationsOperations", + "TriageResourcesOperations", ] -__all__.extend([p for p in _patch_all if p not in __all__]) +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_advisor_management_client_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_advisor_management_client_operations.py new file mode 100644 index 000000000000..032d41e8d2c9 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_advisor_management_client_operations.py @@ -0,0 +1,170 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from io import IOBase +from typing import Any, Callable, Dict, IO, Optional, TypeVar, Union, overload + +from azure.core import PipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Serializer +from .._utils.utils import ClientMixinABC + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + + +def build_predict_request(subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/predict") + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +class AdvisorManagementClientOperationsMixin(ClientMixinABC[PipelineClient, AdvisorManagementClientConfiguration]): + + @overload + def predict( + self, prediction_request: _models.PredictionRequest, *, content_type: str = "application/json", **kwargs: Any + ) -> _models.PredictionResponse: + """Predicts a recommendation. + + Predicts a recommendation. + + :param prediction_request: Parameters for predict recommendation. Required. + :type prediction_request: ~azure.mgmt.advisor.models.PredictionRequest + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: PredictionResponse or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.PredictionResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def predict( + self, prediction_request: IO[bytes], *, content_type: str = "application/json", **kwargs: Any + ) -> _models.PredictionResponse: + """Predicts a recommendation. + + Predicts a recommendation. + + :param prediction_request: Parameters for predict recommendation. Required. + :type prediction_request: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: PredictionResponse or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.PredictionResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def predict( + self, prediction_request: Union[_models.PredictionRequest, IO[bytes]], **kwargs: Any + ) -> _models.PredictionResponse: + """Predicts a recommendation. + + Predicts a recommendation. + + :param prediction_request: Parameters for predict recommendation. Is either a PredictionRequest + type or a IO[bytes] type. Required. + :type prediction_request: ~azure.mgmt.advisor.models.PredictionRequest or IO[bytes] + :return: PredictionResponse or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.PredictionResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.PredictionResponse] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _json = None + _content = None + if isinstance(prediction_request, (IOBase, bytes)): + _content = prediction_request + else: + _json = self._serialize.body(prediction_request, "PredictionRequest") + + _request = build_predict_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + content_type=content_type, + json=_json, + content=_content, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("PredictionResponse", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_advisor_scores_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_advisor_scores_operations.py new file mode 100644 index 000000000000..4b8e7d0f01eb --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_advisor_scores_operations.py @@ -0,0 +1,204 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from typing import Any, Callable, Dict, Optional, TypeVar + +from azure.core import PipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + + +def build_list_request(subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/advisorScore") + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_get_request(name: str, subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/advisorScore/{name}") + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "name": _SERIALIZER.url("name", name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +class AdvisorScoresOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.AdvisorManagementClient`'s + :attr:`advisor_scores` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list(self, **kwargs: Any) -> _models.AdvisorScoreResponse: + """Gets the list of advisor scores. + + :return: AdvisorScoreResponse or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AdvisorScoreResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.AdvisorScoreResponse] = kwargs.pop("cls", None) + + _request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("AdvisorScoreResponse", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get(self, name: str, **kwargs: Any) -> _models.AdvisorScoreEntity: + """Gets the advisor score. + + :param name: The scope of Advisor score entity. Required. + :type name: str + :return: AdvisorScoreEntity or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AdvisorScoreEntity + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.AdvisorScoreEntity] = kwargs.pop("cls", None) + + _request = build_get_request( + name=name, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("AdvisorScoreEntity", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_assessment_types_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_assessment_types_operations.py new file mode 100644 index 000000000000..61efd2dbe0f9 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_assessment_types_operations.py @@ -0,0 +1,158 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from typing import Any, Callable, Dict, Iterable, Optional, TypeVar +import urllib.parse + +from azure.core import PipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + + +def build_list_request(subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/assessmentTypes") + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +class AssessmentTypesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.AdvisorManagementClient`'s + :attr:`assessment_types` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list(self, **kwargs: Any) -> Iterable["_models.AssessmentTypeResult"]: + """Get assessment types list. + + Get list of Azure Advisor assessment types. + + :return: An iterator like instance of either AssessmentTypeResult or the result of + cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.AssessmentTypeResult] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.AssessmentTypeListResult] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + def extract_data(pipeline_response): + deserialized = self._deserialize("AssessmentTypeListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_assessments_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_assessments_operations.py new file mode 100644 index 000000000000..4a70f54a86e3 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_assessments_operations.py @@ -0,0 +1,482 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from io import IOBase +from typing import Any, Callable, Dict, IO, Iterable, Optional, TypeVar, Union, overload +import urllib.parse + +from azure.core import PipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + + +def build_delete_request(assessment_name: str, subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/assessments/{assessmentName}" + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "assessmentName": _SERIALIZER.url("assessment_name", assessment_name, "str", pattern=r"^[-0-9a-zA-Z_]{1,63}$"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_get_request(assessment_name: str, subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/assessments/{assessmentName}" + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "assessmentName": _SERIALIZER.url("assessment_name", assessment_name, "str", pattern=r"^[-0-9a-zA-Z_]{1,63}$"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_put_request(assessment_name: str, subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/assessments/{assessmentName}" + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "assessmentName": _SERIALIZER.url("assessment_name", assessment_name, "str", pattern=r"^[-0-9a-zA-Z_]{1,63}$"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_list_request( + subscription_id: str, *, top: Optional[str] = None, skiptoken: Optional[str] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/assessments") + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if top is not None: + _params["$top"] = _SERIALIZER.query("top", top, "str") + if skiptoken is not None: + _params["$skiptoken"] = _SERIALIZER.query("skiptoken", skiptoken, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +class AssessmentsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.AdvisorManagementClient`'s + :attr:`assessments` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def delete(self, assessment_name: str, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-statements + """Delete existing assessment. + + Delete a existing Azure Advisor assessment. + + :param assessment_name: Advisor assessment name. Required. + :type assessment_name: str + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_delete_request( + assessment_name=assessment_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace + def get(self, assessment_name: str, **kwargs: Any) -> _models.AssessmentResult: + """Get existing assessment. + + Get a existing Azure Advisor assessment. + + :param assessment_name: Advisor assessment name. Required. + :type assessment_name: str + :return: AssessmentResult or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AssessmentResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.AssessmentResult] = kwargs.pop("cls", None) + + _request = build_get_request( + assessment_name=assessment_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("AssessmentResult", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + def put( + self, + assessment_name: str, + assessment_contract: _models.AssessmentResult, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> _models.AssessmentResult: + """Create/Overwrite Azure Advisor assessment. + + Create or Overwrite Azure Advisor assessment resource. + + :param assessment_name: Advisor assessment name. Required. + :type assessment_name: str + :param assessment_contract: The Azure Advisor assessment data structure. Required. + :type assessment_contract: ~azure.mgmt.advisor.models.AssessmentResult + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: AssessmentResult or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AssessmentResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def put( + self, + assessment_name: str, + assessment_contract: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> _models.AssessmentResult: + """Create/Overwrite Azure Advisor assessment. + + Create or Overwrite Azure Advisor assessment resource. + + :param assessment_name: Advisor assessment name. Required. + :type assessment_name: str + :param assessment_contract: The Azure Advisor assessment data structure. Required. + :type assessment_contract: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: AssessmentResult or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AssessmentResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def put( + self, assessment_name: str, assessment_contract: Union[_models.AssessmentResult, IO[bytes]], **kwargs: Any + ) -> _models.AssessmentResult: + """Create/Overwrite Azure Advisor assessment. + + Create or Overwrite Azure Advisor assessment resource. + + :param assessment_name: Advisor assessment name. Required. + :type assessment_name: str + :param assessment_contract: The Azure Advisor assessment data structure. Is either a + AssessmentResult type or a IO[bytes] type. Required. + :type assessment_contract: ~azure.mgmt.advisor.models.AssessmentResult or IO[bytes] + :return: AssessmentResult or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.AssessmentResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.AssessmentResult] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _json = None + _content = None + if isinstance(assessment_contract, (IOBase, bytes)): + _content = assessment_contract + else: + _json = self._serialize.body(assessment_contract, "AssessmentResult") + + _request = build_put_request( + assessment_name=assessment_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + content_type=content_type, + json=_json, + content=_content, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("AssessmentResult", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def list( + self, top: Optional[str] = None, skiptoken: Optional[str] = None, **kwargs: Any + ) -> Iterable["_models.AssessmentResult"]: + """Get list of assessment. + + Get list of Azure Advisor assessment. + + :param top: Limit the result to the specified number of rows. Default value is None. + :type top: str + :param skiptoken: The page-continuation token to use with a paged version of this API. Default + value is None. + :type skiptoken: str + :return: An iterator like instance of either AssessmentResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.AssessmentResult] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.AssessmentListResult] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + subscription_id=self._config.subscription_id, + top=top, + skiptoken=skiptoken, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + def extract_data(pipeline_response): + deserialized = self._deserialize("AssessmentListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_configurations_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_configurations_operations.py index 6b071d45b54f..75496499ce95 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_configurations_operations.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_configurations_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,10 +6,12 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys +from collections.abc import MutableMapping +from io import IOBase from typing import Any, Callable, Dict, IO, Iterable, Optional, TypeVar, Union, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -20,20 +22,15 @@ ) from azure.core.paging import ItemPaged from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import HttpRequest, HttpResponse from azure.core.tracing.decorator import distributed_trace from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models as _models -from .._serialization import Serializer -from .._vendor import _convert_request, _format_url_section +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -45,7 +42,7 @@ def build_list_by_subscription_request(subscription_id: str, **kwargs: Any) -> H _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -54,7 +51,7 @@ def build_list_by_subscription_request(subscription_id: str, **kwargs: Any) -> H "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -71,20 +68,20 @@ def build_create_in_subscription_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] - content_type = kwargs.pop("content_type", _headers.pop("Content-Type", None)) # type: Optional[str] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/configurations/{configurationName}" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "configurationName": _SERIALIZER.url("configuration_name", configuration_name, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -101,20 +98,20 @@ def build_list_by_resource_group_request(resource_group: str, subscription_id: s _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Advisor/configurations", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroup": _SERIALIZER.url("resource_group", resource_group, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -131,22 +128,22 @@ def build_create_in_resource_group_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] - content_type = kwargs.pop("content_type", _headers.pop("Content-Type", None)) # type: Optional[str] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Advisor/configurations/{configurationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "configurationName": _SERIALIZER.url("configuration_name", configuration_name, "str"), "resourceGroup": _SERIALIZER.url("resource_group", resource_group, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -173,10 +170,10 @@ class ConfigurationsOperations: def __init__(self, *args, **kwargs): input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace def list_by_subscription(self, **kwargs: Any) -> Iterable["_models.ConfigData"]: @@ -185,7 +182,6 @@ def list_by_subscription(self, **kwargs: Any) -> Iterable["_models.ConfigData"]: Retrieve Azure Advisor configurations and also retrieve configurations of contained resource groups. - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either ConfigData or the result of cls(response) :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.ConfigData] :raises ~azure.core.exceptions.HttpResponseError: @@ -193,12 +189,10 @@ def list_by_subscription(self, **kwargs: Any) -> Iterable["_models.ConfigData"]: _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ConfigurationListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ConfigurationListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -209,15 +203,13 @@ def list_by_subscription(self, **kwargs: Any) -> Iterable["_models.ConfigData"]: def prepare_request(next_link=None): if not next_link: - request = build_list_by_subscription_request( + _request = build_list_by_subscription_request( subscription_id=self._config.subscription_id, api_version=api_version, - template_url=self.list_by_subscription.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -229,26 +221,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request def extract_data(pipeline_response): deserialized = self._deserialize("ConfigurationListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, iter(list_of_elem) def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -261,8 +253,6 @@ def get_next(next_link=None): return ItemPaged(get_next, extract_data) - list_by_subscription.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/configurations"} # type: ignore - @overload def create_in_subscription( self, @@ -285,7 +275,6 @@ def create_in_subscription( :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: @@ -295,7 +284,7 @@ def create_in_subscription( def create_in_subscription( self, configuration_name: Union[str, _models.ConfigurationName], - config_contract: IO, + config_contract: IO[bytes], *, content_type: str = "application/json", **kwargs: Any @@ -309,11 +298,10 @@ def create_in_subscription( Required. :type configuration_name: str or ~azure.mgmt.advisor.models.ConfigurationName :param config_contract: The Azure Advisor configuration data structure. Required. - :type config_contract: IO + :type config_contract: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: @@ -323,7 +311,7 @@ def create_in_subscription( def create_in_subscription( self, configuration_name: Union[str, _models.ConfigurationName], - config_contract: Union[_models.ConfigData, IO], + config_contract: Union[_models.ConfigData, IO[bytes]], **kwargs: Any ) -> _models.ConfigData: """Create/Overwrite Azure Advisor configuration. @@ -334,18 +322,14 @@ def create_in_subscription( :param configuration_name: Advisor configuration name. Value must be 'default'. "default" Required. :type configuration_name: str or ~azure.mgmt.advisor.models.ConfigurationName - :param config_contract: The Azure Advisor configuration data structure. Is either a model type - or a IO type. Required. - :type config_contract: ~azure.mgmt.advisor.models.ConfigData or IO - :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. - Default value is None. - :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response + :param config_contract: The Azure Advisor configuration data structure. Is either a ConfigData + type or a IO[bytes] type. Required. + :type config_contract: ~azure.mgmt.advisor.models.ConfigData or IO[bytes] :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -356,36 +340,33 @@ def create_in_subscription( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - content_type = kwargs.pop("content_type", _headers.pop("Content-Type", None)) # type: Optional[str] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ConfigData] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.ConfigData] = kwargs.pop("cls", None) content_type = content_type or "application/json" _json = None _content = None - if isinstance(config_contract, (IO, bytes)): + if isinstance(config_contract, (IOBase, bytes)): _content = config_contract else: _json = self._serialize.body(config_contract, "ConfigData") - request = build_create_in_subscription_request( + _request = build_create_in_subscription_request( configuration_name=configuration_name, subscription_id=self._config.subscription_id, api_version=api_version, content_type=content_type, json=_json, content=_content, - template_url=self.create_in_subscription.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -395,14 +376,12 @@ def create_in_subscription( error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("ConfigData", pipeline_response) + deserialized = self._deserialize("ConfigData", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - create_in_subscription.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/configurations/{configurationName}"} # type: ignore + return deserialized # type: ignore @distributed_trace def list_by_resource_group(self, resource_group: str, **kwargs: Any) -> Iterable["_models.ConfigData"]: @@ -412,7 +391,6 @@ def list_by_resource_group(self, resource_group: str, **kwargs: Any) -> Iterable :param resource_group: The name of the Azure resource group. Required. :type resource_group: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either ConfigData or the result of cls(response) :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.ConfigData] :raises ~azure.core.exceptions.HttpResponseError: @@ -420,12 +398,10 @@ def list_by_resource_group(self, resource_group: str, **kwargs: Any) -> Iterable _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ConfigurationListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ConfigurationListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -436,16 +412,14 @@ def list_by_resource_group(self, resource_group: str, **kwargs: Any) -> Iterable def prepare_request(next_link=None): if not next_link: - request = build_list_by_resource_group_request( + _request = build_list_by_resource_group_request( resource_group=resource_group, subscription_id=self._config.subscription_id, api_version=api_version, - template_url=self.list_by_resource_group.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -457,26 +431,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request def extract_data(pipeline_response): deserialized = self._deserialize("ConfigurationListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return None, iter(list_of_elem) def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -489,8 +463,6 @@ def get_next(next_link=None): return ItemPaged(get_next, extract_data) - list_by_resource_group.metadata = {"url": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Advisor/configurations"} # type: ignore - @overload def create_in_resource_group( self, @@ -515,7 +487,6 @@ def create_in_resource_group( :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: @@ -526,7 +497,7 @@ def create_in_resource_group( self, configuration_name: Union[str, _models.ConfigurationName], resource_group: str, - config_contract: IO, + config_contract: IO[bytes], *, content_type: str = "application/json", **kwargs: Any @@ -541,11 +512,10 @@ def create_in_resource_group( :param resource_group: The name of the Azure resource group. Required. :type resource_group: str :param config_contract: The Azure Advisor configuration data structure. Required. - :type config_contract: IO + :type config_contract: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: @@ -556,7 +526,7 @@ def create_in_resource_group( self, configuration_name: Union[str, _models.ConfigurationName], resource_group: str, - config_contract: Union[_models.ConfigData, IO], + config_contract: Union[_models.ConfigData, IO[bytes]], **kwargs: Any ) -> _models.ConfigData: """Create/Overwrite Azure Advisor configuration. @@ -568,18 +538,14 @@ def create_in_resource_group( :type configuration_name: str or ~azure.mgmt.advisor.models.ConfigurationName :param resource_group: The name of the Azure resource group. Required. :type resource_group: str - :param config_contract: The Azure Advisor configuration data structure. Is either a model type - or a IO type. Required. - :type config_contract: ~azure.mgmt.advisor.models.ConfigData or IO - :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. - Default value is None. - :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response + :param config_contract: The Azure Advisor configuration data structure. Is either a ConfigData + type or a IO[bytes] type. Required. + :type config_contract: ~azure.mgmt.advisor.models.ConfigData or IO[bytes] :return: ConfigData or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ConfigData :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -590,21 +556,19 @@ def create_in_resource_group( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - content_type = kwargs.pop("content_type", _headers.pop("Content-Type", None)) # type: Optional[str] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ConfigData] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.ConfigData] = kwargs.pop("cls", None) content_type = content_type or "application/json" _json = None _content = None - if isinstance(config_contract, (IO, bytes)): + if isinstance(config_contract, (IOBase, bytes)): _content = config_contract else: _json = self._serialize.body(config_contract, "ConfigData") - request = build_create_in_resource_group_request( + _request = build_create_in_resource_group_request( configuration_name=configuration_name, resource_group=resource_group, subscription_id=self._config.subscription_id, @@ -612,15 +576,14 @@ def create_in_resource_group( content_type=content_type, json=_json, content=_content, - template_url=self.create_in_resource_group.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -630,11 +593,9 @@ def create_in_resource_group( error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("ConfigData", pipeline_response) + deserialized = self._deserialize("ConfigData", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - create_in_resource_group.metadata = {"url": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Advisor/configurations/{configurationName}"} # type: ignore + return deserialized # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_operations.py index 2e92a7e08768..2975c95a7b9f 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_operations.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_operations.py @@ -1,4 +1,3 @@ -# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,10 +5,11 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys +from collections.abc import MutableMapping from typing import Any, Callable, Dict, Iterable, Optional, TypeVar import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -20,20 +20,15 @@ ) from azure.core.paging import ItemPaged from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import HttpRequest, HttpResponse from azure.core.tracing.decorator import distributed_trace from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models as _models -from .._serialization import Serializer -from .._vendor import _convert_request +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -45,7 +40,7 @@ def build_list_request(**kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -74,16 +69,15 @@ class Operations: def __init__(self, *args, **kwargs): input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace def list(self, **kwargs: Any) -> Iterable["_models.OperationEntity"]: """Lists all the available Advisor REST API operations. - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either OperationEntity or the result of cls(response) :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.OperationEntity] :raises ~azure.core.exceptions.HttpResponseError: @@ -91,12 +85,10 @@ def list(self, **kwargs: Any) -> Iterable["_models.OperationEntity"]: _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.OperationEntityListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.OperationEntityListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -107,14 +99,12 @@ def list(self, **kwargs: Any) -> Iterable["_models.OperationEntity"]: def prepare_request(next_link=None): if not next_link: - request = build_list_request( + _request = build_list_request( api_version=api_version, - template_url=self.list.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -126,26 +116,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request def extract_data(pipeline_response): deserialized = self._deserialize("OperationEntityListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, iter(list_of_elem) def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -157,5 +147,3 @@ def get_next(next_link=None): return pipeline_response return ItemPaged(get_next, extract_data) - - list.metadata = {"url": "/providers/Microsoft.Advisor/operations"} # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendation_metadata_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendation_metadata_operations.py index 99a3bddf4cd0..72b781c6e689 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendation_metadata_operations.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendation_metadata_operations.py @@ -1,4 +1,3 @@ -# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,10 +5,11 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys +from collections.abc import MutableMapping from typing import Any, Callable, Dict, Iterable, Optional, TypeVar import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -20,20 +20,15 @@ ) from azure.core.paging import ItemPaged from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import HttpRequest, HttpResponse from azure.core.tracing.decorator import distributed_trace from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models as _models -from .._serialization import Serializer -from .._vendor import _convert_request, _format_url_section +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -45,7 +40,7 @@ def build_get_request(name: str, **kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -54,7 +49,7 @@ def build_get_request(name: str, **kwargs: Any) -> HttpRequest: "name": _SERIALIZER.url("name", name, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -69,7 +64,7 @@ def build_list_request(**kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -98,10 +93,10 @@ class RecommendationMetadataOperations: def __init__(self, *args, **kwargs): input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace def get(self, name: str, **kwargs: Any) -> _models.MetadataEntity: @@ -111,60 +106,54 @@ def get(self, name: str, **kwargs: Any) -> _models.MetadataEntity: :param name: Name of metadata entity. Required. :type name: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: MetadataEntity or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.MetadataEntity :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 409: ResourceExistsError, 304: ResourceNotModifiedError, - 404: lambda response: ResourceNotFoundError( - response=response, - model=self._deserialize(_models.ARMErrorResponseBody, response), - error_format=ARMErrorFormat, - ), } error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.MetadataEntity] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.MetadataEntity] = kwargs.pop("cls", None) - request = build_get_request( + _request = build_get_request( name=name, api_version=api_version, - template_url=self.get.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + error = None + if response.status_code == 404: + error = self._deserialize.failsafe_deserialize(_models.ARMErrorResponseBody, pipeline_response) + raise ResourceNotFoundError(response=response, model=error, error_format=ARMErrorFormat) + else: + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("MetadataEntity", pipeline_response) + deserialized = self._deserialize("MetadataEntity", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - get.metadata = {"url": "/providers/Microsoft.Advisor/metadata/{name}"} # type: ignore + return deserialized # type: ignore @distributed_trace def list(self, **kwargs: Any) -> Iterable["_models.MetadataEntity"]: @@ -172,7 +161,6 @@ def list(self, **kwargs: Any) -> Iterable["_models.MetadataEntity"]: Gets the list of metadata entities. - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either MetadataEntity or the result of cls(response) :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.MetadataEntity] :raises ~azure.core.exceptions.HttpResponseError: @@ -180,12 +168,10 @@ def list(self, **kwargs: Any) -> Iterable["_models.MetadataEntity"]: _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.MetadataEntityListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.MetadataEntityListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -196,14 +182,12 @@ def list(self, **kwargs: Any) -> Iterable["_models.MetadataEntity"]: def prepare_request(next_link=None): if not next_link: - request = build_list_request( + _request = build_list_request( api_version=api_version, - template_url=self.list.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -215,26 +199,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request def extract_data(pipeline_response): deserialized = self._deserialize("MetadataEntityListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, iter(list_of_elem) def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -246,5 +230,3 @@ def get_next(next_link=None): return pipeline_response return ItemPaged(get_next, extract_data) - - list.metadata = {"url": "/providers/Microsoft.Advisor/metadata"} # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendations_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendations_operations.py index 5022ce6e84d2..d3ddf3c958a6 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendations_operations.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_recommendations_operations.py @@ -1,4 +1,3 @@ -# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,10 +5,12 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys -from typing import Any, Callable, Dict, Iterable, Optional, TypeVar +from collections.abc import MutableMapping +from io import IOBase +from typing import Any, Callable, Dict, IO, Iterable, Optional, TypeVar, Union, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -20,20 +21,15 @@ ) from azure.core.paging import ItemPaged from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import HttpRequest, HttpResponse from azure.core.tracing.decorator import distributed_trace from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models as _models -from .._serialization import Serializer -from .._vendor import _convert_request, _format_url_section +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -45,7 +41,7 @@ def build_generate_request(subscription_id: str, **kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -56,7 +52,7 @@ def build_generate_request(subscription_id: str, **kwargs: Any) -> HttpRequest: "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -71,20 +67,20 @@ def build_get_generate_status_request(operation_id: str, subscription_id: str, * _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/generateRecommendations/{operationId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "operationId": _SERIALIZER.url("operation_id", operation_id, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -106,7 +102,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -115,7 +111,7 @@ def build_list_request( "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -136,7 +132,7 @@ def build_get_request(resource_uri: str, recommendation_id: str, **kwargs: Any) _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -146,7 +142,7 @@ def build_get_request(resource_uri: str, recommendation_id: str, **kwargs: Any) "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -157,6 +153,34 @@ def build_get_request(resource_uri: str, recommendation_id: str, **kwargs: Any) return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) +def build_patch_request(resource_uri: str, recommendation_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}") + path_format_arguments = { + "resourceUri": _SERIALIZER.url("resource_uri", resource_uri, "str"), + "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + class RecommendationsOperations: """ .. warning:: @@ -171,10 +195,10 @@ class RecommendationsOperations: def __init__(self, *args, **kwargs): input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace def generate(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-statements @@ -182,12 +206,11 @@ def generate(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-retur operation is asynchronous. The generated recommendations are stored in a cache in the Advisor service. - :keyword callable cls: A custom type or function that will be passed the direct response :return: None or the result of cls(response) :rtype: None :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -198,23 +221,20 @@ def generate(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-retur _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[None] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) - request = build_generate_request( + _request = build_generate_request( subscription_id=self._config.subscription_id, api_version=api_version, - template_url=self.generate.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -229,9 +249,7 @@ def generate(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-retur response_headers["Retry-After"] = self._deserialize("str", response.headers.get("Retry-After")) if cls: - return cls(pipeline_response, None, response_headers) - - generate.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/generateRecommendations"} # type: ignore + return cls(pipeline_response, None, response_headers) # type: ignore @distributed_trace def get_generate_status( # pylint: disable=inconsistent-return-statements @@ -244,12 +262,11 @@ def get_generate_status( # pylint: disable=inconsistent-return-statements :param operation_id: The operation ID, which can be found from the Location field in the generate recommendation response header. Required. :type operation_id: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: None or the result of cls(response) :rtype: None :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -260,24 +277,21 @@ def get_generate_status( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[None] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) - request = build_get_generate_status_request( + _request = build_get_generate_status_request( operation_id=operation_id, subscription_id=self._config.subscription_id, api_version=api_version, - template_url=self.get_generate_status.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -288,9 +302,7 @@ def get_generate_status( # pylint: disable=inconsistent-return-statements raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if cls: - return cls(pipeline_response, None, {}) - - get_generate_status.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/generateRecommendations/{operationId}"} # type: ignore + return cls(pipeline_response, None, {}) # type: ignore @distributed_trace def list( @@ -299,9 +311,9 @@ def list( """Obtains cached recommendations for a subscription. The recommendations are generated or computed by invoking generateRecommendations. - :param filter: The filter to apply to the recommendations.:code:`
`Filter can be applied to - properties ['ResourceId', 'ResourceGroup', 'RecommendationTypeGuid', '\ `Category - <#category>`_\ '] with operators ['eq', 'and', 'or'].:code:`
`Example::code:`
`- + :param filter: The filter to apply to the recommendations.\\ :code:`
`Filter can be applied + to properties ['ResourceId', 'ResourceGroup', 'RecommendationTypeGuid', '\\ `Category + <#category>`_\\ '] with operators ['eq', 'and', 'or'].\\ :code:`
`Example:\\ :code:`
`- $filter=Category eq 'Cost' and ResourceGroup eq 'MyResourceGroup'. Default value is None. :type filter: str :param top: The number of recommendations per page if a paged version of this API is being @@ -310,7 +322,6 @@ def list( :param skip_token: The page-continuation token to use with a paged version of this API. Default value is None. :type skip_token: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either ResourceRecommendationBase or the result of cls(response) :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.ResourceRecommendationBase] @@ -319,12 +330,10 @@ def list( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ResourceRecommendationBaseListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ResourceRecommendationBaseListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -335,18 +344,16 @@ def list( def prepare_request(next_link=None): if not next_link: - request = build_list_request( + _request = build_list_request( subscription_id=self._config.subscription_id, filter=filter, top=top, skip_token=skip_token, api_version=api_version, - template_url=self.list.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -358,26 +365,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request def extract_data(pipeline_response): deserialized = self._deserialize("ResourceRecommendationBaseListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, iter(list_of_elem) def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -390,8 +397,6 @@ def get_next(next_link=None): return ItemPaged(get_next, extract_data) - list.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/recommendations"} # type: ignore - @distributed_trace def get(self, resource_uri: str, recommendation_id: str, **kwargs: Any) -> _models.ResourceRecommendationBase: """Obtains details of a cached recommendation. @@ -401,12 +406,11 @@ def get(self, resource_uri: str, recommendation_id: str, **kwargs: Any) -> _mode :type resource_uri: str :param recommendation_id: The recommendation ID. Required. :type recommendation_id: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: ResourceRecommendationBase or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.ResourceRecommendationBase :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -417,24 +421,21 @@ def get(self, resource_uri: str, recommendation_id: str, **kwargs: Any) -> _mode _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.ResourceRecommendationBase] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ResourceRecommendationBase] = kwargs.pop("cls", None) - request = build_get_request( + _request = build_get_request( resource_uri=resource_uri, recommendation_id=recommendation_id, api_version=api_version, - template_url=self.get.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -444,11 +445,140 @@ def get(self, resource_uri: str, recommendation_id: str, **kwargs: Any) -> _mode error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("ResourceRecommendationBase", pipeline_response) + deserialized = self._deserialize("ResourceRecommendationBase", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + def patch( + self, + resource_uri: str, + recommendation_id: str, + tracked_properties: _models.TrackedRecommendationPropertiesPayload, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> _models.ResourceRecommendationBase: + """Update the tracked properties of a Recommendation. + + :param resource_uri: The fully qualified Azure Resource Manager identifier of the resource to + which the tracked recommendation applies. Required. + :type resource_uri: str + :param recommendation_id: The RecommendationId ID. Required. + :type recommendation_id: str + :param tracked_properties: The properties to update on the recommendation. Required. + :type tracked_properties: ~azure.mgmt.advisor.models.TrackedRecommendationPropertiesPayload + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: ResourceRecommendationBase or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.ResourceRecommendationBase + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def patch( + self, + resource_uri: str, + recommendation_id: str, + tracked_properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> _models.ResourceRecommendationBase: + """Update the tracked properties of a Recommendation. + + :param resource_uri: The fully qualified Azure Resource Manager identifier of the resource to + which the tracked recommendation applies. Required. + :type resource_uri: str + :param recommendation_id: The RecommendationId ID. Required. + :type recommendation_id: str + :param tracked_properties: The properties to update on the recommendation. Required. + :type tracked_properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: ResourceRecommendationBase or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.ResourceRecommendationBase + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def patch( + self, + resource_uri: str, + recommendation_id: str, + tracked_properties: Union[_models.TrackedRecommendationPropertiesPayload, IO[bytes]], + **kwargs: Any + ) -> _models.ResourceRecommendationBase: + """Update the tracked properties of a Recommendation. + + :param resource_uri: The fully qualified Azure Resource Manager identifier of the resource to + which the tracked recommendation applies. Required. + :type resource_uri: str + :param recommendation_id: The RecommendationId ID. Required. + :type recommendation_id: str + :param tracked_properties: The properties to update on the recommendation. Is either a + TrackedRecommendationPropertiesPayload type or a IO[bytes] type. Required. + :type tracked_properties: ~azure.mgmt.advisor.models.TrackedRecommendationPropertiesPayload or + IO[bytes] + :return: ResourceRecommendationBase or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.ResourceRecommendationBase + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - return deserialized + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.ResourceRecommendationBase] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _json = None + _content = None + if isinstance(tracked_properties, (IOBase, bytes)): + _content = tracked_properties + else: + _json = self._serialize.body(tracked_properties, "TrackedRecommendationPropertiesPayload") + + _request = build_patch_request( + resource_uri=resource_uri, + recommendation_id=recommendation_id, + api_version=api_version, + content_type=content_type, + json=_json, + content=_content, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("ResourceRecommendationBase", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore - get.metadata = {"url": "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}"} # type: ignore + return deserialized # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_resiliency_reviews_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_resiliency_reviews_operations.py new file mode 100644 index 000000000000..26b28093c94f --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_resiliency_reviews_operations.py @@ -0,0 +1,266 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from typing import Any, Callable, Dict, Iterable, Optional, TypeVar +import urllib.parse + +from azure.core import PipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + + +def build_list_request( + subscription_id: str, + *, + top: Optional[int] = None, + skip: Optional[int] = None, + filter: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/resiliencyReviews") + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if top is not None: + _params["$top"] = _SERIALIZER.query("top", top, "int") + if skip is not None: + _params["$skip"] = _SERIALIZER.query("skip", skip, "int") + if filter is not None: + _params["$filter"] = _SERIALIZER.query("filter", filter, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_get_request(review_id: str, subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/resiliencyReviews/{reviewId}" + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "reviewId": _SERIALIZER.url("review_id", review_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +class ResiliencyReviewsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.AdvisorManagementClient`'s + :attr:`resiliency_reviews` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list( + self, top: Optional[int] = None, skip: Optional[int] = None, filter: Optional[str] = None, **kwargs: Any + ) -> Iterable["_models.ResiliencyReview"]: + """Get list of resiliency reviews. + + Get list of Azure Advisor resiliency reviews. + + :param top: The number of items to be included in the result. Default value is None. + :type top: int + :param skip: The number of items to skip before starting to collect the result set. Default + value is None. + :type skip: int + :param filter: The filter to apply.\\ :code:`
`Filter can be applied to properties + ['reviewStatus', 'reviewId'] with operators ['eq', 'and', 'or'].\\ :code:`
`Example:\\ + :code:`
`- $filter=reviewStatus eq 'New'. Default value is None. + :type filter: str + :return: An iterator like instance of either ResiliencyReview or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.ResiliencyReview] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ResiliencyReviewCollection] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + subscription_id=self._config.subscription_id, + top=top, + skip=skip, + filter=filter, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + def extract_data(pipeline_response): + deserialized = self._deserialize("ResiliencyReviewCollection", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def get(self, review_id: str, **kwargs: Any) -> _models.ResiliencyReview: + """Get existing resiliency review. + + Get existing Azure Advisor resiliency review by id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :return: ResiliencyReview or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.ResiliencyReview + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.ResiliencyReview] = kwargs.pop("cls", None) + + _request = build_get_request( + review_id=review_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("ResiliencyReview", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_suppressions_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_suppressions_operations.py index 37475323daa5..f66848d7d2c5 100644 --- a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_suppressions_operations.py +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_suppressions_operations.py @@ -1,4 +1,3 @@ -# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,10 +5,12 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -import sys +from collections.abc import MutableMapping +from io import IOBase from typing import Any, Callable, Dict, IO, Iterable, Optional, TypeVar, Union, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -20,20 +21,15 @@ ) from azure.core.paging import ItemPaged from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import HttpRequest, HttpResponse from azure.core.tracing.decorator import distributed_trace from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models as _models -from .._serialization import Serializer -from .._vendor import _convert_request, _format_url_section +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -45,21 +41,21 @@ def build_get_request(resource_uri: str, recommendation_id: str, name: str, **kw _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}/suppressions/{name}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceUri": _SERIALIZER.url("resource_uri", resource_uri, "str"), "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), "name": _SERIALIZER.url("name", name, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -74,22 +70,22 @@ def build_create_request(resource_uri: str, recommendation_id: str, name: str, * _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] - content_type = kwargs.pop("content_type", _headers.pop("Content-Type", None)) # type: Optional[str] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}/suppressions/{name}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceUri": _SERIALIZER.url("resource_uri", resource_uri, "str"), "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), "name": _SERIALIZER.url("name", name, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -106,21 +102,21 @@ def build_delete_request(resource_uri: str, recommendation_id: str, name: str, * _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}/suppressions/{name}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceUri": _SERIALIZER.url("resource_uri", resource_uri, "str"), "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), "name": _SERIALIZER.url("name", name, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -137,7 +133,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop("api_version", _params.pop("api-version", "2020-01-01")) # type: Literal["2020-01-01"] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -146,7 +142,7 @@ def build_list_request( "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } - _url = _format_url_section(_url, **path_format_arguments) + _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -175,10 +171,10 @@ class SuppressionsOperations: def __init__(self, *args, **kwargs): input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace def get(self, resource_uri: str, recommendation_id: str, name: str, **kwargs: Any) -> _models.SuppressionContract: @@ -191,62 +187,56 @@ def get(self, resource_uri: str, recommendation_id: str, name: str, **kwargs: An :type recommendation_id: str :param name: The name of the suppression. Required. :type name: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: SuppressionContract or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.SuppressionContract :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 409: ResourceExistsError, 304: ResourceNotModifiedError, - 404: lambda response: ResourceNotFoundError( - response=response, - model=self._deserialize(_models.ArmErrorResponse, response), - error_format=ARMErrorFormat, - ), } error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.SuppressionContract] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.SuppressionContract] = kwargs.pop("cls", None) - request = build_get_request( + _request = build_get_request( resource_uri=resource_uri, recommendation_id=recommendation_id, name=name, api_version=api_version, - template_url=self.get.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + error = None + if response.status_code == 404: + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise ResourceNotFoundError(response=response, model=error, error_format=ARMErrorFormat) + else: + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("SuppressionContract", pipeline_response) + deserialized = self._deserialize("SuppressionContract", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - get.metadata = {"url": "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}/suppressions/{name}"} # type: ignore + return deserialized # type: ignore @overload def create( @@ -276,7 +266,6 @@ def create( :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: SuppressionContract or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.SuppressionContract :raises ~azure.core.exceptions.HttpResponseError: @@ -288,7 +277,7 @@ def create( resource_uri: str, recommendation_id: str, name: str, - suppression_contract: IO, + suppression_contract: IO[bytes], *, content_type: str = "application/json", **kwargs: Any @@ -306,11 +295,10 @@ def create( :type name: str :param suppression_contract: The snoozed or dismissed attribute; for example, the snooze duration. Required. - :type suppression_contract: IO + :type suppression_contract: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: SuppressionContract or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.SuppressionContract :raises ~azure.core.exceptions.HttpResponseError: @@ -322,7 +310,7 @@ def create( resource_uri: str, recommendation_id: str, name: str, - suppression_contract: Union[_models.SuppressionContract, IO], + suppression_contract: Union[_models.SuppressionContract, IO[bytes]], **kwargs: Any ) -> _models.SuppressionContract: """Enables the snoozed or dismissed attribute of a recommendation. The snoozed or dismissed @@ -337,46 +325,35 @@ def create( :param name: The name of the suppression. Required. :type name: str :param suppression_contract: The snoozed or dismissed attribute; for example, the snooze - duration. Is either a model type or a IO type. Required. - :type suppression_contract: ~azure.mgmt.advisor.models.SuppressionContract or IO - :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. - Default value is None. - :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response + duration. Is either a SuppressionContract type or a IO[bytes] type. Required. + :type suppression_contract: ~azure.mgmt.advisor.models.SuppressionContract or IO[bytes] :return: SuppressionContract or the result of cls(response) :rtype: ~azure.mgmt.advisor.models.SuppressionContract :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 409: ResourceExistsError, 304: ResourceNotModifiedError, - 404: lambda response: ResourceNotFoundError( - response=response, - model=self._deserialize(_models.ArmErrorResponse, response), - error_format=ARMErrorFormat, - ), } error_map.update(kwargs.pop("error_map", {}) or {}) _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - content_type = kwargs.pop("content_type", _headers.pop("Content-Type", None)) # type: Optional[str] - cls = kwargs.pop("cls", None) # type: ClsType[_models.SuppressionContract] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.SuppressionContract] = kwargs.pop("cls", None) content_type = content_type or "application/json" _json = None _content = None - if isinstance(suppression_contract, (IO, bytes)): + if isinstance(suppression_contract, (IOBase, bytes)): _content = suppression_contract else: _json = self._serialize.body(suppression_contract, "SuppressionContract") - request = build_create_request( + _request = build_create_request( resource_uri=resource_uri, recommendation_id=recommendation_id, name=name, @@ -384,32 +361,34 @@ def create( content_type=content_type, json=_json, content=_content, - template_url=self.create.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + error = None + if response.status_code == 404: + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) + raise ResourceNotFoundError(response=response, model=error, error_format=ARMErrorFormat) + else: + error = self._deserialize.failsafe_deserialize(_models.ArmErrorResponse, pipeline_response) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = self._deserialize("SuppressionContract", pipeline_response) + deserialized = self._deserialize("SuppressionContract", pipeline_response.http_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - create.metadata = {"url": "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}/suppressions/{name}"} # type: ignore + return deserialized # type: ignore @distributed_trace def delete( # pylint: disable=inconsistent-return-statements @@ -425,12 +404,11 @@ def delete( # pylint: disable=inconsistent-return-statements :type recommendation_id: str :param name: The name of the suppression. Required. :type name: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: None or the result of cls(response) :rtype: None :raises ~azure.core.exceptions.HttpResponseError: """ - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -441,25 +419,22 @@ def delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[None] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) - request = build_delete_request( + _request = build_delete_request( resource_uri=resource_uri, recommendation_id=recommendation_id, name=name, api_version=api_version, - template_url=self.delete.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -470,9 +445,7 @@ def delete( # pylint: disable=inconsistent-return-statements raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if cls: - return cls(pipeline_response, None, {}) - - delete.metadata = {"url": "/{resourceUri}/providers/Microsoft.Advisor/recommendations/{recommendationId}/suppressions/{name}"} # type: ignore + return cls(pipeline_response, None, {}) # type: ignore @distributed_trace def list( @@ -487,7 +460,6 @@ def list( :param skip_token: The page-continuation token to use with a paged version of this API. Default value is None. :type skip_token: str - :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either SuppressionContract or the result of cls(response) :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.SuppressionContract] :raises ~azure.core.exceptions.HttpResponseError: @@ -495,12 +467,10 @@ def list( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop( - "api_version", _params.pop("api-version", self._config.api_version) - ) # type: Literal["2020-01-01"] - cls = kwargs.pop("cls", None) # type: ClsType[_models.SuppressionContractListResult] + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.SuppressionContractListResult] = kwargs.pop("cls", None) - error_map = { + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, @@ -511,17 +481,15 @@ def list( def prepare_request(next_link=None): if not next_link: - request = build_list_request( + _request = build_list_request( subscription_id=self._config.subscription_id, top=top, skip_token=skip_token, api_version=api_version, - template_url=self.list.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore + _request.url = self._client.format_url(_request.url) else: # make call to next link with the client's api-version @@ -533,26 +501,26 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request def extract_data(pipeline_response): deserialized = self._deserialize("SuppressionContractListResult", pipeline_response) list_of_elem = deserialized.value if cls: - list_of_elem = cls(list_of_elem) + list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, iter(list_of_elem) def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=False, **kwargs + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response @@ -564,5 +532,3 @@ def get_next(next_link=None): return pipeline_response return ItemPaged(get_next, extract_data) - - list.metadata = {"url": "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/suppressions"} # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_triage_recommendations_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_triage_recommendations_operations.py new file mode 100644 index 000000000000..ea1751a623d2 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_triage_recommendations_operations.py @@ -0,0 +1,620 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from io import IOBase +from typing import Any, Callable, Dict, IO, Iterable, Optional, TypeVar, Union, overload +import urllib.parse + +from azure.core import PipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + + +def build_list_request( + review_id: str, subscription_id: str, *, top: Optional[int] = None, skip: Optional[int] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", + "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/resiliencyReviews/{reviewId}/providers/Microsoft.Advisor/triageRecommendations", + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "reviewId": _SERIALIZER.url("review_id", review_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if top is not None: + _params["$top"] = _SERIALIZER.query("top", top, "int") + if skip is not None: + _params["$skip"] = _SERIALIZER.query("skip", skip, "int") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_get_request(review_id: str, recommendation_id: str, subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", + "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/resiliencyReviews/{reviewId}/providers/Microsoft.Advisor/triageRecommendations/{recommendationId}", + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "reviewId": _SERIALIZER.url("review_id", review_id, "str"), + "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_approve_triage_recommendation_request( # pylint: disable=name-too-long + review_id: str, recommendation_id: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", + "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/resiliencyReviews/{reviewId}/providers/Microsoft.Advisor/triageRecommendations/{recommendationId}/approve", + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "reviewId": _SERIALIZER.url("review_id", review_id, "str"), + "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_reject_triage_recommendation_request( # pylint: disable=name-too-long + review_id: str, recommendation_id: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", + "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/resiliencyReviews/{reviewId}/providers/Microsoft.Advisor/triageRecommendations/{recommendationId}/reject", + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "reviewId": _SERIALIZER.url("review_id", review_id, "str"), + "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_reset_triage_recommendation_request( # pylint: disable=name-too-long + review_id: str, recommendation_id: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", + "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/resiliencyReviews/{reviewId}/providers/Microsoft.Advisor/triageRecommendations/{recommendationId}/reset", + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "reviewId": _SERIALIZER.url("review_id", review_id, "str"), + "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +class TriageRecommendationsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.AdvisorManagementClient`'s + :attr:`triage_recommendations` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list( + self, review_id: str, top: Optional[int] = None, skip: Optional[int] = None, **kwargs: Any + ) -> Iterable["_models.TriageRecommendation"]: + """Get list of recommendations for an existing resiliency review id. + + Get list of recommendations for an existing Azure Advisor Resiliency Review Id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param top: The number of items to be included in the result. Default value is None. + :type top: int + :param skip: The number of items to skip before starting to collect the result set. Default + value is None. + :type skip: int + :return: An iterator like instance of either TriageRecommendation or the result of + cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.TriageRecommendation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.TriageRecommendationCollection] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + review_id=review_id, + subscription_id=self._config.subscription_id, + top=top, + skip=skip, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + def extract_data(pipeline_response): + deserialized = self._deserialize("TriageRecommendationCollection", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def get(self, review_id: str, recommendation_id: str, **kwargs: Any) -> _models.TriageRecommendation: + """Get an existing recommendation by id for an existing resiliency review id. + + Get an existing recommendation by id for an existing Azure Advisor Resiliency Review Id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :return: TriageRecommendation or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.TriageRecommendation + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.TriageRecommendation] = kwargs.pop("cls", None) + + _request = build_get_request( + review_id=review_id, + recommendation_id=recommendation_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("TriageRecommendation", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def approve_triage_recommendation( # pylint: disable=inconsistent-return-statements + self, review_id: str, recommendation_id: str, **kwargs: Any + ) -> None: + """Approve triage recommendation by id. + + Approve a triage recommendation for a given id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_approve_triage_recommendation_request( + review_id=review_id, + recommendation_id=recommendation_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @overload + def reject_triage_recommendation( + self, + review_id: str, + recommendation_id: str, + recommendation_reject_body: _models.RecommendationRejectBody, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> None: + """Reject existing triage recommendation by id. + + Reject an existing triage recommendation for a given id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :param recommendation_reject_body: JSON object that contains reason for rejecting triage + recommendation. Required. + :type recommendation_reject_body: ~azure.mgmt.advisor.models.RecommendationRejectBody + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def reject_triage_recommendation( + self, + review_id: str, + recommendation_id: str, + recommendation_reject_body: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> None: + """Reject existing triage recommendation by id. + + Reject an existing triage recommendation for a given id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :param recommendation_reject_body: JSON object that contains reason for rejecting triage + recommendation. Required. + :type recommendation_reject_body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def reject_triage_recommendation( # pylint: disable=inconsistent-return-statements + self, + review_id: str, + recommendation_id: str, + recommendation_reject_body: Union[_models.RecommendationRejectBody, IO[bytes]], + **kwargs: Any + ) -> None: + """Reject existing triage recommendation by id. + + Reject an existing triage recommendation for a given id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :param recommendation_reject_body: JSON object that contains reason for rejecting triage + recommendation. Is either a RecommendationRejectBody type or a IO[bytes] type. Required. + :type recommendation_reject_body: ~azure.mgmt.advisor.models.RecommendationRejectBody or + IO[bytes] + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[None] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _json = None + _content = None + if isinstance(recommendation_reject_body, (IOBase, bytes)): + _content = recommendation_reject_body + else: + _json = self._serialize.body(recommendation_reject_body, "RecommendationRejectBody") + + _request = build_reject_triage_recommendation_request( + review_id=review_id, + recommendation_id=recommendation_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + content_type=content_type, + json=_json, + content=_content, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace + def reset_triage_recommendation( # pylint: disable=inconsistent-return-statements + self, review_id: str, recommendation_id: str, **kwargs: Any + ) -> None: + """Reset existing triage recommendation by id. + + Reset an existing triage recommendation for a given id. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :return: None or the result of cls(response) + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_reset_triage_recommendation_request( + review_id=review_id, + recommendation_id=recommendation_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_triage_resources_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_triage_resources_operations.py new file mode 100644 index 000000000000..a26ca69d0f75 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_triage_resources_operations.py @@ -0,0 +1,269 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from typing import Any, Callable, Dict, Iterable, Optional, TypeVar +import urllib.parse + +from azure.core import PipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + + +def build_get_request( + review_id: str, recommendation_id: str, recommendation_resource_id: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", + "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/resiliencyReviews/{reviewId}/providers/Microsoft.Advisor/triageRecommendations/{recommendationId}/providers/Microsoft.Advisor/triageResources/{recommendationResourceId}", + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "reviewId": _SERIALIZER.url("review_id", review_id, "str"), + "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), + "recommendationResourceId": _SERIALIZER.url("recommendation_resource_id", recommendation_resource_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_list_request(review_id: str, recommendation_id: str, subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop( + "template_url", + "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/resiliencyReviews/{reviewId}/providers/Microsoft.Advisor/triageRecommendations/{recommendationId}/providers/Microsoft.Advisor/triageResources", + ) + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "reviewId": _SERIALIZER.url("review_id", review_id, "str"), + "recommendationId": _SERIALIZER.url("recommendation_id", recommendation_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +class TriageResourcesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.AdvisorManagementClient`'s + :attr:`triage_resources` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def get( + self, review_id: str, recommendation_id: str, recommendation_resource_id: str, **kwargs: Any + ) -> _models.TriageResource: + """Get existing triage resource. + + Get a triage resource for a given review and recommendation. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :param recommendation_resource_id: Existing recommendation triage resource associated with a + triage recommendation. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_resource_id: str + :return: TriageResource or the result of cls(response) + :rtype: ~azure.mgmt.advisor.models.TriageResource + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.TriageResource] = kwargs.pop("cls", None) + + _request = build_get_request( + review_id=review_id, + recommendation_id=recommendation_id, + recommendation_resource_id=recommendation_resource_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize("TriageResource", pipeline_response.http_response) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def list(self, review_id: str, recommendation_id: str, **kwargs: Any) -> Iterable["_models.TriageResource"]: + """List triage resources based on a review and recommendation. + + List all triage resources that belong to a review and recommendation. + + :param review_id: Existing review id. This is a GUID-formatted string (e.g. + 00000000-0000-0000-0000-000000000000). Required. + :type review_id: str + :param recommendation_id: Existing triage recommendation id. This is a GUID-formatted string + (e.g. 00000000-0000-0000-0000-000000000000). Required. + :type recommendation_id: str + :return: An iterator like instance of either TriageResource or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.TriageResource] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.TriageResourceCollection] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + review_id=review_id, + recommendation_id=recommendation_id, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + def extract_data(pipeline_response): + deserialized = self._deserialize("TriageResourceCollection", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) diff --git a/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_workloads_operations.py b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_workloads_operations.py new file mode 100644 index 000000000000..811a373cac77 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/azure/mgmt/advisor/operations/_workloads_operations.py @@ -0,0 +1,157 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +from typing import Any, Callable, Dict, Iterable, Optional, TypeVar +import urllib.parse + +from azure.core import PipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + map_error, +) +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._configuration import AdvisorManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + + +def build_list_request(subscription_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-18-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Advisor/workloads") + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +class WorkloadsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.advisor.AdvisorManagementClient`'s + :attr:`workloads` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: AdvisorManagementClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list(self, **kwargs: Any) -> Iterable["_models.WorkloadResult"]: + """Get Workloads list. + + Get list of Workloads. + + :return: An iterator like instance of either WorkloadResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.advisor.models.WorkloadResult] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) + cls: ClsType[_models.WorkloadListResult] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + _request.url = self._client.format_url(_request.url) + _request.method = "GET" + return _request + + def extract_data(pipeline_response): + deserialized = self._deserialize("WorkloadListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/put_configurations.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/create_configuration.py similarity index 86% rename from sdk/advisor/azure-mgmt-advisor/generated_samples/put_configurations.py rename to sdk/advisor/azure-mgmt-advisor/generated_samples/create_configuration.py index 8e1bb6e674c1..a94c9d66a087 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/put_configurations.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/create_configuration.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -14,7 +16,7 @@ pip install azure-identity pip install azure-mgmt-advisor # USAGE - python put_configurations.py + python create_configuration.py Before run the sample, please set the values of the client ID, tenant ID and client secret of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, @@ -35,7 +37,7 @@ def main(): "properties": { "digests": [ { - "actionGroupResourceId": "/subscriptions/subscriptionId/resourceGroups/resourceGroup/providers/microsoft.insights/actionGroups/actionGroupName", + "actionGroupResourceId": "/subscriptions/58c3f667-7a62-4bfd-a658-846493e9a493/resourceGroups/resourceGroup/providers/microsoft.insights/actionGroups/actionGroupName", "categories": ["HighAvailability", "Security", "Performance", "Cost", "OperationalExcellence"], "frequency": 30, "language": "en", @@ -43,6 +45,7 @@ def main(): "state": "Active", } ], + "duration": "7", "exclude": True, "lowCpuThreshold": "5", } @@ -51,6 +54,6 @@ def main(): print(response) -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/CreateConfiguration.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/CreateConfiguration.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/create_suppression.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/create_suppression.py index 2ca0b00a092e..06725a9c4560 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/create_suppression.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/create_suppression.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -38,6 +40,6 @@ def main(): print(response) -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/CreateSuppression.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/CreateSuppression.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/delete_assessment.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/delete_assessment.py new file mode 100644 index 000000000000..3061185d491b --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/delete_assessment.py @@ -0,0 +1,41 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python delete_assessment.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + client.assessments.delete( + assessment_name="assessment1", + ) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/DeleteAssessment.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/delete_suppression.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/delete_suppression.py index 0d878dcbee5b..2e7fc7bee8ba 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/delete_suppression.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/delete_suppression.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -29,14 +31,13 @@ def main(): subscription_id="SUBSCRIPTION_ID", ) - response = client.suppressions.delete( + client.suppressions.delete( resource_uri="resourceUri", recommendation_id="recommendationId", name="suppressionName1", ) - print(response) -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/DeleteSuppression.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/DeleteSuppression.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/empty_response.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/empty_response.py new file mode 100644 index 000000000000..0a9f9adb67e7 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/empty_response.py @@ -0,0 +1,41 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python empty_response.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="subscriptionId", + ) + + client.recommendations.get_generate_status( + operation_id="123e4567-e89b-12d3-a456-426614174000", + ) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/EmptyResponse.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/generate_recommendations.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/generate_recommendations.py index adff66f2e80c..552b4e3e2d41 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/generate_recommendations.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/generate_recommendations.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -29,10 +31,9 @@ def main(): subscription_id="subscriptionId", ) - response = client.recommendations.generate() - print(response) + client.recommendations.generate() -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/GenerateRecommendations.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/GenerateRecommendations.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_advisor_score_detail.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/get_advisor_score_detail.py new file mode 100644 index 000000000000..e1c8c4fb9cd4 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/get_advisor_score_detail.py @@ -0,0 +1,42 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python get_advisor_score_detail.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="a5481ee1-95df-47d0-85d4-dd3f0dfa19bc", + ) + + response = client.advisor_scores.get( + name="Cost", + ) + print(response) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/GetAdvisorScoreDetail.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_assessment.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/get_assessment.py new file mode 100644 index 000000000000..d0b1b5fb3cec --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/get_assessment.py @@ -0,0 +1,42 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python get_assessment.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.assessments.get( + assessment_name="assessment1", + ) + print(response) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/GetAssessment.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_recommendation_detail.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/get_recommendation_detail.py index 59378ae36af4..537e2ff61b1b 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_recommendation_detail.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/get_recommendation_detail.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -30,12 +32,12 @@ def main(): ) response = client.recommendations.get( - resource_uri="resourceUri", - recommendation_id="recommendationId", + resource_uri="subscriptions/a5481ee1-95df-47d0-85d4-dd3f0dfa19bc/resourceGroups/resourceGroup/providers/Microsoft.Compute/availabilitysets/armavset", + recommendation_id="bd27ddc6-1312-4067-b4af-cbb45e32cfd7", ) print(response) -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/GetRecommendationDetail.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/GetRecommendationDetail.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_metadata.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/get_recommendation_metadata_entity.py similarity index 87% rename from sdk/advisor/azure-mgmt-advisor/generated_samples/get_metadata.py rename to sdk/advisor/azure-mgmt-advisor/generated_samples/get_recommendation_metadata_entity.py index f7687a0fb0ff..cd1410527838 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_metadata.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/get_recommendation_metadata_entity.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -14,7 +16,7 @@ pip install azure-identity pip install azure-mgmt-advisor # USAGE - python get_metadata.py + python get_recommendation_metadata_entity.py Before run the sample, please set the values of the client ID, tenant ID and client secret of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, @@ -35,6 +37,6 @@ def main(): print(response) -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/GetRecommendationMetadataEntity.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/GetRecommendationMetadataEntity.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_suppression_detail.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/get_suppression_detail.py index 23327ee3db2d..8d43f33403de 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_suppression_detail.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/get_suppression_detail.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -37,6 +39,6 @@ def main(): print(response) -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/GetSuppressionDetail.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/GetSuppressionDetail.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_generate_status.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_advisor_score.py similarity index 81% rename from sdk/advisor/azure-mgmt-advisor/generated_samples/get_generate_status.py rename to sdk/advisor/azure-mgmt-advisor/generated_samples/list_advisor_score.py index 37b8c96e0bf0..bbf725ecd396 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_generate_status.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_advisor_score.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -14,7 +16,7 @@ pip install azure-identity pip install azure-mgmt-advisor # USAGE - python get_generate_status.py + python list_advisor_score.py Before run the sample, please set the values of the client ID, tenant ID and client secret of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, @@ -26,15 +28,13 @@ def main(): client = AdvisorManagementClient( credential=DefaultAzureCredential(), - subscription_id="00000000-0000-0000-0000-000000000000", + subscription_id="a5481ee1-95df-47d0-85d4-dd3f0dfa19bc", ) - response = client.recommendations.get_generate_status( - operation_id="00000000-0000-0000-0000-000000000000", - ) + response = client.advisor_scores.list() print(response) -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/EmptyResponse.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/ListAdvisorScore.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/list_assessment_types.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_assessment_types.py new file mode 100644 index 000000000000..1a4dd7ef0d4d --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_assessment_types.py @@ -0,0 +1,41 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python list_assessment_types.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.assessment_types.list() + for item in response: + print(item) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/ListAssessmentTypes.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/list_assessments.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_assessments.py new file mode 100644 index 000000000000..63675181fa4e --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_assessments.py @@ -0,0 +1,41 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python list_assessments.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.assessments.list() + for item in response: + print(item) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/ListAssessments.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_configurations.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_configurations.py similarity index 89% rename from sdk/advisor/azure-mgmt-advisor/generated_samples/get_configurations.py rename to sdk/advisor/azure-mgmt-advisor/generated_samples/list_configurations.py index 775e2df8b694..91b9c1de69e8 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/get_configurations.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_configurations.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -14,7 +16,7 @@ pip install azure-identity pip install azure-mgmt-advisor # USAGE - python get_configurations.py + python list_configurations.py Before run the sample, please set the values of the client ID, tenant ID and client secret of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, @@ -34,6 +36,6 @@ def main(): print(item) -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/ListConfigurations.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/ListConfigurations.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/list_recommendation_metadata.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_recommendation_metadata.py new file mode 100644 index 000000000000..221b5e490827 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_recommendation_metadata.py @@ -0,0 +1,41 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python list_recommendation_metadata.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.recommendation_metadata.list() + for item in response: + print(item) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/ListRecommendationMetadata.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/list_recommendations.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_recommendations.py index d323d2a2f489..cb906e04c78e 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/list_recommendations.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_recommendations.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -26,7 +28,7 @@ def main(): client = AdvisorManagementClient( credential=DefaultAzureCredential(), - subscription_id="subscriptionId", + subscription_id="a5481ee1-95df-47d0-85d4-dd3f0dfa19bc", ) response = client.recommendations.list() @@ -34,6 +36,6 @@ def main(): print(item) -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/ListRecommendations.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/ListRecommendations.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/list_suppressions.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_suppressions.py index e256f99d45c6..a046be6b157a 100644 --- a/sdk/advisor/azure-mgmt-advisor/generated_samples/list_suppressions.py +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_suppressions.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,6 +8,7 @@ # -------------------------------------------------------------------------- from azure.identity import DefaultAzureCredential + from azure.mgmt.advisor import AdvisorManagementClient """ @@ -26,7 +28,7 @@ def main(): client = AdvisorManagementClient( credential=DefaultAzureCredential(), - subscription_id="subscriptionId1", + subscription_id="a5481ee1-95df-47d0-85d4-dd3f0dfa19bc", ) response = client.suppressions.list() @@ -34,6 +36,6 @@ def main(): print(item) -# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/stable/2020-01-01/examples/ListSuppressions.json +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/ListSuppressions.json if __name__ == "__main__": main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/list_workloads.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_workloads.py new file mode 100644 index 000000000000..5626ba7c1761 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/list_workloads.py @@ -0,0 +1,41 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python list_workloads.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.workloads.list() + for item in response: + print(item) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/ListWorkloads.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/operations_list.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/operations_list.py new file mode 100644 index 000000000000..95f83dc8b667 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/operations_list.py @@ -0,0 +1,41 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python operations_list.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.operations.list() + for item in response: + print(item) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/OperationsList.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/predict.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/predict.py new file mode 100644 index 000000000000..62b75ed51435 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/predict.py @@ -0,0 +1,53 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python predict.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="subscriptionId", + ) + + response = client.predict( + prediction_request={ + "properties": { + "extendedProperties": { + "deploymentType": "Linux_IaaS_Software_Store", + "numberOfInstances": 10, + "region": "CentralUS", + "sku": "Standard_Dv4", + "type": "iaas", + }, + "predictionType": "PredictiveRightsizing", + } + }, + ) + print(response) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/Predict.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/put_assessment.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/put_assessment.py new file mode 100644 index 000000000000..96acd1eb4265 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/put_assessment.py @@ -0,0 +1,49 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python put_assessment.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.assessments.put( + assessment_name="assessment1", + assessment_contract={ + "properties": { + "locale": "en-us", + "typeId": "23513bdb-e8a2-4f0b-8b6b-191ee1f52d34", + "workloadId": "f72b7134-800f-4f1b-a5bd-691e2140c7d5", + } + }, + ) + print(response) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/PutAssessment.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/resiliency_reviews_get.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/resiliency_reviews_get.py new file mode 100644 index 000000000000..78b974234ed0 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/resiliency_reviews_get.py @@ -0,0 +1,42 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python resiliency_reviews_get.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.resiliency_reviews.get( + review_id="11111111-1111-2222-3333-444444444444", + ) + print(response) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/ResiliencyReviewsGet.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/resiliency_reviews_list.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/resiliency_reviews_list.py new file mode 100644 index 000000000000..219d42b83435 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/resiliency_reviews_list.py @@ -0,0 +1,41 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python resiliency_reviews_list.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.resiliency_reviews.list() + for item in response: + print(item) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/ResiliencyReviewsList.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_approve.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_approve.py new file mode 100644 index 000000000000..6496aa3211fa --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_approve.py @@ -0,0 +1,42 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python triage_recommendations_approve.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + client.triage_recommendations.approve_triage_recommendation( + review_id="11111111-1111-2222-3333-444444444444", + recommendation_id="22222222-1111-2222-3333-444444444444", + ) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/TriageRecommendationsApprove.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_get.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_get.py new file mode 100644 index 000000000000..fd550d47d9cb --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_get.py @@ -0,0 +1,43 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python triage_recommendations_get.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.triage_recommendations.get( + review_id="11111111-1111-2222-3333-444444444444", + recommendation_id="22222222-1111-2222-3333-444444444444", + ) + print(response) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/TriageRecommendationsGet.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_list.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_list.py new file mode 100644 index 000000000000..a294351d6a4d --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_list.py @@ -0,0 +1,43 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python triage_recommendations_list.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.triage_recommendations.list( + review_id="11111111-1111-2222-3333-444444444444", + ) + for item in response: + print(item) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/TriageRecommendationsList.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_reject.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_reject.py new file mode 100644 index 000000000000..0b21344c2a1a --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_reject.py @@ -0,0 +1,43 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python triage_recommendations_reject.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + client.triage_recommendations.reject_triage_recommendation( + review_id="11111111-1111-2222-3333-444444444444", + recommendation_id="22222222-1111-2222-3333-444444444444", + recommendation_reject_body={"reasonForRejection": "NotARisk"}, + ) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/TriageRecommendationsReject.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_reset.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_reset.py new file mode 100644 index 000000000000..5ced32e8a6a6 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_recommendations_reset.py @@ -0,0 +1,42 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python triage_recommendations_reset.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + client.triage_recommendations.reset_triage_recommendation( + review_id="11111111-1111-2222-3333-444444444444", + recommendation_id="22222222-1111-2222-3333-444444444444", + ) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/TriageRecommendationsReset.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_resources_get.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_resources_get.py new file mode 100644 index 000000000000..44a3885b8cfe --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_resources_get.py @@ -0,0 +1,44 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python triage_resources_get.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.triage_resources.get( + review_id="11111111-1111-2222-3333-444444444444", + recommendation_id="22222222-1111-2222-3333-444444444444", + recommendation_resource_id="33333333-1111-2222-3333-444444444444", + ) + print(response) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/TriageResourcesGet.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_resources_list.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_resources_list.py new file mode 100644 index 000000000000..e159af59560f --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/triage_resources_list.py @@ -0,0 +1,44 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python triage_resources_list.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="00000000-1111-2222-3333-444444444444", + ) + + response = client.triage_resources.list( + review_id="11111111-1111-2222-3333-444444444445", + recommendation_id="22222222-1111-2222-3333-444444444444", + ) + for item in response: + print(item) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/TriageResourcesList.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_samples/update_tracked_recommendation.py b/sdk/advisor/azure-mgmt-advisor/generated_samples/update_tracked_recommendation.py new file mode 100644 index 000000000000..392a54decfa7 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_samples/update_tracked_recommendation.py @@ -0,0 +1,46 @@ +# pylint: disable=line-too-long,useless-suppression +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.advisor import AdvisorManagementClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-advisor +# USAGE + python update_tracked_recommendation.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = AdvisorManagementClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.recommendations.patch( + resource_uri="subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/xyz", + recommendation_id="c5532a76-8605-4328-ad27-f37ae87c086c", + tracked_properties={ + "properties": {"trackedProperties": {"postponedTime": "2023-10-01T00:00:00Z", "state": "Postponed"}} + }, + ) + print(response) + + +# x-ms-original-file: specification/advisor/resource-manager/Microsoft.Advisor/preview/2024-11-18-preview/examples/UpdateTrackedRecommendation.json +if __name__ == "__main__": + main() diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/conftest.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/conftest.py new file mode 100644 index 000000000000..b512a1f00792 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/conftest.py @@ -0,0 +1,35 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import os +import pytest +from dotenv import load_dotenv +from devtools_testutils import ( + test_proxy, + add_general_regex_sanitizer, + add_body_key_sanitizer, + add_header_regex_sanitizer, +) + +load_dotenv() + + +# For security, please avoid record sensitive identity information in recordings +@pytest.fixture(scope="session", autouse=True) +def add_sanitizers(test_proxy): + advisormanagement_subscription_id = os.environ.get("AZURE_SUBSCRIPTION_ID", "00000000-0000-0000-0000-000000000000") + advisormanagement_tenant_id = os.environ.get("AZURE_TENANT_ID", "00000000-0000-0000-0000-000000000000") + advisormanagement_client_id = os.environ.get("AZURE_CLIENT_ID", "00000000-0000-0000-0000-000000000000") + advisormanagement_client_secret = os.environ.get("AZURE_CLIENT_SECRET", "00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=advisormanagement_subscription_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=advisormanagement_tenant_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=advisormanagement_client_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=advisormanagement_client_secret, value="00000000-0000-0000-0000-000000000000") + + add_header_regex_sanitizer(key="Set-Cookie", value="[set-cookie;]") + add_header_regex_sanitizer(key="Cookie", value="cookie;") + add_body_key_sanitizer(json_path="$..access_token", value="access_token") diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management.py new file mode 100644 index 000000000000..ff0293bbaa52 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management.py @@ -0,0 +1,30 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagement(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_predict(self, resource_group): + response = self.client.predict( + prediction_request={"extendedProperties": {}, "predictionType": "str"}, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_advisor_scores_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_advisor_scores_operations.py new file mode 100644 index 000000000000..d6ffe30176a9 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_advisor_scores_operations.py @@ -0,0 +1,40 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementAdvisorScoresOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_advisor_scores_list(self, resource_group): + response = self.client.advisor_scores.list( + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_advisor_scores_get(self, resource_group): + response = self.client.advisor_scores.get( + name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_advisor_scores_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_advisor_scores_operations_async.py new file mode 100644 index 000000000000..d3660b8efe16 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_advisor_scores_operations_async.py @@ -0,0 +1,41 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementAdvisorScoresOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_advisor_scores_list(self, resource_group): + response = await self.client.advisor_scores.list( + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_advisor_scores_get(self, resource_group): + response = await self.client.advisor_scores.get( + name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessment_types_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessment_types_operations.py new file mode 100644 index 000000000000..ded47fcffede --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessment_types_operations.py @@ -0,0 +1,29 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementAssessmentTypesOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_assessment_types_list(self, resource_group): + response = self.client.assessment_types.list( + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessment_types_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessment_types_operations_async.py new file mode 100644 index 000000000000..e6a7b9447fa6 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessment_types_operations_async.py @@ -0,0 +1,30 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementAssessmentTypesOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_assessment_types_list(self, resource_group): + response = self.client.assessment_types.list( + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessments_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessments_operations.py new file mode 100644 index 000000000000..286bacf63c81 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessments_operations.py @@ -0,0 +1,84 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementAssessmentsOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_assessments_delete(self, resource_group): + response = self.client.assessments.delete( + assessment_name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_assessments_get(self, resource_group): + response = self.client.assessments.get( + assessment_name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_assessments_put(self, resource_group): + response = self.client.assessments.put( + assessment_name="str", + assessment_contract={ + "assessmentId": "str", + "description": "str", + "id": "str", + "locale": "str", + "name": "str", + "score": 0, + "state": "str", + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "type": "str", + "typeId": "str", + "typeVersion": "str", + "workloadId": "str", + "workloadName": "str", + }, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_assessments_list(self, resource_group): + response = self.client.assessments.list( + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessments_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessments_operations_async.py new file mode 100644 index 000000000000..027c04630a55 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_assessments_operations_async.py @@ -0,0 +1,85 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementAssessmentsOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_assessments_delete(self, resource_group): + response = await self.client.assessments.delete( + assessment_name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_assessments_get(self, resource_group): + response = await self.client.assessments.get( + assessment_name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_assessments_put(self, resource_group): + response = await self.client.assessments.put( + assessment_name="str", + assessment_contract={ + "assessmentId": "str", + "description": "str", + "id": "str", + "locale": "str", + "name": "str", + "score": 0, + "state": "str", + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "type": "str", + "typeId": "str", + "typeVersion": "str", + "workloadId": "str", + "workloadName": "str", + }, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_assessments_list(self, resource_group): + response = self.client.assessments.list( + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_async.py new file mode 100644 index 000000000000..03bdcfbef37a --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_async.py @@ -0,0 +1,31 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_predict(self, resource_group): + response = await self.client.predict( + prediction_request={"extendedProperties": {}, "predictionType": "str"}, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_configurations_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_configurations_operations.py new file mode 100644 index 000000000000..b95986aaae10 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_configurations_operations.py @@ -0,0 +1,115 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementConfigurationsOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_configurations_list_by_subscription(self, resource_group): + response = self.client.configurations.list_by_subscription( + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_configurations_create_in_subscription(self, resource_group): + response = self.client.configurations.create_in_subscription( + configuration_name="str", + config_contract={ + "digests": [ + { + "actionGroupResourceId": "str", + "categories": ["str"], + "frequency": 0, + "language": "str", + "name": "str", + "state": "str", + } + ], + "duration": "str", + "exclude": bool, + "id": "str", + "lowCpuThreshold": "str", + "name": "str", + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "type": "str", + }, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_configurations_list_by_resource_group(self, resource_group): + response = self.client.configurations.list_by_resource_group( + resource_group="str", + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_configurations_create_in_resource_group(self, resource_group): + response = self.client.configurations.create_in_resource_group( + configuration_name="str", + resource_group="str", + config_contract={ + "digests": [ + { + "actionGroupResourceId": "str", + "categories": ["str"], + "frequency": 0, + "language": "str", + "name": "str", + "state": "str", + } + ], + "duration": "str", + "exclude": bool, + "id": "str", + "lowCpuThreshold": "str", + "name": "str", + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "type": "str", + }, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_configurations_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_configurations_operations_async.py new file mode 100644 index 000000000000..718e81384413 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_configurations_operations_async.py @@ -0,0 +1,116 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementConfigurationsOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_configurations_list_by_subscription(self, resource_group): + response = self.client.configurations.list_by_subscription( + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_configurations_create_in_subscription(self, resource_group): + response = await self.client.configurations.create_in_subscription( + configuration_name="str", + config_contract={ + "digests": [ + { + "actionGroupResourceId": "str", + "categories": ["str"], + "frequency": 0, + "language": "str", + "name": "str", + "state": "str", + } + ], + "duration": "str", + "exclude": bool, + "id": "str", + "lowCpuThreshold": "str", + "name": "str", + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "type": "str", + }, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_configurations_list_by_resource_group(self, resource_group): + response = self.client.configurations.list_by_resource_group( + resource_group="str", + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_configurations_create_in_resource_group(self, resource_group): + response = await self.client.configurations.create_in_resource_group( + configuration_name="str", + resource_group="str", + config_contract={ + "digests": [ + { + "actionGroupResourceId": "str", + "categories": ["str"], + "frequency": 0, + "language": "str", + "name": "str", + "state": "str", + } + ], + "duration": "str", + "exclude": bool, + "id": "str", + "lowCpuThreshold": "str", + "name": "str", + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "type": "str", + }, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_operations.py new file mode 100644 index 000000000000..4dab228a9bee --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_operations.py @@ -0,0 +1,29 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_operations_list(self, resource_group): + response = self.client.operations.list( + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_operations_async.py new file mode 100644 index 000000000000..aed132a652d5 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_operations_async.py @@ -0,0 +1,30 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_operations_list(self, resource_group): + response = self.client.operations.list( + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendation_metadata_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendation_metadata_operations.py new file mode 100644 index 000000000000..9f6db3227da5 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendation_metadata_operations.py @@ -0,0 +1,40 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementRecommendationMetadataOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_recommendation_metadata_get(self, resource_group): + response = self.client.recommendation_metadata.get( + name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_recommendation_metadata_list(self, resource_group): + response = self.client.recommendation_metadata.list( + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendation_metadata_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendation_metadata_operations_async.py new file mode 100644 index 000000000000..835210e996a1 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendation_metadata_operations_async.py @@ -0,0 +1,41 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementRecommendationMetadataOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_recommendation_metadata_get(self, resource_group): + response = await self.client.recommendation_metadata.get( + name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_recommendation_metadata_list(self, resource_group): + response = self.client.recommendation_metadata.list( + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendations_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendations_operations.py new file mode 100644 index 000000000000..7d45f8afe317 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendations_operations.py @@ -0,0 +1,84 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementRecommendationsOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_recommendations_generate(self, resource_group): + response = self.client.recommendations.generate( + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_recommendations_get_generate_status(self, resource_group): + response = self.client.recommendations.get_generate_status( + operation_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_recommendations_list(self, resource_group): + response = self.client.recommendations.list( + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_recommendations_get(self, resource_group): + response = self.client.recommendations.get( + resource_uri="str", + recommendation_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_recommendations_patch(self, resource_group): + response = self.client.recommendations.patch( + resource_uri="str", + recommendation_id="str", + tracked_properties={ + "properties": { + "trackedProperties": { + "postponedTime": "2020-02-20 00:00:00", + "priority": "str", + "reason": "str", + "state": "str", + } + } + }, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendations_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendations_operations_async.py new file mode 100644 index 000000000000..9de031a365c8 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_recommendations_operations_async.py @@ -0,0 +1,85 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementRecommendationsOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_recommendations_generate(self, resource_group): + response = await self.client.recommendations.generate( + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_recommendations_get_generate_status(self, resource_group): + response = await self.client.recommendations.get_generate_status( + operation_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_recommendations_list(self, resource_group): + response = self.client.recommendations.list( + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_recommendations_get(self, resource_group): + response = await self.client.recommendations.get( + resource_uri="str", + recommendation_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_recommendations_patch(self, resource_group): + response = await self.client.recommendations.patch( + resource_uri="str", + recommendation_id="str", + tracked_properties={ + "properties": { + "trackedProperties": { + "postponedTime": "2020-02-20 00:00:00", + "priority": "str", + "reason": "str", + "state": "str", + } + } + }, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_resiliency_reviews_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_resiliency_reviews_operations.py new file mode 100644 index 000000000000..f9a4f4ed2f9d --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_resiliency_reviews_operations.py @@ -0,0 +1,40 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementResiliencyReviewsOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_resiliency_reviews_list(self, resource_group): + response = self.client.resiliency_reviews.list( + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_resiliency_reviews_get(self, resource_group): + response = self.client.resiliency_reviews.get( + review_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_resiliency_reviews_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_resiliency_reviews_operations_async.py new file mode 100644 index 000000000000..db3914fd244c --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_resiliency_reviews_operations_async.py @@ -0,0 +1,41 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementResiliencyReviewsOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_resiliency_reviews_list(self, resource_group): + response = self.client.resiliency_reviews.list( + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_resiliency_reviews_get(self, resource_group): + response = await self.client.resiliency_reviews.get( + review_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_suppressions_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_suppressions_operations.py new file mode 100644 index 000000000000..1b747109a73c --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_suppressions_operations.py @@ -0,0 +1,84 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementSuppressionsOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_suppressions_get(self, resource_group): + response = self.client.suppressions.get( + resource_uri="str", + recommendation_id="str", + name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_suppressions_create(self, resource_group): + response = self.client.suppressions.create( + resource_uri="str", + recommendation_id="str", + name="str", + suppression_contract={ + "expirationTimeStamp": "2020-02-20 00:00:00", + "id": "str", + "name": "str", + "suppressionId": "str", + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "ttl": "str", + "type": "str", + }, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_suppressions_delete(self, resource_group): + response = self.client.suppressions.delete( + resource_uri="str", + recommendation_id="str", + name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_suppressions_list(self, resource_group): + response = self.client.suppressions.list( + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_suppressions_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_suppressions_operations_async.py new file mode 100644 index 000000000000..367131b650e3 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_suppressions_operations_async.py @@ -0,0 +1,85 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementSuppressionsOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_suppressions_get(self, resource_group): + response = await self.client.suppressions.get( + resource_uri="str", + recommendation_id="str", + name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_suppressions_create(self, resource_group): + response = await self.client.suppressions.create( + resource_uri="str", + recommendation_id="str", + name="str", + suppression_contract={ + "expirationTimeStamp": "2020-02-20 00:00:00", + "id": "str", + "name": "str", + "suppressionId": "str", + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "ttl": "str", + "type": "str", + }, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_suppressions_delete(self, resource_group): + response = await self.client.suppressions.delete( + resource_uri="str", + recommendation_id="str", + name="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_suppressions_list(self, resource_group): + response = self.client.suppressions.list( + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_recommendations_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_recommendations_operations.py new file mode 100644 index 000000000000..0b750b2dd503 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_recommendations_operations.py @@ -0,0 +1,79 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementTriageRecommendationsOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_triage_recommendations_list(self, resource_group): + response = self.client.triage_recommendations.list( + review_id="str", + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_triage_recommendations_get(self, resource_group): + response = self.client.triage_recommendations.get( + review_id="str", + recommendation_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_triage_recommendations_approve_triage_recommendation(self, resource_group): + response = self.client.triage_recommendations.approve_triage_recommendation( + review_id="str", + recommendation_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_triage_recommendations_reject_triage_recommendation(self, resource_group): + response = self.client.triage_recommendations.reject_triage_recommendation( + review_id="str", + recommendation_id="str", + recommendation_reject_body={"reasonForRejection": "str"}, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_triage_recommendations_reset_triage_recommendation(self, resource_group): + response = self.client.triage_recommendations.reset_triage_recommendation( + review_id="str", + recommendation_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_recommendations_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_recommendations_operations_async.py new file mode 100644 index 000000000000..0b8e3b911c26 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_recommendations_operations_async.py @@ -0,0 +1,80 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementTriageRecommendationsOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_triage_recommendations_list(self, resource_group): + response = self.client.triage_recommendations.list( + review_id="str", + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_triage_recommendations_get(self, resource_group): + response = await self.client.triage_recommendations.get( + review_id="str", + recommendation_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_triage_recommendations_approve_triage_recommendation(self, resource_group): + response = await self.client.triage_recommendations.approve_triage_recommendation( + review_id="str", + recommendation_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_triage_recommendations_reject_triage_recommendation(self, resource_group): + response = await self.client.triage_recommendations.reject_triage_recommendation( + review_id="str", + recommendation_id="str", + recommendation_reject_body={"reasonForRejection": "str"}, + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_triage_recommendations_reset_triage_recommendation(self, resource_group): + response = await self.client.triage_recommendations.reset_triage_recommendation( + review_id="str", + recommendation_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_resources_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_resources_operations.py new file mode 100644 index 000000000000..e22985f6dbb1 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_resources_operations.py @@ -0,0 +1,44 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementTriageResourcesOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_triage_resources_get(self, resource_group): + response = self.client.triage_resources.get( + review_id="str", + recommendation_id="str", + recommendation_resource_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_triage_resources_list(self, resource_group): + response = self.client.triage_resources.list( + review_id="str", + recommendation_id="str", + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_resources_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_resources_operations_async.py new file mode 100644 index 000000000000..8351062a34af --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_triage_resources_operations_async.py @@ -0,0 +1,45 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementTriageResourcesOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_triage_resources_get(self, resource_group): + response = await self.client.triage_resources.get( + review_id="str", + recommendation_id="str", + recommendation_resource_id="str", + api_version="2024-11-18-preview", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_triage_resources_list(self, resource_group): + response = self.client.triage_resources.list( + review_id="str", + recommendation_id="str", + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_workloads_operations.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_workloads_operations.py new file mode 100644 index 000000000000..b328a29ec4da --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_workloads_operations.py @@ -0,0 +1,29 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementWorkloadsOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_workloads_list(self, resource_group): + response = self.client.workloads.list( + api_version="2024-11-18-preview", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_workloads_operations_async.py b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_workloads_operations_async.py new file mode 100644 index 000000000000..ac8947204399 --- /dev/null +++ b/sdk/advisor/azure-mgmt-advisor/generated_tests/test_advisor_management_workloads_operations_async.py @@ -0,0 +1,30 @@ +# 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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.advisor.aio import AdvisorManagementClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestAdvisorManagementWorkloadsOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(AdvisorManagementClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_workloads_list(self, resource_group): + response = self.client.workloads.list( + api_version="2024-11-18-preview", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/advisor/azure-mgmt-advisor/sdk_packaging.toml b/sdk/advisor/azure-mgmt-advisor/sdk_packaging.toml index aaf516b84881..79ba22f792dd 100644 --- a/sdk/advisor/azure-mgmt-advisor/sdk_packaging.toml +++ b/sdk/advisor/azure-mgmt-advisor/sdk_packaging.toml @@ -3,7 +3,7 @@ package_name = "azure-mgmt-advisor" package_nspkg = "azure-mgmt-nspkg" package_pprint_name = "Advisor" package_doc_id = "advisor" -is_stable = true +is_stable = false is_arm = true sample_link = "" title = "AdvisorManagementClient" diff --git a/sdk/advisor/azure-mgmt-advisor/setup.py b/sdk/advisor/azure-mgmt-advisor/setup.py index 0dcd483c20fc..8ab4253aaac8 100644 --- a/sdk/advisor/azure-mgmt-advisor/setup.py +++ b/sdk/advisor/azure-mgmt-advisor/setup.py @@ -1,10 +1,10 @@ #!/usr/bin/env python -#------------------------------------------------------------------------- +# ------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for # license information. -#-------------------------------------------------------------------------- +# -------------------------------------------------------------------------- import re import os.path @@ -16,63 +16,67 @@ PACKAGE_PPRINT_NAME = "Advisor" # a-b-c => a/b/c -package_folder_path = PACKAGE_NAME.replace('-', '/') +package_folder_path = PACKAGE_NAME.replace("-", "/") # a-b-c => a.b.c -namespace_name = PACKAGE_NAME.replace('-', '.') +namespace_name = PACKAGE_NAME.replace("-", ".") # Version extraction inspired from 'requests' -with open(os.path.join(package_folder_path, 'version.py') - if os.path.exists(os.path.join(package_folder_path, 'version.py')) - else os.path.join(package_folder_path, '_version.py'), 'r') as fd: - version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', - fd.read(), re.MULTILINE).group(1) +with open( + os.path.join(package_folder_path, "version.py") + if os.path.exists(os.path.join(package_folder_path, "version.py")) + else os.path.join(package_folder_path, "_version.py"), + "r", +) as fd: + version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1) if not version: - raise RuntimeError('Cannot find version information') + raise RuntimeError("Cannot find version information") -with open('README.md', encoding='utf-8') as f: +with open("README.md", encoding="utf-8") as f: readme = f.read() -with open('CHANGELOG.md', encoding='utf-8') as f: +with open("CHANGELOG.md", encoding="utf-8") as f: changelog = f.read() setup( name=PACKAGE_NAME, version=version, - description='Microsoft Azure {} Client Library for Python'.format(PACKAGE_PPRINT_NAME), - long_description=readme + '\n\n' + changelog, - long_description_content_type='text/markdown', - license='MIT License', - author='Microsoft Corporation', - author_email='azpysdkhelp@microsoft.com', - url='https://github.com/Azure/azure-sdk-for-python', + description="Microsoft Azure {} Client Library for Python".format(PACKAGE_PPRINT_NAME), + long_description=readme + "\n\n" + changelog, + long_description_content_type="text/markdown", + license="MIT License", + author="Microsoft Corporation", + author_email="azpysdkhelp@microsoft.com", + url="https://github.com/Azure/azure-sdk-for-python", keywords="azure, azure sdk", # update with search keywords relevant to the azure service / product classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3 :: Only', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'License :: OSI Approved :: MIT License', + "Development Status :: 4 - Beta", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "License :: OSI Approved :: MIT License", ], zip_safe=False, - packages=find_packages(exclude=[ - 'tests', - # Exclude packages that will be covered by PEP420 or nspkg - 'azure', - 'azure.mgmt', - ]), + packages=find_packages( + exclude=[ + "tests", + # Exclude packages that will be covered by PEP420 or nspkg + "azure", + "azure.mgmt", + ] + ), include_package_data=True, package_data={ - 'pytyped': ['py.typed'], + "pytyped": ["py.typed"], }, install_requires=[ - "msrest>=0.7.1", - "azure-common~=1.1", - "azure-mgmt-core>=1.3.2,<2.0.0", - "typing-extensions>=4.3.0; python_version<'3.8.0'", + "isodate>=0.6.1", + "typing-extensions>=4.6.0", + "azure-common>=1.1", + "azure-mgmt-core>=1.5.0", ], - python_requires=">=3.7" + python_requires=">=3.9", )