diff --git a/sdk/compute/azure-mgmt-compute/CHANGELOG.md b/sdk/compute/azure-mgmt-compute/CHANGELOG.md index b62258de44ae..e4f01947e535 100644 --- a/sdk/compute/azure-mgmt-compute/CHANGELOG.md +++ b/sdk/compute/azure-mgmt-compute/CHANGELOG.md @@ -1,5 +1,26 @@ # Release History +## 35.0.0 (2025-05-06) + +### Breaking Changes + + - Model AvailabilitySet no longer has parameter virtual_machine_scale_set_migration_info + - Model AvailabilitySetUpdate no longer has parameter virtual_machine_scale_set_migration_info + - Model ProxyAgentSettings no longer has parameter imds + - Model ProxyAgentSettings no longer has parameter wire_server + - Model ResiliencyPolicy no longer has parameter automatic_zone_rebalancing_policy + - Model ScaleInPolicy no longer has parameter prioritize_unhealthy_v_ms + - Model SkuProfileVMSize no longer has parameter rank + - Model StorageProfile no longer has parameter align_regional_disks_to_vm_zone + - Model VirtualMachine no longer has parameter placement + - Model VirtualMachineScaleSetVM no longer has parameter resilient_vm_deletion_status + - Removed operation AvailabilitySetsOperations.begin_convert_to_virtual_machine_scale_set + - Removed operation AvailabilitySetsOperations.cancel_migration_to_virtual_machine_scale_set + - Removed operation AvailabilitySetsOperations.start_migration_to_virtual_machine_scale_set + - Removed operation AvailabilitySetsOperations.validate_migration_to_virtual_machine_scale_set + - Removed operation VirtualMachineImagesOperations.list_with_properties + - Removed operation VirtualMachinesOperations.begin_migrate_to_vm_scale_set + ## 34.1.0 (2025-03-24) ### Features Added diff --git a/sdk/compute/azure-mgmt-compute/README.md b/sdk/compute/azure-mgmt-compute/README.md index 91cf3d114ce6..c52080ad46e3 100644 --- a/sdk/compute/azure-mgmt-compute/README.md +++ b/sdk/compute/azure-mgmt-compute/README.md @@ -1,7 +1,7 @@ # Microsoft Azure SDK for Python This is the Microsoft Azure Compute Management Client Library. -This package has been tested with Python 3.8+. +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_ @@ -12,7 +12,7 @@ _Azure SDK Python packages support for Python 2.7 has ended 01 January 2022. For ### Prerequisites -- Python 3.8+ is required to use this package. +- Python 3.9+ is required to use this package. - [Azure subscription](https://azure.microsoft.com/free/) ### Install the package @@ -24,7 +24,7 @@ pip install azure-identity ### Authentication -By default, [Azure Active Directory](https://aka.ms/awps/aad) token authentication depends on correct configure of following environment variables. +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. diff --git a/sdk/compute/azure-mgmt-compute/_meta.json b/sdk/compute/azure-mgmt-compute/_meta.json index af200276c392..e47ea0cf6bd0 100644 --- a/sdk/compute/azure-mgmt-compute/_meta.json +++ b/sdk/compute/azure-mgmt-compute/_meta.json @@ -1,12 +1,12 @@ { - "commit": "85dbdf68f1c3e1693bd94eff5e8a869f1a07ed78", + "commit": "284c33b120b3c91b25c6216aa3721fd7755a33e7", "repository_url": "https://github.com/Azure/azure-rest-api-specs", "autorest": "3.10.2", "use": [ - "@autorest/python@6.27.4", + "@autorest/python@6.34.1", "@autorest/modelerfour@4.27.0" ], - "autorest_command": "autorest specification/compute/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/azure-sdk-for-python/sdk --use=@autorest/python@6.27.4 --use=@autorest/modelerfour@4.27.0 --version=3.10.2 --version-tolerant=False", + "autorest_command": "autorest specification/compute/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/compute/resource-manager/readme.md", "package-2024-03-02-only": "2024-07-16 12:23:13 -0400 602fb5144a226577186e35845422c11db9067cf8 Microsoft.Compute/DiskRP/stable/2024-03-02/snapshot.json", "package-2024-03-01-only": "2024-06-05 15:03:47 -0700 491e00d17f24909ecf5e1030b3833bed51224e92 Microsoft.Compute/ComputeRP/stable/2024-03-01/virtualMachineScaleSet.json", diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_compute_management_client.py index cfa78651fca7..d3856abdcd3f 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_compute_management_client.py @@ -9,17 +9,19 @@ # regenerated. # -------------------------------------------------------------------------- -from typing import Any, Optional, TYPE_CHECKING +from typing import Any, Optional, TYPE_CHECKING, cast from typing_extensions import Self from azure.core.pipeline import policies +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 azure.profiles import KnownProfiles, ProfileDefinition from azure.profiles.multiapiclient import MultiApiClientMixin from ._configuration import ComputeManagementClientConfiguration -from ._serialization import Deserializer, Serializer +from ._utils.serialization import Deserializer, Serializer if TYPE_CHECKING: # pylint: disable=unused-import,ungrouped-imports @@ -27,7 +29,7 @@ class _SDKClient(object): def __init__(self, *args, **kwargs): - """This is a fake class to support current implemetation of MultiApiClientMixin." + """This is a fake class to support current implementation of MultiApiClientMixin." Will be removed in final version of multiapi azure-core based client """ pass @@ -61,14 +63,14 @@ class ComputeManagementClient(MultiApiClientMixin, _SDKClient): LATEST_PROFILE = ProfileDefinition({ _PROFILE_TAG: { None: DEFAULT_API_VERSION, - 'availability_sets': '2024-11-01', - 'capacity_reservation_groups': '2024-11-01', - 'capacity_reservations': '2024-11-01', + 'availability_sets': '2024-07-01', + 'capacity_reservation_groups': '2024-07-01', + 'capacity_reservations': '2024-07-01', 'community_galleries': '2023-07-03', 'community_gallery_image_versions': '2023-07-03', 'community_gallery_images': '2023-07-03', - 'dedicated_host_groups': '2024-11-01', - 'dedicated_hosts': '2024-11-01', + 'dedicated_host_groups': '2024-07-01', + 'dedicated_hosts': '2024-07-01', 'disk_accesses': '2024-03-02', 'disk_encryption_sets': '2024-03-02', 'disk_restore_point': '2024-03-02', @@ -79,32 +81,32 @@ class ComputeManagementClient(MultiApiClientMixin, _SDKClient): 'gallery_image_versions': '2023-07-03', 'gallery_images': '2023-07-03', 'gallery_sharing_profile': '2023-07-03', - 'images': '2024-11-01', - 'log_analytics': '2024-11-01', - 'operations': '2024-11-01', - 'proximity_placement_groups': '2024-11-01', + 'images': '2024-07-01', + 'log_analytics': '2024-07-01', + 'operations': '2024-07-01', + 'proximity_placement_groups': '2024-07-01', 'resource_skus': '2021-07-01', - 'restore_point_collections': '2024-11-01', - 'restore_points': '2024-11-01', + 'restore_point_collections': '2024-07-01', + 'restore_points': '2024-07-01', 'shared_galleries': '2023-07-03', 'shared_gallery_image_versions': '2023-07-03', 'shared_gallery_images': '2023-07-03', 'snapshots': '2024-03-02', - 'ssh_public_keys': '2024-11-01', - 'usage': '2024-11-01', - 'virtual_machine_extension_images': '2024-11-01', - 'virtual_machine_extensions': '2024-11-01', - 'virtual_machine_images': '2024-11-01', - 'virtual_machine_images_edge_zone': '2024-11-01', - 'virtual_machine_run_commands': '2024-11-01', - 'virtual_machine_scale_set_extensions': '2024-11-01', - 'virtual_machine_scale_set_rolling_upgrades': '2024-11-01', - 'virtual_machine_scale_set_vm_extensions': '2024-11-01', - 'virtual_machine_scale_set_vm_run_commands': '2024-11-01', - 'virtual_machine_scale_set_vms': '2024-11-01', - 'virtual_machine_scale_sets': '2024-11-01', - 'virtual_machine_sizes': '2024-11-01', - 'virtual_machines': '2024-11-01', + 'ssh_public_keys': '2024-07-01', + 'usage': '2024-07-01', + 'virtual_machine_extension_images': '2024-07-01', + 'virtual_machine_extensions': '2024-07-01', + 'virtual_machine_images': '2024-07-01', + 'virtual_machine_images_edge_zone': '2024-07-01', + 'virtual_machine_run_commands': '2024-07-01', + 'virtual_machine_scale_set_extensions': '2024-07-01', + 'virtual_machine_scale_set_rolling_upgrades': '2024-07-01', + 'virtual_machine_scale_set_vm_extensions': '2024-07-01', + 'virtual_machine_scale_set_vm_run_commands': '2024-07-01', + 'virtual_machine_scale_set_vms': '2024-07-01', + 'virtual_machine_scale_sets': '2024-07-01', + 'virtual_machine_sizes': '2024-07-01', + 'virtual_machines': '2024-07-01', }}, _PROFILE_TAG + " latest" ) @@ -114,13 +116,18 @@ def __init__( credential: "TokenCredential", subscription_id: str, api_version: Optional[str]=None, - base_url: str = "https://management.azure.com", + base_url: Optional[str] = None, profile: KnownProfiles=KnownProfiles.default, **kwargs: Any ): if api_version: kwargs.setdefault('api_version', api_version) - self._config = ComputeManagementClientConfiguration(credential, subscription_id, **kwargs) + _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 = ComputeManagementClientConfiguration(credential, subscription_id, credential_scopes=credential_scopes, **kwargs) _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -139,7 +146,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + self._client: ARMPipelineClient = ARMPipelineClient(base_url=cast(str, base_url), policies=_policies, **kwargs) super(ComputeManagementClient, self).__init__( api_version=api_version, profile=profile @@ -171,7 +178,7 @@ def models(cls, api_version=DEFAULT_API_VERSION): * 2023-07-03: :mod:`v2023_07_03.models` * 2023-10-02: :mod:`v2023_10_02.models` * 2024-03-02: :mod:`v2024_03_02.models` - * 2024-11-01: :mod:`v2024_11_01.models` + * 2024-07-01: :mod:`v2024_07_01.models` * 2024-11-04: :mod:`v2024_11_04.models` """ if api_version == '2016-03-30': @@ -228,8 +235,8 @@ def models(cls, api_version=DEFAULT_API_VERSION): elif api_version == '2024-03-02': from .v2024_03_02 import models return models - elif api_version == '2024-11-01': - from .v2024_11_01 import models + elif api_version == '2024-07-01': + from .v2024_07_01 import models return models elif api_version == '2024-11-04': from .v2024_11_04 import models @@ -247,7 +254,7 @@ def availability_sets(self): * 2019-12-01: :class:`AvailabilitySetsOperations` * 2020-06-01: :class:`AvailabilitySetsOperations` * 2021-07-01: :class:`AvailabilitySetsOperations` - * 2024-11-01: :class:`AvailabilitySetsOperations` + * 2024-07-01: :class:`AvailabilitySetsOperations` """ api_version = self._get_api_version('availability_sets') if api_version == '2016-03-30': @@ -264,8 +271,8 @@ def availability_sets(self): from .v2020_06_01.operations import AvailabilitySetsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import AvailabilitySetsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import AvailabilitySetsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import AvailabilitySetsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'availability_sets'".format(api_version)) self._config.api_version = api_version @@ -276,13 +283,13 @@ def capacity_reservation_groups(self): """Instance depends on the API version: * 2021-07-01: :class:`CapacityReservationGroupsOperations` - * 2024-11-01: :class:`CapacityReservationGroupsOperations` + * 2024-07-01: :class:`CapacityReservationGroupsOperations` """ api_version = self._get_api_version('capacity_reservation_groups') if api_version == '2021-07-01': from .v2021_07_01.operations import CapacityReservationGroupsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import CapacityReservationGroupsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import CapacityReservationGroupsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'capacity_reservation_groups'".format(api_version)) self._config.api_version = api_version @@ -293,13 +300,13 @@ def capacity_reservations(self): """Instance depends on the API version: * 2021-07-01: :class:`CapacityReservationsOperations` - * 2024-11-01: :class:`CapacityReservationsOperations` + * 2024-07-01: :class:`CapacityReservationsOperations` """ api_version = self._get_api_version('capacity_reservations') if api_version == '2021-07-01': from .v2021_07_01.operations import CapacityReservationsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import CapacityReservationsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import CapacityReservationsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'capacity_reservations'".format(api_version)) self._config.api_version = api_version @@ -458,7 +465,7 @@ def dedicated_host_groups(self): * 2019-12-01: :class:`DedicatedHostGroupsOperations` * 2020-06-01: :class:`DedicatedHostGroupsOperations` * 2021-07-01: :class:`DedicatedHostGroupsOperations` - * 2024-11-01: :class:`DedicatedHostGroupsOperations` + * 2024-07-01: :class:`DedicatedHostGroupsOperations` """ api_version = self._get_api_version('dedicated_host_groups') if api_version == '2019-07-01': @@ -469,8 +476,8 @@ def dedicated_host_groups(self): from .v2020_06_01.operations import DedicatedHostGroupsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import DedicatedHostGroupsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import DedicatedHostGroupsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import DedicatedHostGroupsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'dedicated_host_groups'".format(api_version)) self._config.api_version = api_version @@ -484,7 +491,7 @@ def dedicated_hosts(self): * 2019-12-01: :class:`DedicatedHostsOperations` * 2020-06-01: :class:`DedicatedHostsOperations` * 2021-07-01: :class:`DedicatedHostsOperations` - * 2024-11-01: :class:`DedicatedHostsOperations` + * 2024-07-01: :class:`DedicatedHostsOperations` """ api_version = self._get_api_version('dedicated_hosts') if api_version == '2019-07-01': @@ -495,8 +502,8 @@ def dedicated_hosts(self): from .v2020_06_01.operations import DedicatedHostsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import DedicatedHostsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import DedicatedHostsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import DedicatedHostsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'dedicated_hosts'".format(api_version)) self._config.api_version = api_version @@ -790,7 +797,7 @@ def images(self): * 2019-12-01: :class:`ImagesOperations` * 2020-06-01: :class:`ImagesOperations` * 2021-07-01: :class:`ImagesOperations` - * 2024-11-01: :class:`ImagesOperations` + * 2024-07-01: :class:`ImagesOperations` """ api_version = self._get_api_version('images') if api_version == '2017-03-30': @@ -805,8 +812,8 @@ def images(self): from .v2020_06_01.operations import ImagesOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import ImagesOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import ImagesOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import ImagesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'images'".format(api_version)) self._config.api_version = api_version @@ -821,7 +828,7 @@ def log_analytics(self): * 2019-12-01: :class:`LogAnalyticsOperations` * 2020-06-01: :class:`LogAnalyticsOperations` * 2021-07-01: :class:`LogAnalyticsOperations` - * 2024-11-01: :class:`LogAnalyticsOperations` + * 2024-07-01: :class:`LogAnalyticsOperations` """ api_version = self._get_api_version('log_analytics') if api_version == '2017-12-01': @@ -834,8 +841,8 @@ def log_analytics(self): from .v2020_06_01.operations import LogAnalyticsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import LogAnalyticsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import LogAnalyticsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import LogAnalyticsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'log_analytics'".format(api_version)) self._config.api_version = api_version @@ -850,7 +857,7 @@ def operations(self): * 2019-12-01: :class:`Operations` * 2020-06-01: :class:`Operations` * 2021-07-01: :class:`Operations` - * 2024-11-01: :class:`Operations` + * 2024-07-01: :class:`Operations` """ api_version = self._get_api_version('operations') if api_version == '2017-12-01': @@ -863,8 +870,8 @@ def operations(self): from .v2020_06_01.operations import Operations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import Operations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import Operations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import Operations as OperationClass else: raise ValueError("API version {} does not have operation group 'operations'".format(api_version)) self._config.api_version = api_version @@ -878,7 +885,7 @@ def proximity_placement_groups(self): * 2019-12-01: :class:`ProximityPlacementGroupsOperations` * 2020-06-01: :class:`ProximityPlacementGroupsOperations` * 2021-07-01: :class:`ProximityPlacementGroupsOperations` - * 2024-11-01: :class:`ProximityPlacementGroupsOperations` + * 2024-07-01: :class:`ProximityPlacementGroupsOperations` """ api_version = self._get_api_version('proximity_placement_groups') if api_version == '2019-07-01': @@ -889,8 +896,8 @@ def proximity_placement_groups(self): from .v2020_06_01.operations import ProximityPlacementGroupsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import ProximityPlacementGroupsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import ProximityPlacementGroupsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import ProximityPlacementGroupsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'proximity_placement_groups'".format(api_version)) self._config.api_version = api_version @@ -924,13 +931,13 @@ def restore_point_collections(self): """Instance depends on the API version: * 2021-07-01: :class:`RestorePointCollectionsOperations` - * 2024-11-01: :class:`RestorePointCollectionsOperations` + * 2024-07-01: :class:`RestorePointCollectionsOperations` """ api_version = self._get_api_version('restore_point_collections') if api_version == '2021-07-01': from .v2021_07_01.operations import RestorePointCollectionsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import RestorePointCollectionsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import RestorePointCollectionsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'restore_point_collections'".format(api_version)) self._config.api_version = api_version @@ -941,13 +948,13 @@ def restore_points(self): """Instance depends on the API version: * 2021-07-01: :class:`RestorePointsOperations` - * 2024-11-01: :class:`RestorePointsOperations` + * 2024-07-01: :class:`RestorePointsOperations` """ api_version = self._get_api_version('restore_points') if api_version == '2021-07-01': from .v2021_07_01.operations import RestorePointsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import RestorePointsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import RestorePointsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'restore_points'".format(api_version)) self._config.api_version = api_version @@ -1052,7 +1059,7 @@ def ssh_public_keys(self): * 2019-12-01: :class:`SshPublicKeysOperations` * 2020-06-01: :class:`SshPublicKeysOperations` * 2021-07-01: :class:`SshPublicKeysOperations` - * 2024-11-01: :class:`SshPublicKeysOperations` + * 2024-07-01: :class:`SshPublicKeysOperations` """ api_version = self._get_api_version('ssh_public_keys') if api_version == '2019-12-01': @@ -1061,8 +1068,8 @@ def ssh_public_keys(self): from .v2020_06_01.operations import SshPublicKeysOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import SshPublicKeysOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import SshPublicKeysOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import SshPublicKeysOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'ssh_public_keys'".format(api_version)) self._config.api_version = api_version @@ -1079,7 +1086,7 @@ def usage(self): * 2019-12-01: :class:`UsageOperations` * 2020-06-01: :class:`UsageOperations` * 2021-07-01: :class:`UsageOperations` - * 2024-11-01: :class:`UsageOperations` + * 2024-07-01: :class:`UsageOperations` """ api_version = self._get_api_version('usage') if api_version == '2016-03-30': @@ -1096,8 +1103,8 @@ def usage(self): from .v2020_06_01.operations import UsageOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import UsageOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import UsageOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import UsageOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'usage'".format(api_version)) self._config.api_version = api_version @@ -1114,7 +1121,7 @@ def virtual_machine_extension_images(self): * 2019-12-01: :class:`VirtualMachineExtensionImagesOperations` * 2020-06-01: :class:`VirtualMachineExtensionImagesOperations` * 2021-07-01: :class:`VirtualMachineExtensionImagesOperations` - * 2024-11-01: :class:`VirtualMachineExtensionImagesOperations` + * 2024-07-01: :class:`VirtualMachineExtensionImagesOperations` """ api_version = self._get_api_version('virtual_machine_extension_images') if api_version == '2016-03-30': @@ -1131,8 +1138,8 @@ def virtual_machine_extension_images(self): from .v2020_06_01.operations import VirtualMachineExtensionImagesOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineExtensionImagesOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineExtensionImagesOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineExtensionImagesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_extension_images'".format(api_version)) self._config.api_version = api_version @@ -1149,7 +1156,7 @@ def virtual_machine_extensions(self): * 2019-12-01: :class:`VirtualMachineExtensionsOperations` * 2020-06-01: :class:`VirtualMachineExtensionsOperations` * 2021-07-01: :class:`VirtualMachineExtensionsOperations` - * 2024-11-01: :class:`VirtualMachineExtensionsOperations` + * 2024-07-01: :class:`VirtualMachineExtensionsOperations` """ api_version = self._get_api_version('virtual_machine_extensions') if api_version == '2016-03-30': @@ -1166,8 +1173,8 @@ def virtual_machine_extensions(self): from .v2020_06_01.operations import VirtualMachineExtensionsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineExtensionsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineExtensionsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineExtensionsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_extensions'".format(api_version)) self._config.api_version = api_version @@ -1184,7 +1191,7 @@ def virtual_machine_images(self): * 2019-12-01: :class:`VirtualMachineImagesOperations` * 2020-06-01: :class:`VirtualMachineImagesOperations` * 2021-07-01: :class:`VirtualMachineImagesOperations` - * 2024-11-01: :class:`VirtualMachineImagesOperations` + * 2024-07-01: :class:`VirtualMachineImagesOperations` """ api_version = self._get_api_version('virtual_machine_images') if api_version == '2016-03-30': @@ -1201,8 +1208,8 @@ def virtual_machine_images(self): from .v2020_06_01.operations import VirtualMachineImagesOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineImagesOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineImagesOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineImagesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_images'".format(api_version)) self._config.api_version = api_version @@ -1213,13 +1220,13 @@ def virtual_machine_images_edge_zone(self): """Instance depends on the API version: * 2021-07-01: :class:`VirtualMachineImagesEdgeZoneOperations` - * 2024-11-01: :class:`VirtualMachineImagesEdgeZoneOperations` + * 2024-07-01: :class:`VirtualMachineImagesEdgeZoneOperations` """ api_version = self._get_api_version('virtual_machine_images_edge_zone') if api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineImagesEdgeZoneOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineImagesEdgeZoneOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineImagesEdgeZoneOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_images_edge_zone'".format(api_version)) self._config.api_version = api_version @@ -1235,7 +1242,7 @@ def virtual_machine_run_commands(self): * 2019-12-01: :class:`VirtualMachineRunCommandsOperations` * 2020-06-01: :class:`VirtualMachineRunCommandsOperations` * 2021-07-01: :class:`VirtualMachineRunCommandsOperations` - * 2024-11-01: :class:`VirtualMachineRunCommandsOperations` + * 2024-07-01: :class:`VirtualMachineRunCommandsOperations` """ api_version = self._get_api_version('virtual_machine_run_commands') if api_version == '2017-03-30': @@ -1250,8 +1257,8 @@ def virtual_machine_run_commands(self): from .v2020_06_01.operations import VirtualMachineRunCommandsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineRunCommandsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineRunCommandsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineRunCommandsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_run_commands'".format(api_version)) self._config.api_version = api_version @@ -1267,7 +1274,7 @@ def virtual_machine_scale_set_extensions(self): * 2019-12-01: :class:`VirtualMachineScaleSetExtensionsOperations` * 2020-06-01: :class:`VirtualMachineScaleSetExtensionsOperations` * 2021-07-01: :class:`VirtualMachineScaleSetExtensionsOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetExtensionsOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetExtensionsOperations` """ api_version = self._get_api_version('virtual_machine_scale_set_extensions') if api_version == '2017-03-30': @@ -1282,8 +1289,8 @@ def virtual_machine_scale_set_extensions(self): from .v2020_06_01.operations import VirtualMachineScaleSetExtensionsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineScaleSetExtensionsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineScaleSetExtensionsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineScaleSetExtensionsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_set_extensions'".format(api_version)) self._config.api_version = api_version @@ -1299,7 +1306,7 @@ def virtual_machine_scale_set_rolling_upgrades(self): * 2019-12-01: :class:`VirtualMachineScaleSetRollingUpgradesOperations` * 2020-06-01: :class:`VirtualMachineScaleSetRollingUpgradesOperations` * 2021-07-01: :class:`VirtualMachineScaleSetRollingUpgradesOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetRollingUpgradesOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetRollingUpgradesOperations` """ api_version = self._get_api_version('virtual_machine_scale_set_rolling_upgrades') if api_version == '2017-03-30': @@ -1314,8 +1321,8 @@ def virtual_machine_scale_set_rolling_upgrades(self): from .v2020_06_01.operations import VirtualMachineScaleSetRollingUpgradesOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineScaleSetRollingUpgradesOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineScaleSetRollingUpgradesOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineScaleSetRollingUpgradesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_set_rolling_upgrades'".format(api_version)) self._config.api_version = api_version @@ -1329,7 +1336,7 @@ def virtual_machine_scale_set_vm_extensions(self): * 2019-12-01: :class:`VirtualMachineScaleSetVMExtensionsOperations` * 2020-06-01: :class:`VirtualMachineScaleSetVMExtensionsOperations` * 2021-07-01: :class:`VirtualMachineScaleSetVMExtensionsOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetVMExtensionsOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetVMExtensionsOperations` """ api_version = self._get_api_version('virtual_machine_scale_set_vm_extensions') if api_version == '2019-07-01': @@ -1340,8 +1347,8 @@ def virtual_machine_scale_set_vm_extensions(self): from .v2020_06_01.operations import VirtualMachineScaleSetVMExtensionsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineScaleSetVMExtensionsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineScaleSetVMExtensionsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineScaleSetVMExtensionsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_set_vm_extensions'".format(api_version)) self._config.api_version = api_version @@ -1353,15 +1360,15 @@ def virtual_machine_scale_set_vm_run_commands(self): * 2020-06-01: :class:`VirtualMachineScaleSetVMRunCommandsOperations` * 2021-07-01: :class:`VirtualMachineScaleSetVMRunCommandsOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetVMRunCommandsOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetVMRunCommandsOperations` """ api_version = self._get_api_version('virtual_machine_scale_set_vm_run_commands') if api_version == '2020-06-01': from .v2020_06_01.operations import VirtualMachineScaleSetVMRunCommandsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineScaleSetVMRunCommandsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineScaleSetVMRunCommandsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineScaleSetVMRunCommandsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_set_vm_run_commands'".format(api_version)) self._config.api_version = api_version @@ -1378,7 +1385,7 @@ def virtual_machine_scale_set_vms(self): * 2019-12-01: :class:`VirtualMachineScaleSetVMsOperations` * 2020-06-01: :class:`VirtualMachineScaleSetVMsOperations` * 2021-07-01: :class:`VirtualMachineScaleSetVMsOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetVMsOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetVMsOperations` """ api_version = self._get_api_version('virtual_machine_scale_set_vms') if api_version == '2016-03-30': @@ -1395,8 +1402,8 @@ def virtual_machine_scale_set_vms(self): from .v2020_06_01.operations import VirtualMachineScaleSetVMsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineScaleSetVMsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineScaleSetVMsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineScaleSetVMsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_set_vms'".format(api_version)) self._config.api_version = api_version @@ -1413,7 +1420,7 @@ def virtual_machine_scale_sets(self): * 2019-12-01: :class:`VirtualMachineScaleSetsOperations` * 2020-06-01: :class:`VirtualMachineScaleSetsOperations` * 2021-07-01: :class:`VirtualMachineScaleSetsOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetsOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetsOperations` """ api_version = self._get_api_version('virtual_machine_scale_sets') if api_version == '2016-03-30': @@ -1430,8 +1437,8 @@ def virtual_machine_scale_sets(self): from .v2020_06_01.operations import VirtualMachineScaleSetsOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineScaleSetsOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineScaleSetsOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineScaleSetsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_sets'".format(api_version)) self._config.api_version = api_version @@ -1448,7 +1455,7 @@ def virtual_machine_sizes(self): * 2019-12-01: :class:`VirtualMachineSizesOperations` * 2020-06-01: :class:`VirtualMachineSizesOperations` * 2021-07-01: :class:`VirtualMachineSizesOperations` - * 2024-11-01: :class:`VirtualMachineSizesOperations` + * 2024-07-01: :class:`VirtualMachineSizesOperations` """ api_version = self._get_api_version('virtual_machine_sizes') if api_version == '2016-03-30': @@ -1465,8 +1472,8 @@ def virtual_machine_sizes(self): from .v2020_06_01.operations import VirtualMachineSizesOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachineSizesOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachineSizesOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachineSizesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_sizes'".format(api_version)) self._config.api_version = api_version @@ -1483,7 +1490,7 @@ def virtual_machines(self): * 2019-12-01: :class:`VirtualMachinesOperations` * 2020-06-01: :class:`VirtualMachinesOperations` * 2021-07-01: :class:`VirtualMachinesOperations` - * 2024-11-01: :class:`VirtualMachinesOperations` + * 2024-07-01: :class:`VirtualMachinesOperations` """ api_version = self._get_api_version('virtual_machines') if api_version == '2016-03-30': @@ -1500,8 +1507,8 @@ def virtual_machines(self): from .v2020_06_01.operations import VirtualMachinesOperations as OperationClass elif api_version == '2021-07-01': from .v2021_07_01.operations import VirtualMachinesOperations as OperationClass - elif api_version == '2024-11-01': - from .v2024_11_01.operations import VirtualMachinesOperations as OperationClass + elif api_version == '2024-07-01': + from .v2024_07_01.operations import VirtualMachinesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machines'".format(api_version)) self._config.api_version = api_version diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_utils/__init__.py new file mode 100644 index 000000000000..593333085322 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_utils/__init__.py @@ -0,0 +1,10 @@ +# 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. +# -------------------------------------------------------------------------- diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_utils/serialization.py new file mode 100644 index 000000000000..05bcd7d403ae --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_utils/serialization.py @@ -0,0 +1,2025 @@ +# coding=utf-8 + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_version.py index 73c4c36bd53b..ce330953651e 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_version.py @@ -5,4 +5,4 @@ # license information. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/aio/_compute_management_client.py index 159a9da0468d..d7fe13c8989f 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/aio/_compute_management_client.py @@ -9,16 +9,18 @@ # regenerated. # -------------------------------------------------------------------------- -from typing import Any, Optional, TYPE_CHECKING +from typing import Any, Optional, TYPE_CHECKING, cast from typing_extensions import Self from azure.core.pipeline import policies +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 azure.profiles import KnownProfiles, ProfileDefinition from azure.profiles.multiapiclient import MultiApiClientMixin -from .._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration if TYPE_CHECKING: @@ -27,7 +29,7 @@ class _SDKClient(object): def __init__(self, *args, **kwargs): - """This is a fake class to support current implemetation of MultiApiClientMixin." + """This is a fake class to support current implementation of MultiApiClientMixin." Will be removed in final version of multiapi azure-core based client """ pass @@ -61,14 +63,14 @@ class ComputeManagementClient(MultiApiClientMixin, _SDKClient): LATEST_PROFILE = ProfileDefinition({ _PROFILE_TAG: { None: DEFAULT_API_VERSION, - 'availability_sets': '2024-11-01', - 'capacity_reservation_groups': '2024-11-01', - 'capacity_reservations': '2024-11-01', + 'availability_sets': '2024-07-01', + 'capacity_reservation_groups': '2024-07-01', + 'capacity_reservations': '2024-07-01', 'community_galleries': '2023-07-03', 'community_gallery_image_versions': '2023-07-03', 'community_gallery_images': '2023-07-03', - 'dedicated_host_groups': '2024-11-01', - 'dedicated_hosts': '2024-11-01', + 'dedicated_host_groups': '2024-07-01', + 'dedicated_hosts': '2024-07-01', 'disk_accesses': '2024-03-02', 'disk_encryption_sets': '2024-03-02', 'disk_restore_point': '2024-03-02', @@ -79,32 +81,32 @@ class ComputeManagementClient(MultiApiClientMixin, _SDKClient): 'gallery_image_versions': '2023-07-03', 'gallery_images': '2023-07-03', 'gallery_sharing_profile': '2023-07-03', - 'images': '2024-11-01', - 'log_analytics': '2024-11-01', - 'operations': '2024-11-01', - 'proximity_placement_groups': '2024-11-01', + 'images': '2024-07-01', + 'log_analytics': '2024-07-01', + 'operations': '2024-07-01', + 'proximity_placement_groups': '2024-07-01', 'resource_skus': '2021-07-01', - 'restore_point_collections': '2024-11-01', - 'restore_points': '2024-11-01', + 'restore_point_collections': '2024-07-01', + 'restore_points': '2024-07-01', 'shared_galleries': '2023-07-03', 'shared_gallery_image_versions': '2023-07-03', 'shared_gallery_images': '2023-07-03', 'snapshots': '2024-03-02', - 'ssh_public_keys': '2024-11-01', - 'usage': '2024-11-01', - 'virtual_machine_extension_images': '2024-11-01', - 'virtual_machine_extensions': '2024-11-01', - 'virtual_machine_images': '2024-11-01', - 'virtual_machine_images_edge_zone': '2024-11-01', - 'virtual_machine_run_commands': '2024-11-01', - 'virtual_machine_scale_set_extensions': '2024-11-01', - 'virtual_machine_scale_set_rolling_upgrades': '2024-11-01', - 'virtual_machine_scale_set_vm_extensions': '2024-11-01', - 'virtual_machine_scale_set_vm_run_commands': '2024-11-01', - 'virtual_machine_scale_set_vms': '2024-11-01', - 'virtual_machine_scale_sets': '2024-11-01', - 'virtual_machine_sizes': '2024-11-01', - 'virtual_machines': '2024-11-01', + 'ssh_public_keys': '2024-07-01', + 'usage': '2024-07-01', + 'virtual_machine_extension_images': '2024-07-01', + 'virtual_machine_extensions': '2024-07-01', + 'virtual_machine_images': '2024-07-01', + 'virtual_machine_images_edge_zone': '2024-07-01', + 'virtual_machine_run_commands': '2024-07-01', + 'virtual_machine_scale_set_extensions': '2024-07-01', + 'virtual_machine_scale_set_rolling_upgrades': '2024-07-01', + 'virtual_machine_scale_set_vm_extensions': '2024-07-01', + 'virtual_machine_scale_set_vm_run_commands': '2024-07-01', + 'virtual_machine_scale_set_vms': '2024-07-01', + 'virtual_machine_scale_sets': '2024-07-01', + 'virtual_machine_sizes': '2024-07-01', + 'virtual_machines': '2024-07-01', }}, _PROFILE_TAG + " latest" ) @@ -114,13 +116,18 @@ def __init__( credential: "AsyncTokenCredential", subscription_id: str, api_version: Optional[str] = None, - base_url: str = "https://management.azure.com", + base_url: Optional[str] = None, profile: KnownProfiles = KnownProfiles.default, **kwargs: Any ) -> None: if api_version: kwargs.setdefault('api_version', api_version) - self._config = ComputeManagementClientConfiguration(credential, subscription_id, **kwargs) + _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 = ComputeManagementClientConfiguration(credential, subscription_id, credential_scopes=credential_scopes, **kwargs) _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -139,7 +146,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=cast(str, base_url), policies=_policies, **kwargs) super(ComputeManagementClient, self).__init__( api_version=api_version, profile=profile @@ -171,7 +178,7 @@ def models(cls, api_version=DEFAULT_API_VERSION): * 2023-07-03: :mod:`v2023_07_03.models` * 2023-10-02: :mod:`v2023_10_02.models` * 2024-03-02: :mod:`v2024_03_02.models` - * 2024-11-01: :mod:`v2024_11_01.models` + * 2024-07-01: :mod:`v2024_07_01.models` * 2024-11-04: :mod:`v2024_11_04.models` """ if api_version == '2016-03-30': @@ -228,8 +235,8 @@ def models(cls, api_version=DEFAULT_API_VERSION): elif api_version == '2024-03-02': from ..v2024_03_02 import models return models - elif api_version == '2024-11-01': - from ..v2024_11_01 import models + elif api_version == '2024-07-01': + from ..v2024_07_01 import models return models elif api_version == '2024-11-04': from ..v2024_11_04 import models @@ -247,7 +254,7 @@ def availability_sets(self): * 2019-12-01: :class:`AvailabilitySetsOperations` * 2020-06-01: :class:`AvailabilitySetsOperations` * 2021-07-01: :class:`AvailabilitySetsOperations` - * 2024-11-01: :class:`AvailabilitySetsOperations` + * 2024-07-01: :class:`AvailabilitySetsOperations` """ api_version = self._get_api_version('availability_sets') if api_version == '2016-03-30': @@ -264,8 +271,8 @@ def availability_sets(self): from ..v2020_06_01.aio.operations import AvailabilitySetsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import AvailabilitySetsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import AvailabilitySetsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import AvailabilitySetsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'availability_sets'".format(api_version)) self._config.api_version = api_version @@ -276,13 +283,13 @@ def capacity_reservation_groups(self): """Instance depends on the API version: * 2021-07-01: :class:`CapacityReservationGroupsOperations` - * 2024-11-01: :class:`CapacityReservationGroupsOperations` + * 2024-07-01: :class:`CapacityReservationGroupsOperations` """ api_version = self._get_api_version('capacity_reservation_groups') if api_version == '2021-07-01': from ..v2021_07_01.aio.operations import CapacityReservationGroupsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import CapacityReservationGroupsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import CapacityReservationGroupsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'capacity_reservation_groups'".format(api_version)) self._config.api_version = api_version @@ -293,13 +300,13 @@ def capacity_reservations(self): """Instance depends on the API version: * 2021-07-01: :class:`CapacityReservationsOperations` - * 2024-11-01: :class:`CapacityReservationsOperations` + * 2024-07-01: :class:`CapacityReservationsOperations` """ api_version = self._get_api_version('capacity_reservations') if api_version == '2021-07-01': from ..v2021_07_01.aio.operations import CapacityReservationsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import CapacityReservationsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import CapacityReservationsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'capacity_reservations'".format(api_version)) self._config.api_version = api_version @@ -458,7 +465,7 @@ def dedicated_host_groups(self): * 2019-12-01: :class:`DedicatedHostGroupsOperations` * 2020-06-01: :class:`DedicatedHostGroupsOperations` * 2021-07-01: :class:`DedicatedHostGroupsOperations` - * 2024-11-01: :class:`DedicatedHostGroupsOperations` + * 2024-07-01: :class:`DedicatedHostGroupsOperations` """ api_version = self._get_api_version('dedicated_host_groups') if api_version == '2019-07-01': @@ -469,8 +476,8 @@ def dedicated_host_groups(self): from ..v2020_06_01.aio.operations import DedicatedHostGroupsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import DedicatedHostGroupsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import DedicatedHostGroupsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import DedicatedHostGroupsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'dedicated_host_groups'".format(api_version)) self._config.api_version = api_version @@ -484,7 +491,7 @@ def dedicated_hosts(self): * 2019-12-01: :class:`DedicatedHostsOperations` * 2020-06-01: :class:`DedicatedHostsOperations` * 2021-07-01: :class:`DedicatedHostsOperations` - * 2024-11-01: :class:`DedicatedHostsOperations` + * 2024-07-01: :class:`DedicatedHostsOperations` """ api_version = self._get_api_version('dedicated_hosts') if api_version == '2019-07-01': @@ -495,8 +502,8 @@ def dedicated_hosts(self): from ..v2020_06_01.aio.operations import DedicatedHostsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import DedicatedHostsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import DedicatedHostsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import DedicatedHostsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'dedicated_hosts'".format(api_version)) self._config.api_version = api_version @@ -790,7 +797,7 @@ def images(self): * 2019-12-01: :class:`ImagesOperations` * 2020-06-01: :class:`ImagesOperations` * 2021-07-01: :class:`ImagesOperations` - * 2024-11-01: :class:`ImagesOperations` + * 2024-07-01: :class:`ImagesOperations` """ api_version = self._get_api_version('images') if api_version == '2017-03-30': @@ -805,8 +812,8 @@ def images(self): from ..v2020_06_01.aio.operations import ImagesOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import ImagesOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import ImagesOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import ImagesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'images'".format(api_version)) self._config.api_version = api_version @@ -821,7 +828,7 @@ def log_analytics(self): * 2019-12-01: :class:`LogAnalyticsOperations` * 2020-06-01: :class:`LogAnalyticsOperations` * 2021-07-01: :class:`LogAnalyticsOperations` - * 2024-11-01: :class:`LogAnalyticsOperations` + * 2024-07-01: :class:`LogAnalyticsOperations` """ api_version = self._get_api_version('log_analytics') if api_version == '2017-12-01': @@ -834,8 +841,8 @@ def log_analytics(self): from ..v2020_06_01.aio.operations import LogAnalyticsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import LogAnalyticsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import LogAnalyticsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import LogAnalyticsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'log_analytics'".format(api_version)) self._config.api_version = api_version @@ -850,7 +857,7 @@ def operations(self): * 2019-12-01: :class:`Operations` * 2020-06-01: :class:`Operations` * 2021-07-01: :class:`Operations` - * 2024-11-01: :class:`Operations` + * 2024-07-01: :class:`Operations` """ api_version = self._get_api_version('operations') if api_version == '2017-12-01': @@ -863,8 +870,8 @@ def operations(self): from ..v2020_06_01.aio.operations import Operations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import Operations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import Operations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import Operations as OperationClass else: raise ValueError("API version {} does not have operation group 'operations'".format(api_version)) self._config.api_version = api_version @@ -878,7 +885,7 @@ def proximity_placement_groups(self): * 2019-12-01: :class:`ProximityPlacementGroupsOperations` * 2020-06-01: :class:`ProximityPlacementGroupsOperations` * 2021-07-01: :class:`ProximityPlacementGroupsOperations` - * 2024-11-01: :class:`ProximityPlacementGroupsOperations` + * 2024-07-01: :class:`ProximityPlacementGroupsOperations` """ api_version = self._get_api_version('proximity_placement_groups') if api_version == '2019-07-01': @@ -889,8 +896,8 @@ def proximity_placement_groups(self): from ..v2020_06_01.aio.operations import ProximityPlacementGroupsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import ProximityPlacementGroupsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import ProximityPlacementGroupsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import ProximityPlacementGroupsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'proximity_placement_groups'".format(api_version)) self._config.api_version = api_version @@ -924,13 +931,13 @@ def restore_point_collections(self): """Instance depends on the API version: * 2021-07-01: :class:`RestorePointCollectionsOperations` - * 2024-11-01: :class:`RestorePointCollectionsOperations` + * 2024-07-01: :class:`RestorePointCollectionsOperations` """ api_version = self._get_api_version('restore_point_collections') if api_version == '2021-07-01': from ..v2021_07_01.aio.operations import RestorePointCollectionsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import RestorePointCollectionsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import RestorePointCollectionsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'restore_point_collections'".format(api_version)) self._config.api_version = api_version @@ -941,13 +948,13 @@ def restore_points(self): """Instance depends on the API version: * 2021-07-01: :class:`RestorePointsOperations` - * 2024-11-01: :class:`RestorePointsOperations` + * 2024-07-01: :class:`RestorePointsOperations` """ api_version = self._get_api_version('restore_points') if api_version == '2021-07-01': from ..v2021_07_01.aio.operations import RestorePointsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import RestorePointsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import RestorePointsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'restore_points'".format(api_version)) self._config.api_version = api_version @@ -1052,7 +1059,7 @@ def ssh_public_keys(self): * 2019-12-01: :class:`SshPublicKeysOperations` * 2020-06-01: :class:`SshPublicKeysOperations` * 2021-07-01: :class:`SshPublicKeysOperations` - * 2024-11-01: :class:`SshPublicKeysOperations` + * 2024-07-01: :class:`SshPublicKeysOperations` """ api_version = self._get_api_version('ssh_public_keys') if api_version == '2019-12-01': @@ -1061,8 +1068,8 @@ def ssh_public_keys(self): from ..v2020_06_01.aio.operations import SshPublicKeysOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import SshPublicKeysOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import SshPublicKeysOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import SshPublicKeysOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'ssh_public_keys'".format(api_version)) self._config.api_version = api_version @@ -1079,7 +1086,7 @@ def usage(self): * 2019-12-01: :class:`UsageOperations` * 2020-06-01: :class:`UsageOperations` * 2021-07-01: :class:`UsageOperations` - * 2024-11-01: :class:`UsageOperations` + * 2024-07-01: :class:`UsageOperations` """ api_version = self._get_api_version('usage') if api_version == '2016-03-30': @@ -1096,8 +1103,8 @@ def usage(self): from ..v2020_06_01.aio.operations import UsageOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import UsageOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import UsageOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import UsageOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'usage'".format(api_version)) self._config.api_version = api_version @@ -1114,7 +1121,7 @@ def virtual_machine_extension_images(self): * 2019-12-01: :class:`VirtualMachineExtensionImagesOperations` * 2020-06-01: :class:`VirtualMachineExtensionImagesOperations` * 2021-07-01: :class:`VirtualMachineExtensionImagesOperations` - * 2024-11-01: :class:`VirtualMachineExtensionImagesOperations` + * 2024-07-01: :class:`VirtualMachineExtensionImagesOperations` """ api_version = self._get_api_version('virtual_machine_extension_images') if api_version == '2016-03-30': @@ -1131,8 +1138,8 @@ def virtual_machine_extension_images(self): from ..v2020_06_01.aio.operations import VirtualMachineExtensionImagesOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineExtensionImagesOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineExtensionImagesOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineExtensionImagesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_extension_images'".format(api_version)) self._config.api_version = api_version @@ -1149,7 +1156,7 @@ def virtual_machine_extensions(self): * 2019-12-01: :class:`VirtualMachineExtensionsOperations` * 2020-06-01: :class:`VirtualMachineExtensionsOperations` * 2021-07-01: :class:`VirtualMachineExtensionsOperations` - * 2024-11-01: :class:`VirtualMachineExtensionsOperations` + * 2024-07-01: :class:`VirtualMachineExtensionsOperations` """ api_version = self._get_api_version('virtual_machine_extensions') if api_version == '2016-03-30': @@ -1166,8 +1173,8 @@ def virtual_machine_extensions(self): from ..v2020_06_01.aio.operations import VirtualMachineExtensionsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineExtensionsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineExtensionsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineExtensionsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_extensions'".format(api_version)) self._config.api_version = api_version @@ -1184,7 +1191,7 @@ def virtual_machine_images(self): * 2019-12-01: :class:`VirtualMachineImagesOperations` * 2020-06-01: :class:`VirtualMachineImagesOperations` * 2021-07-01: :class:`VirtualMachineImagesOperations` - * 2024-11-01: :class:`VirtualMachineImagesOperations` + * 2024-07-01: :class:`VirtualMachineImagesOperations` """ api_version = self._get_api_version('virtual_machine_images') if api_version == '2016-03-30': @@ -1201,8 +1208,8 @@ def virtual_machine_images(self): from ..v2020_06_01.aio.operations import VirtualMachineImagesOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineImagesOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineImagesOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineImagesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_images'".format(api_version)) self._config.api_version = api_version @@ -1213,13 +1220,13 @@ def virtual_machine_images_edge_zone(self): """Instance depends on the API version: * 2021-07-01: :class:`VirtualMachineImagesEdgeZoneOperations` - * 2024-11-01: :class:`VirtualMachineImagesEdgeZoneOperations` + * 2024-07-01: :class:`VirtualMachineImagesEdgeZoneOperations` """ api_version = self._get_api_version('virtual_machine_images_edge_zone') if api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineImagesEdgeZoneOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineImagesEdgeZoneOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineImagesEdgeZoneOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_images_edge_zone'".format(api_version)) self._config.api_version = api_version @@ -1235,7 +1242,7 @@ def virtual_machine_run_commands(self): * 2019-12-01: :class:`VirtualMachineRunCommandsOperations` * 2020-06-01: :class:`VirtualMachineRunCommandsOperations` * 2021-07-01: :class:`VirtualMachineRunCommandsOperations` - * 2024-11-01: :class:`VirtualMachineRunCommandsOperations` + * 2024-07-01: :class:`VirtualMachineRunCommandsOperations` """ api_version = self._get_api_version('virtual_machine_run_commands') if api_version == '2017-03-30': @@ -1250,8 +1257,8 @@ def virtual_machine_run_commands(self): from ..v2020_06_01.aio.operations import VirtualMachineRunCommandsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineRunCommandsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineRunCommandsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineRunCommandsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_run_commands'".format(api_version)) self._config.api_version = api_version @@ -1267,7 +1274,7 @@ def virtual_machine_scale_set_extensions(self): * 2019-12-01: :class:`VirtualMachineScaleSetExtensionsOperations` * 2020-06-01: :class:`VirtualMachineScaleSetExtensionsOperations` * 2021-07-01: :class:`VirtualMachineScaleSetExtensionsOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetExtensionsOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetExtensionsOperations` """ api_version = self._get_api_version('virtual_machine_scale_set_extensions') if api_version == '2017-03-30': @@ -1282,8 +1289,8 @@ def virtual_machine_scale_set_extensions(self): from ..v2020_06_01.aio.operations import VirtualMachineScaleSetExtensionsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineScaleSetExtensionsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineScaleSetExtensionsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineScaleSetExtensionsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_set_extensions'".format(api_version)) self._config.api_version = api_version @@ -1299,7 +1306,7 @@ def virtual_machine_scale_set_rolling_upgrades(self): * 2019-12-01: :class:`VirtualMachineScaleSetRollingUpgradesOperations` * 2020-06-01: :class:`VirtualMachineScaleSetRollingUpgradesOperations` * 2021-07-01: :class:`VirtualMachineScaleSetRollingUpgradesOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetRollingUpgradesOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetRollingUpgradesOperations` """ api_version = self._get_api_version('virtual_machine_scale_set_rolling_upgrades') if api_version == '2017-03-30': @@ -1314,8 +1321,8 @@ def virtual_machine_scale_set_rolling_upgrades(self): from ..v2020_06_01.aio.operations import VirtualMachineScaleSetRollingUpgradesOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineScaleSetRollingUpgradesOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineScaleSetRollingUpgradesOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineScaleSetRollingUpgradesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_set_rolling_upgrades'".format(api_version)) self._config.api_version = api_version @@ -1329,7 +1336,7 @@ def virtual_machine_scale_set_vm_extensions(self): * 2019-12-01: :class:`VirtualMachineScaleSetVMExtensionsOperations` * 2020-06-01: :class:`VirtualMachineScaleSetVMExtensionsOperations` * 2021-07-01: :class:`VirtualMachineScaleSetVMExtensionsOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetVMExtensionsOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetVMExtensionsOperations` """ api_version = self._get_api_version('virtual_machine_scale_set_vm_extensions') if api_version == '2019-07-01': @@ -1340,8 +1347,8 @@ def virtual_machine_scale_set_vm_extensions(self): from ..v2020_06_01.aio.operations import VirtualMachineScaleSetVMExtensionsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineScaleSetVMExtensionsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineScaleSetVMExtensionsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineScaleSetVMExtensionsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_set_vm_extensions'".format(api_version)) self._config.api_version = api_version @@ -1353,15 +1360,15 @@ def virtual_machine_scale_set_vm_run_commands(self): * 2020-06-01: :class:`VirtualMachineScaleSetVMRunCommandsOperations` * 2021-07-01: :class:`VirtualMachineScaleSetVMRunCommandsOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetVMRunCommandsOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetVMRunCommandsOperations` """ api_version = self._get_api_version('virtual_machine_scale_set_vm_run_commands') if api_version == '2020-06-01': from ..v2020_06_01.aio.operations import VirtualMachineScaleSetVMRunCommandsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineScaleSetVMRunCommandsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineScaleSetVMRunCommandsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineScaleSetVMRunCommandsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_set_vm_run_commands'".format(api_version)) self._config.api_version = api_version @@ -1378,7 +1385,7 @@ def virtual_machine_scale_set_vms(self): * 2019-12-01: :class:`VirtualMachineScaleSetVMsOperations` * 2020-06-01: :class:`VirtualMachineScaleSetVMsOperations` * 2021-07-01: :class:`VirtualMachineScaleSetVMsOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetVMsOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetVMsOperations` """ api_version = self._get_api_version('virtual_machine_scale_set_vms') if api_version == '2016-03-30': @@ -1395,8 +1402,8 @@ def virtual_machine_scale_set_vms(self): from ..v2020_06_01.aio.operations import VirtualMachineScaleSetVMsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineScaleSetVMsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineScaleSetVMsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineScaleSetVMsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_set_vms'".format(api_version)) self._config.api_version = api_version @@ -1413,7 +1420,7 @@ def virtual_machine_scale_sets(self): * 2019-12-01: :class:`VirtualMachineScaleSetsOperations` * 2020-06-01: :class:`VirtualMachineScaleSetsOperations` * 2021-07-01: :class:`VirtualMachineScaleSetsOperations` - * 2024-11-01: :class:`VirtualMachineScaleSetsOperations` + * 2024-07-01: :class:`VirtualMachineScaleSetsOperations` """ api_version = self._get_api_version('virtual_machine_scale_sets') if api_version == '2016-03-30': @@ -1430,8 +1437,8 @@ def virtual_machine_scale_sets(self): from ..v2020_06_01.aio.operations import VirtualMachineScaleSetsOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineScaleSetsOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineScaleSetsOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineScaleSetsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_scale_sets'".format(api_version)) self._config.api_version = api_version @@ -1448,7 +1455,7 @@ def virtual_machine_sizes(self): * 2019-12-01: :class:`VirtualMachineSizesOperations` * 2020-06-01: :class:`VirtualMachineSizesOperations` * 2021-07-01: :class:`VirtualMachineSizesOperations` - * 2024-11-01: :class:`VirtualMachineSizesOperations` + * 2024-07-01: :class:`VirtualMachineSizesOperations` """ api_version = self._get_api_version('virtual_machine_sizes') if api_version == '2016-03-30': @@ -1465,8 +1472,8 @@ def virtual_machine_sizes(self): from ..v2020_06_01.aio.operations import VirtualMachineSizesOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachineSizesOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachineSizesOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachineSizesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machine_sizes'".format(api_version)) self._config.api_version = api_version @@ -1483,7 +1490,7 @@ def virtual_machines(self): * 2019-12-01: :class:`VirtualMachinesOperations` * 2020-06-01: :class:`VirtualMachinesOperations` * 2021-07-01: :class:`VirtualMachinesOperations` - * 2024-11-01: :class:`VirtualMachinesOperations` + * 2024-07-01: :class:`VirtualMachinesOperations` """ api_version = self._get_api_version('virtual_machines') if api_version == '2016-03-30': @@ -1500,8 +1507,8 @@ def virtual_machines(self): from ..v2020_06_01.aio.operations import VirtualMachinesOperations as OperationClass elif api_version == '2021-07-01': from ..v2021_07_01.aio.operations import VirtualMachinesOperations as OperationClass - elif api_version == '2024-11-01': - from ..v2024_11_01.aio.operations import VirtualMachinesOperations as OperationClass + elif api_version == '2024-07-01': + from ..v2024_07_01.aio.operations import VirtualMachinesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'virtual_machines'".format(api_version)) self._config.api_version = api_version diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/models.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/models.py index 33e8c788683d..c06b98c58a13 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/models.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/models.py @@ -7,5 +7,5 @@ from .v2021_07_01.models import * from .v2023_07_03.models import * from .v2024_03_02.models import * -from .v2024_11_01.models import * +from .v2024_07_01.models import * from .v2024_11_04.models import * diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_compute_management_client.py index ac44ad6f8b99..b38aa7a3fcd0 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( AvailabilitySetsOperations, UsageOperations, @@ -67,7 +69,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2016-03-30". Note that overriding this default value may result in unsupported behavior. @@ -77,15 +79,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -104,7 +108,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_metadata.json index 4fdf9cae80bb..737cec47afbe 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_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/compute/azure-mgmt-compute/azure/mgmt/compute/_serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_utils/serialization.py similarity index 94% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_serialization.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_utils/serialization.py index a94487cbf17a..f5187701d7be 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_serialization.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_utils/serialization.py @@ -1,27 +1,10 @@ +# 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. # -------------------------------------------------------------------------- # pyright: reportUnnecessaryTypeIgnoreComment=false @@ -47,9 +30,7 @@ IO, Mapping, Callable, - TypeVar, MutableMapping, - Type, List, ) @@ -60,13 +41,13 @@ import xml.etree.ElementTree as ET import isodate # type: ignore +from typing_extensions import Self from azure.core.exceptions import DeserializationError, SerializationError from azure.core.serialization import NULL as CoreNull _BOM = codecs.BOM_UTF8.decode(encoding="utf-8") -ModelType = TypeVar("ModelType", bound="Model") JSON = MutableMapping[str, Any] @@ -184,73 +165,7 @@ def deserialize_from_http_generics(cls, body_bytes: Optional[Union[AnyStr, IO]], 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. - - :param datetime.datetime dt: The datetime - :returns: The offset - :rtype: datetime.timedelta - """ - return datetime.timedelta(0) - - def tzname(self, dt): - """Timestamp representation. - - :param datetime.datetime dt: The datetime - :returns: The timestamp representation - :rtype: str - """ - return "Z" - - def dst(self, dt): - """No daylight saving for UTC. - - :param datetime.datetime dt: The datetime - :returns: The daylight saving time - :rtype: datetime.timedelta - """ - return datetime.timedelta(hours=1) - - -try: - from datetime import timezone as _FixedOffset # type: ignore -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) -> None: - 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 -except ImportError: - TZ_UTC = UTC() # type: ignore +TZ_UTC = datetime.timezone.utc _FLATTEN = re.compile(r"(? ModelType: + 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 - :rtype: ModelType + :raises DeserializationError: if something went wrong + :rtype: Self """ deserializer = Deserializer(cls._infer_class_models()) return deserializer(cls.__name__, data, content_type=content_type) # type: ignore @classmethod def from_dict( - cls: Type[ModelType], + cls, data: Any, key_extractors: Optional[Callable[[str, Dict[str, Any], Any], Any]] = None, content_type: Optional[str] = None, - ) -> ModelType: + ) -> Self: """Parse a dict using given key extractor return a model. By default consider key @@ -478,8 +393,8 @@ def from_dict( :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 - :rtype: ModelType + :raises DeserializationError: if something went wrong + :rtype: Self """ deserializer = Deserializer(cls._infer_class_models()) deserializer.key_extractors = ( # type: ignore @@ -625,7 +540,7 @@ def _serialize( # pylint: disable=too-many-nested-blocks, too-many-branches, to :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) @@ -735,8 +650,8 @@ def body(self, data, data_type, **kwargs): :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 """ @@ -780,8 +695,8 @@ def url(self, name, data, data_type, **kwargs): :param str data_type: The type to be serialized from. :rtype: str :returns: The serialized URL path - :raises: TypeError if serialization fails. - :raises: ValueError if data is None + :raises TypeError: if serialization fails. + :raises ValueError: if data is None """ try: output = self.serialize_data(data, data_type, **kwargs) @@ -804,8 +719,8 @@ def query(self, name, data, data_type, **kwargs): :param object data: The data to be serialized. :param str data_type: The type to be serialized from. :rtype: str, list - :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 query parameter """ try: @@ -834,8 +749,8 @@ def header(self, name, data, data_type, **kwargs): :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: @@ -854,9 +769,9 @@ def serialize_data(self, data, data_type, **kwargs): :param object data: The data to be serialized. :param str data_type: The type to be serialized from. - :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 """ @@ -1191,7 +1106,7 @@ def serialize_rfc(attr, **kwargs): # pylint: disable=unused-argument :param Datetime attr: Object to be serialized. :rtype: str - :raises: TypeError if format invalid. + :raises TypeError: if format invalid. :return: serialized rfc """ try: @@ -1217,7 +1132,7 @@ def serialize_iso(attr, **kwargs): # pylint: disable=unused-argument :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): @@ -1250,7 +1165,7 @@ def serialize_unix(attr, **kwargs): # pylint: disable=unused-argument :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): @@ -1428,7 +1343,7 @@ def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument # 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( # pylint: disable=line-too-long + "Tried to deserialize an array not wrapped, and found several nodes '{}'. Maybe you should declare this array as wrapped?".format( xml_name ) ) @@ -1487,7 +1402,7 @@ 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 """ @@ -1501,7 +1416,7 @@ def _deserialize(self, target_obj, data): # pylint: disable=inconsistent-return :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 """ @@ -1716,7 +1631,7 @@ def deserialize_data(self, data, data_type): # pylint: disable=too-many-return- :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 """ @@ -1798,7 +1713,7 @@ def deserialize_object(self, attr, **kwargs): # pylint: disable=too-many-return :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 @@ -1844,7 +1759,7 @@ def deserialize_basic(self, attr, data_type): # pylint: disable=too-many-return :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 @@ -1935,7 +1850,7 @@ def deserialize_bytearray(attr): :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 @@ -1948,7 +1863,7 @@ def deserialize_base64(attr): :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 @@ -1963,7 +1878,7 @@ def deserialize_decimal(attr): :param str attr: response string to be deserialized. :return: Deserialized decimal - :raises: DeserializationError if string format invalid. + :raises DeserializationError: if string format invalid. :rtype: decimal """ if isinstance(attr, ET.Element): @@ -1981,7 +1896,7 @@ def deserialize_long(attr): :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 @@ -1994,7 +1909,7 @@ def deserialize_duration(attr): :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 @@ -2012,7 +1927,7 @@ def deserialize_date(attr): :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 @@ -2028,7 +1943,7 @@ def deserialize_time(attr): :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 @@ -2043,14 +1958,14 @@ def deserialize_rfc(attr): :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) # 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) @@ -2066,7 +1981,7 @@ def deserialize_iso(attr): :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 @@ -2104,7 +2019,7 @@ def deserialize_unix(attr): :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) # type: ignore diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/aio/_compute_management_client.py index 5bc4ac9cd8b2..163be6650839 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( AvailabilitySetsOperations, @@ -68,7 +70,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2016-03-30". Note that overriding this default value may result in unsupported behavior. @@ -78,15 +80,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -105,7 +109,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/aio/operations/_operations.py index 1a2f99696cf2..1aa954ad5dcf 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/aio/operations/_operations.py @@ -6,8 +6,8 @@ # 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 -import sys from typing import ( Any, AsyncIterable, @@ -25,6 +25,7 @@ ) import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -46,6 +47,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_availability_sets_create_or_update_request, build_availability_sets_delete_request, @@ -105,11 +107,8 @@ build_virtual_machines_restart_request, build_virtual_machines_start_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -128,10 +127,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -627,10 +626,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -842,10 +841,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1467,10 +1466,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -2958,10 +2957,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3291,10 +3290,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -3390,10 +3389,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -3489,10 +3488,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -5497,10 +5496,10 @@ class VirtualMachineScaleSetVMsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _reimage_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/models/_compute_management_client_enums.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/models/_compute_management_client_enums.py index 24b5b49944a3..315c9749872d 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/models/_compute_management_client_enums.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/models/_compute_management_client_enums.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/models/_models_py3.py index 8a99b716d5d2..f82bbd30f565 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,20 +7,15 @@ # 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, Literal, 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 +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] class AdditionalUnattendContent(_serialization.Model): @@ -234,9 +229,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -324,7 +319,7 @@ def __init__( self.platform_update_domain_count = platform_update_domain_count self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class AvailabilitySetListResult(_serialization.Model): @@ -418,8 +413,8 @@ class BootDiagnosticsInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None class ComputeLongRunningOperationProperties(_serialization.Model): @@ -571,7 +566,7 @@ class DataDiskImage(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.lun = None + self.lun: Optional[int] = None class DiagnosticsProfile(_serialization.Model): @@ -679,7 +674,7 @@ class HardwareProfile(_serialization.Model): :ivar vm_size: Specifies the size of the virtual machine. For more information about virtual machine sizes, see `Sizes for virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
`\\ :code:`
` The available VM sizes depend on region and availability set. For a list of available sizes use these APIs: :code:`
`\\ :code:`
` `List all available virtual machine sizes in an availability set @@ -713,7 +708,7 @@ def __init__( """ :keyword vm_size: Specifies the size of the virtual machine. For more information about virtual machine sizes, see `Sizes for virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
`\\ :code:`
` The available VM sizes depend on region and availability set. For a list of available sizes use these APIs: :code:`
`\\ :code:`
` `List all available virtual machine sizes in an availability set @@ -1136,11 +1131,11 @@ class OperationStatusResponse(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.status = None - self.start_time = None - self.end_time = None - self.error = None + self.name: Optional[str] = None + self.status: Optional[str] = None + self.start_time: Optional[datetime.datetime] = None + self.end_time: Optional[datetime.datetime] = None + self.error: Optional["_models.ApiError"] = None class OSDisk(_serialization.Model): @@ -1300,7 +1295,7 @@ class OSProfile(_serialization.Model): **Max-length (Windows):** 15 characters :code:`
`\\ :code:`
` **Max-length (Linux):** 64 characters. :code:`
`\\ :code:`
` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :vartype computer_name: str :ivar admin_username: Specifies the name of the administrator account. :code:`
`\\ :code:`
` **Windows-only restriction:** Cannot end in "." :code:`
`\\ :code:`
` @@ -1312,10 +1307,10 @@ class OSProfile(_serialization.Model): :code:`
`\\ :code:`
` **Max-length (Windows):** 20 characters :code:`
`\\ :code:`
`\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -1328,16 +1323,16 @@ class OSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -1345,10 +1340,10 @@ class OSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2016_03_30.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machine. :vartype secrets: list[~azure.mgmt.compute.v2016_03_30.models.VaultSecretGroup] @@ -1382,7 +1377,7 @@ def __init__( **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :paramtype computer_name: str :keyword admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` **Windows-only restriction:** Cannot end in "." :code:`
    `\\ :code:`
    ` @@ -1394,10 +1389,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -1410,16 +1405,16 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -1427,10 +1422,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2016_03_30.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machine. @@ -1611,7 +1606,7 @@ class SshPublicKey(_serialization.Model): :ivar key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :vartype key_data: str """ @@ -1629,7 +1624,7 @@ def __init__(self, *, path: Optional[str] = None, key_data: Optional[str] = None :keyword key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :paramtype key_data: str """ super().__init__(**kwargs) @@ -1648,12 +1643,12 @@ class StorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2016_03_30.models.OSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2016_03_30.models.DataDisk] """ @@ -1680,12 +1675,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2016_03_30.models.OSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2016_03_30.models.DataDisk] """ super().__init__(**kwargs) @@ -1968,10 +1963,10 @@ class VirtualMachine(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :vartype availability_set: ~azure.mgmt.compute.v2016_03_30.models.SubResource @@ -1986,7 +1981,7 @@ class VirtualMachine(Resource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and @@ -2070,10 +2065,10 @@ def __init__( machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :paramtype availability_set: ~azure.mgmt.compute.v2016_03_30.models.SubResource @@ -2084,13 +2079,13 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ super().__init__(location=location, tags=tags, **kwargs) self.plan = plan - self.resources = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None self.identity = identity self.hardware_profile = hardware_profile self.storage_profile = storage_profile @@ -2098,10 +2093,10 @@ def __init__( self.network_profile = network_profile self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None class VirtualMachineAgentInstanceView(_serialization.Model): @@ -2339,7 +2334,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view @@ -2661,8 +2656,8 @@ def __init__(self, *, type: Optional[Literal["SystemAssigned"]] = None, **kwargs :paramtype type: str """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type @@ -3009,7 +3004,7 @@ def __init__( self.identity = identity self.upgrade_policy = upgrade_policy self.virtual_machine_profile = virtual_machine_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.over_provision = over_provision @@ -3095,7 +3090,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None class VirtualMachineScaleSetExtensionProfile(_serialization.Model): @@ -3156,8 +3151,8 @@ def __init__(self, *, type: Optional[Literal["SystemAssigned"]] = None, **kwargs :paramtype type: str """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type @@ -3193,8 +3188,8 @@ def __init__(self, *, statuses: Optional[List["_models.InstanceViewStatus"]] = N :paramtype statuses: list[~azure.mgmt.compute.v2016_03_30.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.virtual_machine = None - self.extensions = None + self.virtual_machine: Optional["_models.VirtualMachineScaleSetInstanceViewStatusesSummary"] = None + self.extensions: Optional[List["_models.VirtualMachineScaleSetVMExtensionsSummary"]] = None self.statuses = statuses @@ -3219,7 +3214,7 @@ class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.statuses_summary = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetIPConfiguration(SubResource): @@ -3602,10 +3597,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -3618,10 +3613,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: A base-64 encoded string of custom data. :vartype custom_data: str @@ -3669,10 +3664,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -3685,10 +3680,10 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: A base-64 encoded string of custom data. :paramtype custom_data: str @@ -3737,9 +3732,9 @@ class VirtualMachineScaleSetSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.sku = None - self.capacity = None + self.resource_type: Optional[str] = None + self.sku: Optional["_models.Sku"] = None + self.capacity: Optional["_models.VirtualMachineScaleSetSkuCapacity"] = None class VirtualMachineScaleSetSkuCapacity(_serialization.Model): @@ -3776,10 +3771,10 @@ class VirtualMachineScaleSetSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default_capacity = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default_capacity: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.VirtualMachineScaleSetSkuScaleType"]] = None class VirtualMachineScaleSetStorageProfile(_serialization.Model): @@ -3866,10 +3861,10 @@ class VirtualMachineScaleSetVM(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :vartype availability_set: ~azure.mgmt.compute.v2016_03_30.models.SubResource @@ -3882,7 +3877,7 @@ class VirtualMachineScaleSetVM(Resource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str """ @@ -3965,10 +3960,10 @@ def __init__( machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :paramtype availability_set: ~azure.mgmt.compute.v2016_03_30.models.SubResource @@ -3979,25 +3974,25 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ super().__init__(location=location, tags=tags, **kwargs) - self.instance_id = None - self.sku = None + self.instance_id: Optional[str] = None + self.sku: Optional["_models.Sku"] = None self.plan = plan - self.resources = None - self.latest_model_applied = None - self.vm_id = None - self.instance_view = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None + self.latest_model_applied: Optional[bool] = None + self.vm_id: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineScaleSetVMInstanceView"] = None self.hardware_profile = hardware_profile self.storage_profile = storage_profile self.os_profile = os_profile self.network_profile = network_profile self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.license_type = license_type @@ -4026,8 +4021,8 @@ class VirtualMachineScaleSetVMExtensionsSummary(_serialization.Model): # pylint def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.statuses_summary = None + self.name: Optional[str] = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetVMInstanceIDs(_serialization.Model): @@ -4358,8 +4353,8 @@ class VirtualMachineStatusCodeCount(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.count = None + self.code: Optional[str] = None + self.count: Optional[int] = None class WindowsConfiguration(_serialization.Model): diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/operations/_operations.py index 3158f348adfc..e06ad769dd28 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, List, Literal, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -58,7 +56,7 @@ def build_availability_sets_create_or_update_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("name", name, "str"), @@ -91,7 +89,7 @@ def build_availability_sets_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -122,7 +120,7 @@ def build_availability_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -179,7 +177,7 @@ def build_availability_sets_list_request(resource_group_name: str, subscription_ _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -209,7 +207,7 @@ def build_availability_sets_list_available_sizes_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -240,7 +238,7 @@ def build_virtual_machine_extension_images_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -273,7 +271,7 @@ def build_virtual_machine_extension_images_list_types_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -312,7 +310,7 @@ def build_virtual_machine_extension_images_list_versions_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -351,7 +349,7 @@ def build_virtual_machine_extensions_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -386,7 +384,7 @@ def build_virtual_machine_extensions_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -420,7 +418,7 @@ def build_virtual_machine_extensions_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -458,7 +456,7 @@ def build_virtual_machine_extensions_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -492,7 +490,7 @@ def build_virtual_machines_get_extensions_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -526,7 +524,7 @@ def build_virtual_machines_capture_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -560,7 +558,7 @@ def build_virtual_machines_create_or_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -593,7 +591,7 @@ def build_virtual_machines_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -629,7 +627,7 @@ def build_virtual_machines_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -662,7 +660,7 @@ def build_virtual_machines_deallocate_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -693,7 +691,7 @@ def build_virtual_machines_generalize_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -722,7 +720,7 @@ def build_virtual_machines_list_request(resource_group_name: str, subscription_i _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -776,7 +774,7 @@ def build_virtual_machines_list_available_sizes_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -807,7 +805,7 @@ def build_virtual_machines_power_off_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -838,7 +836,7 @@ def build_virtual_machines_restart_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -869,7 +867,7 @@ def build_virtual_machines_start_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -900,7 +898,7 @@ def build_virtual_machines_redeploy_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -931,7 +929,7 @@ def build_virtual_machine_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -974,7 +972,7 @@ def build_virtual_machine_images_list_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1013,7 +1011,7 @@ def build_virtual_machine_images_list_offers_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1043,7 +1041,7 @@ def build_virtual_machine_images_list_publishers_request( # pylint: disable=nam # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1073,7 +1071,7 @@ def build_virtual_machine_images_list_skus_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1102,7 +1100,7 @@ def build_usage_list_request(location: str, subscription_id: str, **kwargs: Any) # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1129,7 +1127,7 @@ def build_virtual_machine_sizes_list_request(location: str, subscription_id: str # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1160,7 +1158,7 @@ def build_virtual_machine_scale_sets_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("name", name, "str"), @@ -1193,7 +1191,7 @@ def build_virtual_machine_scale_sets_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1224,7 +1222,7 @@ def build_virtual_machine_scale_sets_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1256,7 +1254,7 @@ def build_virtual_machine_scale_sets_deallocate_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1290,7 +1288,7 @@ def build_virtual_machine_scale_sets_delete_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1323,7 +1321,7 @@ def build_virtual_machine_scale_sets_get_instance_view_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1354,7 +1352,7 @@ def build_virtual_machine_scale_sets_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1412,7 +1410,7 @@ def build_virtual_machine_scale_sets_list_skus_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1444,7 +1442,7 @@ def build_virtual_machine_scale_sets_power_off_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1478,7 +1476,7 @@ def build_virtual_machine_scale_sets_restart_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1512,7 +1510,7 @@ def build_virtual_machine_scale_sets_start_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1546,7 +1544,7 @@ def build_virtual_machine_scale_sets_update_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1579,7 +1577,7 @@ def build_virtual_machine_scale_sets_reimage_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1610,7 +1608,7 @@ def build_virtual_machine_scale_set_vms_reimage_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1642,7 +1640,7 @@ def build_virtual_machine_scale_set_vms_deallocate_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1674,7 +1672,7 @@ def build_virtual_machine_scale_set_vms_delete_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1706,7 +1704,7 @@ def build_virtual_machine_scale_set_vms_get_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1738,7 +1736,7 @@ def build_virtual_machine_scale_set_vms_get_instance_view_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1777,7 +1775,7 @@ def build_virtual_machine_scale_set_vms_list_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "virtualMachineScaleSetName": _SERIALIZER.url( @@ -1816,7 +1814,7 @@ def build_virtual_machine_scale_set_vms_power_off_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1848,7 +1846,7 @@ def build_virtual_machine_scale_set_vms_restart_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1880,7 +1878,7 @@ def build_virtual_machine_scale_set_vms_start_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1913,10 +1911,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -2409,10 +2407,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -2624,10 +2622,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3249,10 +3247,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4726,10 +4724,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5059,10 +5057,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5158,10 +5156,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5256,10 +5254,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -7251,10 +7249,10 @@ class VirtualMachineScaleSetVMsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _reimage_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_compute_management_client.py index 645c28ba3c18..01ab17f83a47 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( AvailabilitySetsOperations, DisksOperations, @@ -93,7 +95,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2017-03-30". Note that overriding this default value may result in unsupported behavior. @@ -103,15 +105,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -130,7 +134,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_metadata.json index 847c1cd1044a..a558c73591d9 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node
    is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/aio/_compute_management_client.py index 7b73d0fb2f16..178d8ed48f20 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( AvailabilitySetsOperations, @@ -94,7 +96,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2017-03-30". Note that overriding this default value may result in unsupported behavior. @@ -104,15 +106,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -131,7 +135,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/aio/operations/_operations.py index 256ed581749c..205333eb2db6 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/aio/operations/_operations.py @@ -6,8 +6,8 @@ # 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 -import sys from typing import ( Any, AsyncIterable, @@ -25,6 +25,7 @@ ) import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -46,6 +47,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_availability_sets_create_or_update_request, build_availability_sets_delete_request, @@ -144,11 +146,8 @@ build_virtual_machines_run_command_request, build_virtual_machines_start_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -167,10 +166,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -670,10 +669,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -885,10 +884,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1510,10 +1509,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3558,10 +3557,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3891,10 +3890,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -3990,10 +3989,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4089,10 +4088,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -4607,10 +4606,10 @@ class ResourceSkusOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4703,10 +4702,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -7198,10 +7197,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -7697,10 +7696,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _cancel_initial( @@ -8002,10 +8001,10 @@ class VirtualMachineScaleSetVMsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _reimage_initial( @@ -9066,10 +9065,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -10084,10 +10083,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -11122,10 +11121,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/models/_compute_management_client_enums.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/models/_compute_management_client_enums.py index 646a101a7f7d..239b67fad168 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/models/_compute_management_client_enums.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/models/_compute_management_client_enums.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/models/_models_py3.py index fbe4e16ff51c..7b303bf883ab 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,20 +7,15 @@ # 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, Literal, 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 +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] class AccessUri(_serialization.Model): @@ -43,7 +38,7 @@ class AccessUri(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.access_sas = None + self.access_sas: Optional[str] = None class AdditionalUnattendContent(_serialization.Model): @@ -257,9 +252,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -354,7 +349,7 @@ def __init__( self.platform_update_domain_count = platform_update_domain_count self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class AvailabilitySetListResult(_serialization.Model): @@ -448,8 +443,8 @@ class BootDiagnosticsInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None class ComputeLongRunningOperationProperties(_serialization.Model): @@ -675,7 +670,7 @@ class DataDiskImage(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.lun = None + self.lun: Optional[int] = None class DiagnosticsProfile(_serialization.Model): @@ -809,15 +804,15 @@ def __init__( :paramtype encryption_settings: ~azure.mgmt.compute.v2017_03_30.models.EncryptionSettings """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None + self.managed_by: Optional[str] = None self.sku = sku self.zones = zones - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.creation_data = creation_data self.disk_size_gb = disk_size_gb self.encryption_settings = encryption_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None class DiskEncryptionSettings(_serialization.Model): @@ -965,7 +960,7 @@ def __init__(self, *, name: Optional[Union[str, "_models.StorageAccountTypes"]] """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class ResourceUpdate(_serialization.Model): @@ -1137,7 +1132,7 @@ class HardwareProfile(_serialization.Model): :ivar vm_size: Specifies the size of the virtual machine. For more information about virtual machine sizes, see `Sizes for virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` The available VM sizes depend on region and availability set. For a list of available sizes use these APIs: :code:`
    `\\ :code:`
    ` `List all available virtual machine sizes in an availability set @@ -1178,7 +1173,7 @@ def __init__( """ :keyword vm_size: Specifies the size of the virtual machine. For more information about virtual machine sizes, see `Sizes for virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` The available VM sizes depend on region and availability set. For a list of available sizes use these APIs: :code:`
    `\\ :code:`
    ` `List all available virtual machine sizes in an availability set @@ -1280,7 +1275,7 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None class ImageDataDisk(_serialization.Model): @@ -1647,13 +1642,13 @@ class ImageStorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. Required. :vartype os_disk: ~azure.mgmt.compute.v2017_03_30.models.ImageOSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2017_03_30.models.ImageDataDisk] """ @@ -1677,13 +1672,13 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. Required. :paramtype os_disk: ~azure.mgmt.compute.v2017_03_30.models.ImageOSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2017_03_30.models.ImageDataDisk] """ super().__init__(**kwargs) @@ -2183,11 +2178,11 @@ class OperationStatusResponse(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.status = None - self.start_time = None - self.end_time = None - self.error = None + self.name: Optional[str] = None + self.status: Optional[str] = None + self.start_time: Optional[datetime.datetime] = None + self.end_time: Optional[datetime.datetime] = None + self.error: Optional["_models.ApiError"] = None class OSDisk(_serialization.Model): @@ -2352,7 +2347,7 @@ class OSProfile(_serialization.Model): **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :vartype computer_name: str :ivar admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` **Windows-only restriction:** Cannot end in "." :code:`
    `\\ :code:`
    ` @@ -2364,10 +2359,10 @@ class OSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -2380,16 +2375,16 @@ class OSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -2397,10 +2392,10 @@ class OSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2017_03_30.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machine. :vartype secrets: list[~azure.mgmt.compute.v2017_03_30.models.VaultSecretGroup] @@ -2434,7 +2429,7 @@ def __init__( **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :paramtype computer_name: str :keyword admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` **Windows-only restriction:** Cannot end in "." :code:`
    `\\ :code:`
    ` @@ -2446,10 +2441,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -2462,16 +2457,16 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -2479,10 +2474,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2017_03_30.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machine. @@ -2659,18 +2654,18 @@ class ResourceSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.name = None - self.tier = None - self.size = None - self.family = None - self.kind = None - self.capacity = None - self.locations = None - self.api_versions = None - self.costs = None - self.capabilities = None - self.restrictions = None + self.resource_type: Optional[str] = None + self.name: Optional[str] = None + self.tier: Optional[str] = None + self.size: Optional[str] = None + self.family: Optional[str] = None + self.kind: Optional[str] = None + self.capacity: Optional["_models.ResourceSkuCapacity"] = None + self.locations: Optional[List[str]] = None + self.api_versions: Optional[List[str]] = None + self.costs: Optional[List["_models.ResourceSkuCosts"]] = None + self.capabilities: Optional[List["_models.ResourceSkuCapabilities"]] = None + self.restrictions: Optional[List["_models.ResourceSkuRestrictions"]] = None class ResourceSkuCapabilities(_serialization.Model): @@ -2697,8 +2692,8 @@ class ResourceSkuCapabilities(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.value = None + self.name: Optional[str] = None + self.value: Optional[str] = None class ResourceSkuCapacity(_serialization.Model): @@ -2734,10 +2729,10 @@ class ResourceSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.ResourceSkuCapacityScaleType"]] = None class ResourceSkuCosts(_serialization.Model): @@ -2768,9 +2763,9 @@ class ResourceSkuCosts(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.meter_id = None - self.quantity = None - self.extended_unit = None + self.meter_id: Optional[str] = None + self.quantity: Optional[int] = None + self.extended_unit: Optional[str] = None class ResourceSkuRestrictions(_serialization.Model): @@ -2804,9 +2799,9 @@ class ResourceSkuRestrictions(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.type = None - self.values = None - self.reason_code = None + self.type: Optional[Literal["Location"]] = None + self.values: Optional[List[str]] = None + self.reason_code: Optional[Union[str, "_models.ResourceSkuRestrictionsReasonCode"]] = None class ResourceSkusResult(_serialization.Model): @@ -2952,10 +2947,10 @@ class RollingUpgradeProgressInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successful_instance_count = None - self.failed_instance_count = None - self.in_progress_instance_count = None - self.pending_instance_count = None + self.successful_instance_count: Optional[int] = None + self.failed_instance_count: Optional[int] = None + self.in_progress_instance_count: Optional[int] = None + self.pending_instance_count: Optional[int] = None class RollingUpgradeRunningStatus(_serialization.Model): @@ -2992,10 +2987,10 @@ class RollingUpgradeRunningStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.last_action = None - self.last_action_time = None + self.code: Optional[Union[str, "_models.RollingUpgradeStatusCode"]] = None + self.start_time: Optional[datetime.datetime] = None + self.last_action: Optional[Union[str, "_models.RollingUpgradeActionType"]] = None + self.last_action_time: Optional[datetime.datetime] = None class RollingUpgradeStatusInfo(Resource): @@ -3057,10 +3052,10 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(location=location, tags=tags, **kwargs) - self.policy = None - self.running_status = None - self.progress = None - self.error = None + self.policy: Optional["_models.RollingUpgradePolicy"] = None + self.running_status: Optional["_models.RollingUpgradeRunningStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None class RunCommandDocumentBase(_serialization.Model): @@ -3548,14 +3543,14 @@ def __init__( :paramtype encryption_settings: ~azure.mgmt.compute.v2017_03_30.models.EncryptionSettings """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None + self.managed_by: Optional[str] = None self.sku = sku - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.creation_data = creation_data self.disk_size_gb = disk_size_gb self.encryption_settings = encryption_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None class SnapshotList(_serialization.Model): @@ -3701,7 +3696,7 @@ class SshPublicKey(_serialization.Model): :ivar key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :vartype key_data: str """ @@ -3719,7 +3714,7 @@ def __init__(self, *, path: Optional[str] = None, key_data: Optional[str] = None :keyword key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :paramtype key_data: str """ super().__init__(**kwargs) @@ -3738,12 +3733,12 @@ class StorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2017_03_30.models.OSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2017_03_30.models.DataDisk] """ @@ -3770,12 +3765,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2017_03_30.models.OSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2017_03_30.models.DataDisk] """ super().__init__(**kwargs) @@ -3804,7 +3799,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class UpdateResource(_serialization.Model): @@ -4106,10 +4101,10 @@ class VirtualMachine(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :vartype availability_set: ~azure.mgmt.compute.v2017_03_30.models.SubResource @@ -4124,7 +4119,7 @@ class VirtualMachine(Resource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and @@ -4212,10 +4207,10 @@ def __init__( machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :paramtype availability_set: ~azure.mgmt.compute.v2017_03_30.models.SubResource @@ -4226,13 +4221,13 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ super().__init__(location=location, tags=tags, **kwargs) self.plan = plan - self.resources = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None self.identity = identity self.zones = zones self.hardware_profile = hardware_profile @@ -4241,10 +4236,10 @@ def __init__( self.network_profile = network_profile self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None class VirtualMachineAgentInstanceView(_serialization.Model): @@ -4482,7 +4477,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view @@ -4790,7 +4785,7 @@ class VirtualMachineHealthStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None + self.status: Optional["_models.InstanceViewStatus"] = None class VirtualMachineIdentity(_serialization.Model): @@ -4827,8 +4822,8 @@ def __init__(self, *, type: Optional[Literal["SystemAssigned"]] = None, **kwargs :paramtype type: str """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type @@ -5219,9 +5214,9 @@ def __init__( self.zones = zones self.upgrade_policy = upgrade_policy self.virtual_machine_profile = virtual_machine_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.overprovision = overprovision - self.unique_id = None + self.unique_id: Optional[str] = None self.single_placement_group = single_placement_group @@ -5405,7 +5400,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None class VirtualMachineScaleSetExtensionListResult(_serialization.Model): # pylint: disable=name-too-long @@ -5502,8 +5497,8 @@ def __init__(self, *, type: Optional[Literal["SystemAssigned"]] = None, **kwargs :paramtype type: str """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type @@ -5539,8 +5534,8 @@ def __init__(self, *, statuses: Optional[List["_models.InstanceViewStatus"]] = N :paramtype statuses: list[~azure.mgmt.compute.v2017_03_30.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.virtual_machine = None - self.extensions = None + self.virtual_machine: Optional["_models.VirtualMachineScaleSetInstanceViewStatusesSummary"] = None + self.extensions: Optional[List["_models.VirtualMachineScaleSetVMExtensionsSummary"]] = None self.statuses = statuses @@ -5565,7 +5560,7 @@ class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.statuses_summary = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetIPConfiguration(SubResource): @@ -5933,7 +5928,7 @@ class VirtualMachineScaleSetNetworkProfile(_serialization.Model): :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :vartype health_probe: ~azure.mgmt.compute.v2017_03_30.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: @@ -5958,7 +5953,7 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :paramtype health_probe: ~azure.mgmt.compute.v2017_03_30.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: @@ -6086,10 +6081,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -6102,16 +6097,16 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -6119,10 +6114,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2017_03_30.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. @@ -6165,10 +6160,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -6181,16 +6176,16 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -6198,10 +6193,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2017_03_30.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. @@ -6327,9 +6322,9 @@ class VirtualMachineScaleSetSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.sku = None - self.capacity = None + self.resource_type: Optional[str] = None + self.sku: Optional["_models.Sku"] = None + self.capacity: Optional["_models.VirtualMachineScaleSetSkuCapacity"] = None class VirtualMachineScaleSetSkuCapacity(_serialization.Model): @@ -6366,10 +6361,10 @@ class VirtualMachineScaleSetSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default_capacity = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default_capacity: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.VirtualMachineScaleSetSkuScaleType"]] = None class VirtualMachineScaleSetStorageProfile(_serialization.Model): @@ -6383,12 +6378,12 @@ class VirtualMachineScaleSetStorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2017_03_30.models.VirtualMachineScaleSetOSDisk :ivar data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2017_03_30.models.VirtualMachineScaleSetDataDisk] """ @@ -6416,12 +6411,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2017_03_30.models.VirtualMachineScaleSetOSDisk :keyword data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2017_03_30.models.VirtualMachineScaleSetDataDisk] """ @@ -7036,10 +7031,10 @@ class VirtualMachineScaleSetVM(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :vartype availability_set: ~azure.mgmt.compute.v2017_03_30.models.SubResource @@ -7052,7 +7047,7 @@ class VirtualMachineScaleSetVM(Resource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str """ @@ -7135,10 +7130,10 @@ def __init__( machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :paramtype availability_set: ~azure.mgmt.compute.v2017_03_30.models.SubResource @@ -7149,25 +7144,25 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ super().__init__(location=location, tags=tags, **kwargs) - self.instance_id = None - self.sku = None + self.instance_id: Optional[str] = None + self.sku: Optional["_models.Sku"] = None self.plan = plan - self.resources = None - self.latest_model_applied = None - self.vm_id = None - self.instance_view = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None + self.latest_model_applied: Optional[bool] = None + self.vm_id: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineScaleSetVMInstanceView"] = None self.hardware_profile = hardware_profile self.storage_profile = storage_profile self.os_profile = os_profile self.network_profile = network_profile self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.license_type = license_type @@ -7196,8 +7191,8 @@ class VirtualMachineScaleSetVMExtensionsSummary(_serialization.Model): # pylint def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.statuses_summary = None + self.name: Optional[str] = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetVMInstanceIDs(_serialization.Model): @@ -7345,7 +7340,7 @@ def __init__( self.vm_agent = vm_agent self.disks = disks self.extensions = extensions - self.vm_health = None + self.vm_health: Optional["_models.VirtualMachineHealthStatus"] = None self.boot_diagnostics = boot_diagnostics self.statuses = statuses self.placement_group_id = placement_group_id @@ -7414,7 +7409,7 @@ class VirtualMachineScaleSetVMProfile(_serialization.Model): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str """ @@ -7464,7 +7459,7 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ @@ -7585,8 +7580,8 @@ class VirtualMachineStatusCodeCount(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.count = None + self.code: Optional[str] = None + self.count: Optional[int] = None class WindowsConfiguration(_serialization.Model): diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/_operations.py index e3e5bf509f49..f6b8158497f5 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, List, Literal, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -58,7 +56,7 @@ def build_availability_sets_create_or_update_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -91,7 +89,7 @@ def build_availability_sets_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -122,7 +120,7 @@ def build_availability_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -179,7 +177,7 @@ def build_availability_sets_list_request(resource_group_name: str, subscription_ _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -209,7 +207,7 @@ def build_availability_sets_list_available_sizes_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -240,7 +238,7 @@ def build_virtual_machine_extension_images_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -273,7 +271,7 @@ def build_virtual_machine_extension_images_list_types_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -312,7 +310,7 @@ def build_virtual_machine_extension_images_list_versions_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -351,7 +349,7 @@ def build_virtual_machine_extensions_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -386,7 +384,7 @@ def build_virtual_machine_extensions_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -420,7 +418,7 @@ def build_virtual_machine_extensions_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -458,7 +456,7 @@ def build_virtual_machine_extensions_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -492,7 +490,7 @@ def build_virtual_machines_get_extensions_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -525,7 +523,7 @@ def build_virtual_machines_list_by_location_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -556,7 +554,7 @@ def build_virtual_machines_capture_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -590,7 +588,7 @@ def build_virtual_machines_create_or_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -623,7 +621,7 @@ def build_virtual_machines_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -659,7 +657,7 @@ def build_virtual_machines_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -692,7 +690,7 @@ def build_virtual_machines_instance_view_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -723,7 +721,7 @@ def build_virtual_machines_convert_to_managed_disks_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -754,7 +752,7 @@ def build_virtual_machines_deallocate_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -785,7 +783,7 @@ def build_virtual_machines_generalize_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -814,7 +812,7 @@ def build_virtual_machines_list_request(resource_group_name: str, subscription_i _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -868,7 +866,7 @@ def build_virtual_machines_list_available_sizes_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -899,7 +897,7 @@ def build_virtual_machines_power_off_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -930,7 +928,7 @@ def build_virtual_machines_restart_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -961,7 +959,7 @@ def build_virtual_machines_start_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -992,7 +990,7 @@ def build_virtual_machines_redeploy_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1023,7 +1021,7 @@ def build_virtual_machines_perform_maintenance_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1055,7 +1053,7 @@ def build_virtual_machines_run_command_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1088,7 +1086,7 @@ def build_virtual_machine_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1131,7 +1129,7 @@ def build_virtual_machine_images_list_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1170,7 +1168,7 @@ def build_virtual_machine_images_list_offers_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1200,7 +1198,7 @@ def build_virtual_machine_images_list_publishers_request( # pylint: disable=nam # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1230,7 +1228,7 @@ def build_virtual_machine_images_list_skus_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1259,7 +1257,7 @@ def build_usage_list_request(location: str, subscription_id: str, **kwargs: Any) # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1286,7 +1284,7 @@ def build_virtual_machine_sizes_list_request(location: str, subscription_id: str # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1317,7 +1315,7 @@ def build_images_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -1350,7 +1348,7 @@ def build_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -1381,7 +1379,7 @@ def build_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -1414,7 +1412,7 @@ def build_images_list_by_resource_group_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1493,7 +1491,7 @@ def build_virtual_machine_scale_sets_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1527,7 +1525,7 @@ def build_virtual_machine_scale_sets_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1560,7 +1558,7 @@ def build_virtual_machine_scale_sets_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1591,7 +1589,7 @@ def build_virtual_machine_scale_sets_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1623,7 +1621,7 @@ def build_virtual_machine_scale_sets_deallocate_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1657,7 +1655,7 @@ def build_virtual_machine_scale_sets_delete_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1690,7 +1688,7 @@ def build_virtual_machine_scale_sets_get_instance_view_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1721,7 +1719,7 @@ def build_virtual_machine_scale_sets_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1779,7 +1777,7 @@ def build_virtual_machine_scale_sets_list_skus_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1811,7 +1809,7 @@ def build_virtual_machine_scale_sets_power_off_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1845,7 +1843,7 @@ def build_virtual_machine_scale_sets_restart_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1879,7 +1877,7 @@ def build_virtual_machine_scale_sets_start_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1913,7 +1911,7 @@ def build_virtual_machine_scale_sets_update_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1947,7 +1945,7 @@ def build_virtual_machine_scale_sets_reimage_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1981,7 +1979,7 @@ def build_virtual_machine_scale_sets_reimage_all_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2015,7 +2013,7 @@ def build_virtual_machine_scale_set_extensions_create_or_update_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2049,7 +2047,7 @@ def build_virtual_machine_scale_set_extensions_delete_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2087,7 +2085,7 @@ def build_virtual_machine_scale_set_extensions_get_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2121,7 +2119,7 @@ def build_virtual_machine_scale_set_extensions_list_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2152,7 +2150,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_cancel_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2183,7 +2181,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_os_upgrade_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2214,7 +2212,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_get_latest_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2245,7 +2243,7 @@ def build_virtual_machine_scale_set_vms_reimage_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2277,7 +2275,7 @@ def build_virtual_machine_scale_set_vms_reimage_all_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2309,7 +2307,7 @@ def build_virtual_machine_scale_set_vms_deallocate_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2341,7 +2339,7 @@ def build_virtual_machine_scale_set_vms_delete_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2373,7 +2371,7 @@ def build_virtual_machine_scale_set_vms_get_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2405,7 +2403,7 @@ def build_virtual_machine_scale_set_vms_get_instance_view_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2444,7 +2442,7 @@ def build_virtual_machine_scale_set_vms_list_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "virtualMachineScaleSetName": _SERIALIZER.url( @@ -2483,7 +2481,7 @@ def build_virtual_machine_scale_set_vms_power_off_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2515,7 +2513,7 @@ def build_virtual_machine_scale_set_vms_restart_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2547,7 +2545,7 @@ def build_virtual_machine_scale_set_vms_start_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2580,7 +2578,7 @@ def build_disks_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2614,7 +2612,7 @@ def build_disks_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2647,7 +2645,7 @@ def build_disks_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2678,7 +2676,7 @@ def build_disks_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2709,7 +2707,7 @@ def build_disks_list_by_resource_group_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2764,7 +2762,7 @@ def build_disks_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2797,7 +2795,7 @@ def build_disks_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2829,7 +2827,7 @@ def build_snapshots_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2863,7 +2861,7 @@ def build_snapshots_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2896,7 +2894,7 @@ def build_snapshots_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2927,7 +2925,7 @@ def build_snapshots_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -2958,7 +2956,7 @@ def build_snapshots_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3013,7 +3011,7 @@ def build_snapshots_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3046,7 +3044,7 @@ def build_snapshots_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3076,7 +3074,7 @@ def build_virtual_machine_run_commands_list_request( # pylint: disable=name-too # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -3106,7 +3104,7 @@ def build_virtual_machine_run_commands_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "commandId": _SERIALIZER.url("command_id", command_id, "str"), @@ -3138,10 +3136,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -3638,10 +3636,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -3853,10 +3851,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -4478,10 +4476,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6503,10 +6501,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6836,10 +6834,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6935,10 +6933,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7033,10 +7031,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -7551,10 +7549,10 @@ class ResourceSkusOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7646,10 +7644,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -10129,10 +10127,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -10628,10 +10626,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _cancel_initial(self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any) -> Iterator[bytes]: @@ -10929,10 +10927,10 @@ class VirtualMachineScaleSetVMsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _reimage_initial( @@ -11987,10 +11985,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -12999,10 +12997,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -14021,10 +14019,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_compute_management_client.py index bb560db6ed03..71ebb25d01c8 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ResourceSkusOperations if TYPE_CHECKING: @@ -34,7 +36,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2017-09-01". Note that overriding this default value may result in unsupported behavior. @@ -42,15 +44,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -69,7 +73,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_metadata.json index c2892ce544ba..60feb47df5a2 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": false, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node
    is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/aio/_compute_management_client.py index 14074d8aa16a..05ac4e04584f 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ResourceSkusOperations @@ -34,7 +36,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2017-09-01". Note that overriding this default value may result in unsupported behavior. @@ -42,15 +44,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -69,7 +73,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/aio/operations/_operations.py index 4e92991dbd38..34b5bfa20462 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/aio/operations/_operations.py @@ -5,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, @@ -25,12 +26,10 @@ from azure.mgmt.core.exceptions import ARMErrorFormat from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import build_resource_skus_list_request +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -49,10 +48,10 @@ class ResourceSkusOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/models/_models_py3.py index 80780c97f346..6e4e9f6b9bf7 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/models/_models_py3.py @@ -8,7 +8,7 @@ from typing import Any, List, Optional, TYPE_CHECKING -from ... import _serialization +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models @@ -86,19 +86,19 @@ class ResourceSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.name = None - self.tier = None - self.size = None - self.family = None - self.kind = None - self.capacity = None - self.locations = None - self.location_info = None - self.api_versions = None - self.costs = None - self.capabilities = None - self.restrictions = None + self.resource_type: Optional[str] = None + self.name: Optional[str] = None + self.tier: Optional[str] = None + self.size: Optional[str] = None + self.family: Optional[str] = None + self.kind: Optional[str] = None + self.capacity: Optional["_models.ResourceSkuCapacity"] = None + self.locations: Optional[List[str]] = None + self.location_info: Optional[List["_models.ResourceSkuLocationInfo"]] = None + self.api_versions: Optional[List[str]] = None + self.costs: Optional[List["_models.ResourceSkuCosts"]] = None + self.capabilities: Optional[List["_models.ResourceSkuCapabilities"]] = None + self.restrictions: Optional[List["_models.ResourceSkuRestrictions"]] = None class ResourceSkuCapabilities(_serialization.Model): @@ -125,8 +125,8 @@ class ResourceSkuCapabilities(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.value = None + self.name: Optional[str] = None + self.value: Optional[str] = None class ResourceSkuCapacity(_serialization.Model): @@ -162,10 +162,10 @@ class ResourceSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.ResourceSkuCapacityScaleType"]] = None class ResourceSkuCosts(_serialization.Model): @@ -196,9 +196,9 @@ class ResourceSkuCosts(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.meter_id = None - self.quantity = None - self.extended_unit = None + self.meter_id: Optional[str] = None + self.quantity: Optional[int] = None + self.extended_unit: Optional[str] = None class ResourceSkuLocationInfo(_serialization.Model): @@ -225,8 +225,8 @@ class ResourceSkuLocationInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.location = None - self.zones = None + self.location: Optional[str] = None + self.zones: Optional[List[str]] = None class ResourceSkuRestrictionInfo(_serialization.Model): @@ -253,8 +253,8 @@ class ResourceSkuRestrictionInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.locations = None - self.zones = None + self.locations: Optional[List[str]] = None + self.zones: Optional[List[str]] = None class ResourceSkuRestrictions(_serialization.Model): @@ -292,10 +292,10 @@ class ResourceSkuRestrictions(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.type = None - self.values = None - self.restriction_info = None - self.reason_code = None + self.type: Optional[Union[str, "_models.ResourceSkuRestrictionsType"]] = None + self.values: Optional[List[str]] = None + self.restriction_info: Optional["_models.ResourceSkuRestrictionInfo"] = None + self.reason_code: Optional[Union[str, "_models.ResourceSkuRestrictionsReasonCode"]] = None class ResourceSkusResult(_serialization.Model): diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/operations/_operations.py index 955e4ffa5415..46ac26dc3ed8 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01/operations/_operations.py @@ -5,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, @@ -25,12 +26,9 @@ from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -76,10 +74,10 @@ class ResourceSkusOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_compute_management_client.py index 084179dfb559..de985dec2abd 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( AvailabilitySetsOperations, ImagesOperations, @@ -90,7 +92,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2017-12-01". Note that overriding this default value may result in unsupported behavior. @@ -100,15 +102,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -127,7 +131,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_metadata.json index f6fdf68f654b..5944975cfcc3 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/aio/_compute_management_client.py index 7d6e68ea22f2..dd42c886e130 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( AvailabilitySetsOperations, @@ -91,7 +93,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2017-12-01". Note that overriding this default value may result in unsupported behavior. @@ -101,15 +103,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -128,7 +132,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/aio/operations/_operations.py index c8ab3fcff401..99d703811e38 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/aio/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,8 +6,8 @@ # 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 -import sys from typing import ( Any, AsyncIterable, @@ -25,6 +25,7 @@ ) import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -46,6 +47,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_availability_sets_create_or_update_request, build_availability_sets_delete_request, @@ -140,11 +142,8 @@ build_virtual_machines_start_request, build_virtual_machines_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -163,10 +162,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -259,10 +258,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -889,10 +888,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -1104,10 +1103,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1729,10 +1728,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3969,10 +3968,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -4302,10 +4301,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4401,10 +4400,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4500,10 +4499,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -5204,10 +5203,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -6470,7 +6469,6 @@ async def get_next(next_link=None): def get_os_upgrade_history( self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any ) -> AsyncIterable["_models.UpgradeOperationHistoricalStatusInfo"]: - # pylint: disable=line-too-long """Gets list of OS upgrades on a VM scale set instance. :param resource_group_name: The name of the resource group. Required. @@ -8261,10 +8259,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -8760,10 +8758,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _cancel_initial( @@ -9065,10 +9063,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _reimage_initial( @@ -10573,10 +10571,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _export_request_rate_by_interval_initial( @@ -10947,10 +10945,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/models/_compute_management_client_enums.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/models/_compute_management_client_enums.py index 9275d1b7e195..16a7ce23d0b3 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/models/_compute_management_client_enums.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/models/_compute_management_client_enums.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/models/_models_py3.py index f75f809a9c3c..9c90715db427 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,20 +7,15 @@ # 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, Literal, 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 +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] class AdditionalUnattendContent(_serialization.Model): @@ -256,9 +251,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -353,7 +348,7 @@ def __init__( self.platform_update_domain_count = platform_update_domain_count self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class AvailabilitySetListResult(_serialization.Model): @@ -473,7 +468,7 @@ def __init__( self.platform_update_domain_count = platform_update_domain_count self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class BootDiagnostics(_serialization.Model): @@ -531,8 +526,8 @@ class BootDiagnosticsInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None class ComputeLongRunningOperationProperties(_serialization.Model): @@ -575,7 +570,7 @@ class ComputeOperationListResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.value = None + self.value: Optional[List["_models.ComputeOperationValue"]] = None class ComputeOperationValue(_serialization.Model): @@ -618,12 +613,12 @@ class ComputeOperationValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.origin = None - self.name = None - self.operation = None - self.resource = None - self.description = None - self.provider = None + self.origin: Optional[str] = None + self.name: Optional[str] = None + self.operation: Optional[str] = None + self.resource: Optional[str] = None + self.description: Optional[str] = None + self.provider: Optional[str] = None class DataDisk(_serialization.Model): @@ -769,7 +764,7 @@ class DataDiskImage(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.lun = None + self.lun: Optional[int] = None class DiagnosticsProfile(_serialization.Model): @@ -888,7 +883,7 @@ class HardwareProfile(_serialization.Model): :ivar vm_size: Specifies the size of the virtual machine. For more information about virtual machine sizes, see `Sizes for virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` The available VM sizes depend on region and availability set. For a list of available sizes use these APIs: :code:`
    `\\ :code:`
    ` `List all available virtual machine sizes in an availability set @@ -945,7 +940,7 @@ def __init__( """ :keyword vm_size: Specifies the size of the virtual machine. For more information about virtual machine sizes, see `Sizes for virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` The available VM sizes depend on region and availability set. For a list of available sizes use these APIs: :code:`
    `\\ :code:`
    ` `List all available virtual machine sizes in an availability set @@ -1063,7 +1058,7 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None class ImageDataDisk(_serialization.Model): @@ -1390,12 +1385,12 @@ class ImageStorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2017_12_01.models.ImageOSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2017_12_01.models.ImageDataDisk] :ivar zone_resilient: Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). @@ -1420,12 +1415,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2017_12_01.models.ImageOSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2017_12_01.models.ImageDataDisk] :keyword zone_resilient: Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). @@ -1482,7 +1477,7 @@ def __init__( super().__init__(tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None class InnerError(_serialization.Model): @@ -1812,11 +1807,11 @@ class OperationStatusResponse(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.status = None - self.start_time = None - self.end_time = None - self.error = None + self.name: Optional[str] = None + self.status: Optional[str] = None + self.start_time: Optional[datetime.datetime] = None + self.end_time: Optional[datetime.datetime] = None + self.error: Optional["_models.ApiError"] = None class LogAnalyticsOperationResult(OperationStatusResponse): @@ -1859,7 +1854,7 @@ class LogAnalyticsOperationResult(OperationStatusResponse): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None + self.properties: Optional["_models.LogAnalyticsOutput"] = None class LogAnalyticsOutput(_serialization.Model): @@ -1882,7 +1877,7 @@ class LogAnalyticsOutput(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.output = None + self.output: Optional[str] = None class MaintenanceRedeployStatus(_serialization.Model): @@ -2224,7 +2219,7 @@ class OSProfile(_serialization.Model): **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :vartype computer_name: str :ivar admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` **Windows-only restriction:** Cannot end in "." :code:`
    `\\ :code:`
    ` @@ -2236,10 +2231,10 @@ class OSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -2252,16 +2247,16 @@ class OSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -2269,10 +2264,10 @@ class OSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2017_12_01.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machine. :vartype secrets: list[~azure.mgmt.compute.v2017_12_01.models.VaultSecretGroup] @@ -2306,7 +2301,7 @@ def __init__( **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :paramtype computer_name: str :keyword admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` **Windows-only restriction:** Cannot end in "." :code:`
    `\\ :code:`
    ` @@ -2318,10 +2313,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -2334,16 +2329,16 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -2351,10 +2346,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2017_12_01.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machine. @@ -2489,8 +2484,8 @@ class RecoveryWalkResponse(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.walk_performed = None - self.next_platform_update_domain = None + self.walk_performed: Optional[bool] = None + self.next_platform_update_domain: Optional[int] = None class RequestRateByIntervalInput(LogAnalyticsInputBase): @@ -2604,9 +2599,9 @@ class RollbackStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successfully_rolledback_instance_count = None - self.failed_rolledback_instance_count = None - self.rollback_error = None + self.successfully_rolledback_instance_count: Optional[int] = None + self.failed_rolledback_instance_count: Optional[int] = None + self.rollback_error: Optional["_models.ApiError"] = None class RollingUpgradePolicy(_serialization.Model): @@ -2718,10 +2713,10 @@ class RollingUpgradeProgressInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successful_instance_count = None - self.failed_instance_count = None - self.in_progress_instance_count = None - self.pending_instance_count = None + self.successful_instance_count: Optional[int] = None + self.failed_instance_count: Optional[int] = None + self.in_progress_instance_count: Optional[int] = None + self.pending_instance_count: Optional[int] = None class RollingUpgradeRunningStatus(_serialization.Model): @@ -2758,10 +2753,10 @@ class RollingUpgradeRunningStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.last_action = None - self.last_action_time = None + self.code: Optional[Union[str, "_models.RollingUpgradeStatusCode"]] = None + self.start_time: Optional[datetime.datetime] = None + self.last_action: Optional[Union[str, "_models.RollingUpgradeActionType"]] = None + self.last_action_time: Optional[datetime.datetime] = None class RollingUpgradeStatusInfo(Resource): @@ -2823,10 +2818,10 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(location=location, tags=tags, **kwargs) - self.policy = None - self.running_status = None - self.progress = None - self.error = None + self.policy: Optional["_models.RollingUpgradePolicy"] = None + self.running_status: Optional["_models.RollingUpgradeRunningStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None class RunCommandDocumentBase(_serialization.Model): @@ -3245,7 +3240,7 @@ class SshPublicKey(_serialization.Model): :ivar key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :vartype key_data: str """ @@ -3263,7 +3258,7 @@ def __init__(self, *, path: Optional[str] = None, key_data: Optional[str] = None :keyword key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :paramtype key_data: str """ super().__init__(**kwargs) @@ -3282,12 +3277,12 @@ class StorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2017_12_01.models.OSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2017_12_01.models.DataDisk] """ @@ -3314,12 +3309,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2017_12_01.models.OSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2017_12_01.models.DataDisk] """ super().__init__(**kwargs) @@ -3348,7 +3343,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class ThrottledRequestsInput(LogAnalyticsInputBase): @@ -3401,9 +3396,9 @@ class UpgradeOperationHistoricalStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None - self.type = None - self.location = None + self.properties: Optional["_models.UpgradeOperationHistoricalStatusInfoProperties"] = None + self.type: Optional[str] = None + self.location: Optional[str] = None class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # pylint: disable=name-too-long @@ -3447,12 +3442,12 @@ class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # p def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.running_status = None - self.progress = None - self.error = None - self.started_by = None - self.target_image_reference = None - self.rollback_info = None + self.running_status: Optional["_models.UpgradeOperationHistoryStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None + self.started_by: Optional[Union[str, "_models.UpgradeOperationInvoker"]] = None + self.target_image_reference: Optional["_models.ImageReference"] = None + self.rollback_info: Optional["_models.RollbackStatusInfo"] = None class UpgradeOperationHistoryStatus(_serialization.Model): @@ -3484,9 +3479,9 @@ class UpgradeOperationHistoryStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.end_time = None + self.code: Optional[Union[str, "_models.UpgradeState"]] = None + self.start_time: Optional[datetime.datetime] = None + self.end_time: Optional[datetime.datetime] = None class UpgradePolicy(_serialization.Model): @@ -3777,10 +3772,10 @@ class VirtualMachine(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :vartype availability_set: ~azure.mgmt.compute.v2017_12_01.models.SubResource @@ -3795,7 +3790,7 @@ class VirtualMachine(Resource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and @@ -3883,10 +3878,10 @@ def __init__( machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :paramtype availability_set: ~azure.mgmt.compute.v2017_12_01.models.SubResource @@ -3897,13 +3892,13 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ super().__init__(location=location, tags=tags, **kwargs) self.plan = plan - self.resources = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None self.identity = identity self.zones = zones self.hardware_profile = hardware_profile @@ -3912,10 +3907,10 @@ def __init__( self.network_profile = network_profile self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None class VirtualMachineAgentInstanceView(_serialization.Model): @@ -4153,7 +4148,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view @@ -4461,7 +4456,7 @@ class VirtualMachineHealthStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None + self.status: Optional["_models.InstanceViewStatus"] = None class VirtualMachineIdentity(_serialization.Model): @@ -4482,7 +4477,7 @@ class VirtualMachineIdentity(_serialization.Model): :vartype type: str or ~azure.mgmt.compute.v2017_12_01.models.ResourceIdentityType :ivar identity_ids: The list of user identities associated with the Virtual Machine. The user identity references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'. :vartype identity_ids: list[str] """ @@ -4513,12 +4508,12 @@ def __init__( :paramtype type: str or ~azure.mgmt.compute.v2017_12_01.models.ResourceIdentityType :keyword identity_ids: The list of user identities associated with the Virtual Machine. The user identity references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'. :paramtype identity_ids: list[str] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.identity_ids = identity_ids @@ -4945,9 +4940,9 @@ def __init__( self.zones = zones self.upgrade_policy = upgrade_policy self.virtual_machine_profile = virtual_machine_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.overprovision = overprovision - self.unique_id = None + self.unique_id: Optional[str] = None self.single_placement_group = single_placement_group self.zone_balance = zone_balance self.platform_fault_domain_count = platform_fault_domain_count @@ -5142,7 +5137,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None class VirtualMachineScaleSetExtensionListResult(_serialization.Model): # pylint: disable=name-too-long @@ -5224,7 +5219,7 @@ class VirtualMachineScaleSetIdentity(_serialization.Model): :vartype type: str or ~azure.mgmt.compute.v2017_12_01.models.ResourceIdentityType :ivar identity_ids: The list of user identities associated with the virtual machine scale set. The user identity references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'. :vartype identity_ids: list[str] """ @@ -5256,12 +5251,12 @@ def __init__( :paramtype type: str or ~azure.mgmt.compute.v2017_12_01.models.ResourceIdentityType :keyword identity_ids: The list of user identities associated with the virtual machine scale set. The user identity references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'. :paramtype identity_ids: list[str] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.identity_ids = identity_ids @@ -5298,8 +5293,8 @@ def __init__(self, *, statuses: Optional[List["_models.InstanceViewStatus"]] = N :paramtype statuses: list[~azure.mgmt.compute.v2017_12_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.virtual_machine = None - self.extensions = None + self.virtual_machine: Optional["_models.VirtualMachineScaleSetInstanceViewStatusesSummary"] = None + self.extensions: Optional[List["_models.VirtualMachineScaleSetVMExtensionsSummary"]] = None self.statuses = statuses @@ -5324,7 +5319,7 @@ class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.statuses_summary = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetIPConfiguration(SubResource): @@ -5741,7 +5736,7 @@ class VirtualMachineScaleSetNetworkProfile(_serialization.Model): :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :vartype health_probe: ~azure.mgmt.compute.v2017_12_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: @@ -5766,7 +5761,7 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :paramtype health_probe: ~azure.mgmt.compute.v2017_12_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: @@ -5903,10 +5898,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -5919,16 +5914,16 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -5936,10 +5931,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2017_12_01.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. @@ -5982,10 +5977,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -5998,16 +5993,16 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -6015,10 +6010,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2017_12_01.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. @@ -6144,9 +6139,9 @@ class VirtualMachineScaleSetSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.sku = None - self.capacity = None + self.resource_type: Optional[str] = None + self.sku: Optional["_models.Sku"] = None + self.capacity: Optional["_models.VirtualMachineScaleSetSkuCapacity"] = None class VirtualMachineScaleSetSkuCapacity(_serialization.Model): @@ -6183,10 +6178,10 @@ class VirtualMachineScaleSetSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default_capacity = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default_capacity: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.VirtualMachineScaleSetSkuScaleType"]] = None class VirtualMachineScaleSetStorageProfile(_serialization.Model): @@ -6200,12 +6195,12 @@ class VirtualMachineScaleSetStorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2017_12_01.models.VirtualMachineScaleSetOSDisk :ivar data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2017_12_01.models.VirtualMachineScaleSetDataDisk] """ @@ -6233,12 +6228,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2017_12_01.models.VirtualMachineScaleSetOSDisk :keyword data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2017_12_01.models.VirtualMachineScaleSetDataDisk] """ @@ -6869,10 +6864,10 @@ class VirtualMachineScaleSetVM(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :vartype availability_set: ~azure.mgmt.compute.v2017_12_01.models.SubResource @@ -6885,7 +6880,7 @@ class VirtualMachineScaleSetVM(Resource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str """ @@ -6968,10 +6963,10 @@ def __init__( machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :paramtype availability_set: ~azure.mgmt.compute.v2017_12_01.models.SubResource @@ -6982,25 +6977,25 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ super().__init__(location=location, tags=tags, **kwargs) - self.instance_id = None - self.sku = None + self.instance_id: Optional[str] = None + self.sku: Optional["_models.Sku"] = None self.plan = plan - self.resources = None - self.latest_model_applied = None - self.vm_id = None - self.instance_view = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None + self.latest_model_applied: Optional[bool] = None + self.vm_id: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineScaleSetVMInstanceView"] = None self.hardware_profile = hardware_profile self.storage_profile = storage_profile self.os_profile = os_profile self.network_profile = network_profile self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.license_type = license_type @@ -7029,8 +7024,8 @@ class VirtualMachineScaleSetVMExtensionsSummary(_serialization.Model): # pylint def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.statuses_summary = None + self.name: Optional[str] = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetVMInstanceIDs(_serialization.Model): @@ -7187,7 +7182,7 @@ def __init__( self.maintenance_redeploy_status = maintenance_redeploy_status self.disks = disks self.extensions = extensions - self.vm_health = None + self.vm_health: Optional["_models.VirtualMachineHealthStatus"] = None self.boot_diagnostics = boot_diagnostics self.statuses = statuses self.placement_group_id = placement_group_id @@ -7256,7 +7251,7 @@ class VirtualMachineScaleSetVMProfile(_serialization.Model): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar priority: Specifies the priority for the virtual machines in the scale set. @@ -7319,7 +7314,7 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str :keyword priority: Specifies the priority for the virtual machines in the scale set. @@ -7451,8 +7446,8 @@ class VirtualMachineStatusCodeCount(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.count = None + self.code: Optional[str] = None + self.count: Optional[int] = None class VirtualMachineUpdate(UpdateResource): @@ -7487,10 +7482,10 @@ class VirtualMachineUpdate(UpdateResource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :vartype availability_set: ~azure.mgmt.compute.v2017_12_01.models.SubResource @@ -7505,7 +7500,7 @@ class VirtualMachineUpdate(UpdateResource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and @@ -7580,10 +7575,10 @@ def __init__( machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :paramtype availability_set: ~azure.mgmt.compute.v2017_12_01.models.SubResource @@ -7594,7 +7589,7 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ @@ -7608,10 +7603,10 @@ def __init__( self.network_profile = network_profile self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None class WindowsConfiguration(_serialization.Model): diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/operations/_operations.py index 5f410053689c..daeec957a9bc 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, List, Literal, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -77,7 +75,7 @@ def build_availability_sets_create_or_update_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -111,7 +109,7 @@ def build_availability_sets_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -144,7 +142,7 @@ def build_availability_sets_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -175,7 +173,7 @@ def build_availability_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -232,7 +230,7 @@ def build_availability_sets_list_request(resource_group_name: str, subscription_ _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -262,7 +260,7 @@ def build_availability_sets_list_available_sizes_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -293,7 +291,7 @@ def build_virtual_machine_extension_images_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -326,7 +324,7 @@ def build_virtual_machine_extension_images_list_types_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -365,7 +363,7 @@ def build_virtual_machine_extension_images_list_versions_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -404,7 +402,7 @@ def build_virtual_machine_extensions_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -439,7 +437,7 @@ def build_virtual_machine_extensions_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -473,7 +471,7 @@ def build_virtual_machine_extensions_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -511,7 +509,7 @@ def build_virtual_machine_extensions_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -545,7 +543,7 @@ def build_virtual_machines_get_extensions_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -578,7 +576,7 @@ def build_virtual_machines_list_by_location_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -609,7 +607,7 @@ def build_virtual_machines_capture_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -643,7 +641,7 @@ def build_virtual_machines_create_or_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -677,7 +675,7 @@ def build_virtual_machines_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -710,7 +708,7 @@ def build_virtual_machines_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -746,7 +744,7 @@ def build_virtual_machines_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -779,7 +777,7 @@ def build_virtual_machines_instance_view_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -810,7 +808,7 @@ def build_virtual_machines_convert_to_managed_disks_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -841,7 +839,7 @@ def build_virtual_machines_deallocate_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -872,7 +870,7 @@ def build_virtual_machines_generalize_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -901,7 +899,7 @@ def build_virtual_machines_list_request(resource_group_name: str, subscription_i _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -955,7 +953,7 @@ def build_virtual_machines_list_available_sizes_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -986,7 +984,7 @@ def build_virtual_machines_power_off_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1017,7 +1015,7 @@ def build_virtual_machines_restart_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1048,7 +1046,7 @@ def build_virtual_machines_start_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1079,7 +1077,7 @@ def build_virtual_machines_redeploy_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1110,7 +1108,7 @@ def build_virtual_machines_perform_maintenance_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1142,7 +1140,7 @@ def build_virtual_machines_run_command_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1175,7 +1173,7 @@ def build_virtual_machine_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1218,7 +1216,7 @@ def build_virtual_machine_images_list_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1257,7 +1255,7 @@ def build_virtual_machine_images_list_offers_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1287,7 +1285,7 @@ def build_virtual_machine_images_list_publishers_request( # pylint: disable=nam # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1317,7 +1315,7 @@ def build_virtual_machine_images_list_skus_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1346,7 +1344,7 @@ def build_usage_list_request(location: str, subscription_id: str, **kwargs: Any) # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1373,7 +1371,7 @@ def build_virtual_machine_sizes_list_request(location: str, subscription_id: str # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1404,7 +1402,7 @@ def build_images_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -1438,7 +1436,7 @@ def build_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -1471,7 +1469,7 @@ def build_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -1502,7 +1500,7 @@ def build_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -1535,7 +1533,7 @@ def build_images_list_by_resource_group_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1590,7 +1588,7 @@ def build_virtual_machine_scale_sets_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1624,7 +1622,7 @@ def build_virtual_machine_scale_sets_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1657,7 +1655,7 @@ def build_virtual_machine_scale_sets_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1688,7 +1686,7 @@ def build_virtual_machine_scale_sets_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1720,7 +1718,7 @@ def build_virtual_machine_scale_sets_deallocate_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1754,7 +1752,7 @@ def build_virtual_machine_scale_sets_delete_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1787,7 +1785,7 @@ def build_virtual_machine_scale_sets_get_instance_view_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1818,7 +1816,7 @@ def build_virtual_machine_scale_sets_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1876,7 +1874,7 @@ def build_virtual_machine_scale_sets_list_skus_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1907,7 +1905,7 @@ def build_virtual_machine_scale_sets_get_os_upgrade_history_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1939,7 +1937,7 @@ def build_virtual_machine_scale_sets_power_off_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1973,7 +1971,7 @@ def build_virtual_machine_scale_sets_restart_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2007,7 +2005,7 @@ def build_virtual_machine_scale_sets_start_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2041,7 +2039,7 @@ def build_virtual_machine_scale_sets_redeploy_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2075,7 +2073,7 @@ def build_virtual_machine_scale_sets_perform_maintenance_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2109,7 +2107,7 @@ def build_virtual_machine_scale_sets_update_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2143,7 +2141,7 @@ def build_virtual_machine_scale_sets_reimage_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2177,7 +2175,7 @@ def build_virtual_machine_scale_sets_reimage_all_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2215,7 +2213,7 @@ def build_virtual_machine_scale_sets_force_recovery_service_fabric_platform_upda _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2248,7 +2246,7 @@ def build_virtual_machine_scale_set_extensions_create_or_update_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2282,7 +2280,7 @@ def build_virtual_machine_scale_set_extensions_delete_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2320,7 +2318,7 @@ def build_virtual_machine_scale_set_extensions_get_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2354,7 +2352,7 @@ def build_virtual_machine_scale_set_extensions_list_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2385,7 +2383,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_cancel_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2416,7 +2414,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_os_upgrade_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2447,7 +2445,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_get_latest_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2478,7 +2476,7 @@ def build_virtual_machine_scale_set_vms_reimage_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2510,7 +2508,7 @@ def build_virtual_machine_scale_set_vms_reimage_all_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2542,7 +2540,7 @@ def build_virtual_machine_scale_set_vms_deallocate_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2575,7 +2573,7 @@ def build_virtual_machine_scale_set_vms_update_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2609,7 +2607,7 @@ def build_virtual_machine_scale_set_vms_delete_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2641,7 +2639,7 @@ def build_virtual_machine_scale_set_vms_get_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2673,7 +2671,7 @@ def build_virtual_machine_scale_set_vms_get_instance_view_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2712,7 +2710,7 @@ def build_virtual_machine_scale_set_vms_list_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "virtualMachineScaleSetName": _SERIALIZER.url( @@ -2751,7 +2749,7 @@ def build_virtual_machine_scale_set_vms_power_off_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2783,7 +2781,7 @@ def build_virtual_machine_scale_set_vms_restart_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2815,7 +2813,7 @@ def build_virtual_machine_scale_set_vms_start_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2847,7 +2845,7 @@ def build_virtual_machine_scale_set_vms_redeploy_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2879,7 +2877,7 @@ def build_virtual_machine_scale_set_vms_perform_maintenance_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2912,7 +2910,7 @@ def build_log_analytics_export_request_rate_by_interval_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2945,7 +2943,7 @@ def build_log_analytics_export_throttled_requests_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2976,7 +2974,7 @@ def build_virtual_machine_run_commands_list_request( # pylint: disable=name-too # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -3006,7 +3004,7 @@ def build_virtual_machine_run_commands_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "commandId": _SERIALIZER.url("command_id", command_id, "str"), @@ -3038,10 +3036,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -3134,10 +3132,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -3761,10 +3759,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -3976,10 +3974,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -4601,10 +4599,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6815,10 +6813,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7148,10 +7146,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7247,10 +7245,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7345,10 +7343,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -8049,10 +8047,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -11091,10 +11089,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -11590,10 +11588,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _cancel_initial(self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any) -> Iterator[bytes]: @@ -11891,10 +11889,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _reimage_initial( @@ -13391,10 +13389,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _export_request_rate_by_interval_initial( @@ -13763,10 +13761,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_compute_management_client.py index d4ca74ee6d8e..df314dcf1d9f 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ResourceSkusOperations if TYPE_CHECKING: @@ -34,7 +36,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2019-04-01". Note that overriding this default value may result in unsupported behavior. @@ -42,15 +44,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -69,7 +73,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_metadata.json index 68c7c0d7b00e..5567fd7cb9e5 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": false, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node
    is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/aio/_compute_management_client.py index 1b38605de5e9..60fed9d70dc1 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ResourceSkusOperations @@ -34,7 +36,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2019-04-01". Note that overriding this default value may result in unsupported behavior. @@ -42,15 +44,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -69,7 +73,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/aio/operations/_operations.py index bd01f2163fa4..b9a5a57b5ce0 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/aio/operations/_operations.py @@ -5,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, @@ -25,12 +26,10 @@ from azure.mgmt.core.exceptions import ARMErrorFormat from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import build_resource_skus_list_request +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -49,10 +48,10 @@ class ResourceSkusOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/models/_models_py3.py index d6643aa6d671..8c8eaa614acd 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/models/_models_py3.py @@ -8,7 +8,7 @@ from typing import Any, List, Optional, TYPE_CHECKING -from ... import _serialization +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models @@ -86,19 +86,19 @@ class ResourceSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.name = None - self.tier = None - self.size = None - self.family = None - self.kind = None - self.capacity = None - self.locations = None - self.location_info = None - self.api_versions = None - self.costs = None - self.capabilities = None - self.restrictions = None + self.resource_type: Optional[str] = None + self.name: Optional[str] = None + self.tier: Optional[str] = None + self.size: Optional[str] = None + self.family: Optional[str] = None + self.kind: Optional[str] = None + self.capacity: Optional["_models.ResourceSkuCapacity"] = None + self.locations: Optional[List[str]] = None + self.location_info: Optional[List["_models.ResourceSkuLocationInfo"]] = None + self.api_versions: Optional[List[str]] = None + self.costs: Optional[List["_models.ResourceSkuCosts"]] = None + self.capabilities: Optional[List["_models.ResourceSkuCapabilities"]] = None + self.restrictions: Optional[List["_models.ResourceSkuRestrictions"]] = None class ResourceSkuCapabilities(_serialization.Model): @@ -125,8 +125,8 @@ class ResourceSkuCapabilities(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.value = None + self.name: Optional[str] = None + self.value: Optional[str] = None class ResourceSkuCapacity(_serialization.Model): @@ -162,10 +162,10 @@ class ResourceSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.ResourceSkuCapacityScaleType"]] = None class ResourceSkuCosts(_serialization.Model): @@ -196,9 +196,9 @@ class ResourceSkuCosts(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.meter_id = None - self.quantity = None - self.extended_unit = None + self.meter_id: Optional[str] = None + self.quantity: Optional[int] = None + self.extended_unit: Optional[str] = None class ResourceSkuLocationInfo(_serialization.Model): @@ -229,9 +229,9 @@ class ResourceSkuLocationInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.location = None - self.zones = None - self.zone_details = None + self.location: Optional[str] = None + self.zones: Optional[List[str]] = None + self.zone_details: Optional[List["_models.ResourceSkuZoneDetails"]] = None class ResourceSkuRestrictionInfo(_serialization.Model): @@ -258,8 +258,8 @@ class ResourceSkuRestrictionInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.locations = None - self.zones = None + self.locations: Optional[List[str]] = None + self.zones: Optional[List[str]] = None class ResourceSkuRestrictions(_serialization.Model): @@ -297,10 +297,10 @@ class ResourceSkuRestrictions(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.type = None - self.values = None - self.restriction_info = None - self.reason_code = None + self.type: Optional[Union[str, "_models.ResourceSkuRestrictionsType"]] = None + self.values: Optional[List[str]] = None + self.restriction_info: Optional["_models.ResourceSkuRestrictionInfo"] = None + self.reason_code: Optional[Union[str, "_models.ResourceSkuRestrictionsReasonCode"]] = None class ResourceSkusResult(_serialization.Model): @@ -362,5 +362,5 @@ class ResourceSkuZoneDetails(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.capabilities = None + self.name: Optional[List[str]] = None + self.capabilities: Optional[List["_models.ResourceSkuCapabilities"]] = None diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/operations/_operations.py index ec2f1dff90bb..55d9f759fae2 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_04_01/operations/_operations.py @@ -5,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, @@ -25,12 +26,9 @@ from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -80,10 +78,10 @@ class ResourceSkusOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_compute_management_client.py index aa1b57cf537d..dc1803c51f39 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( AvailabilitySetsOperations, DedicatedHostGroupsOperations, @@ -134,7 +136,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2019-07-01". Note that overriding this default value may result in unsupported behavior. @@ -144,15 +146,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -171,7 +175,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_metadata.json index 4fc95c06a995..301841906a4f 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/aio/_compute_management_client.py index 7ddcdb37c384..f65dcc063a9f 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( AvailabilitySetsOperations, @@ -136,7 +138,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2019-07-01". Note that overriding this default value may result in unsupported behavior. @@ -146,15 +148,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -173,7 +177,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/aio/operations/_operations.py index f50f186d013f..69a811599e7d 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/aio/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,8 +6,8 @@ # 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 -import sys from typing import ( Any, AsyncIterable, @@ -25,6 +25,7 @@ ) import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -46,6 +47,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_availability_sets_create_or_update_request, build_availability_sets_delete_request, @@ -216,11 +218,8 @@ build_virtual_machines_start_request, build_virtual_machines_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -239,10 +238,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -335,10 +334,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -957,10 +956,10 @@ class ProximityPlacementGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -1509,10 +1508,10 @@ class DedicatedHostGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -2051,10 +2050,10 @@ class DedicatedHostsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2741,10 +2740,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -2956,10 +2955,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -3634,10 +3633,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3967,10 +3966,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4066,10 +4065,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6474,10 +6473,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6574,10 +6573,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -7270,10 +7269,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -8504,7 +8503,6 @@ async def get_next(next_link=None): def get_os_upgrade_history( self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any ) -> AsyncIterable["_models.UpgradeOperationHistoricalStatusInfo"]: - # pylint: disable=line-too-long """Gets list of OS upgrades on a VM scale set instance. :param resource_group_name: The name of the resource group. Required. @@ -10344,10 +10342,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -11049,10 +11047,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _cancel_initial( @@ -11442,10 +11440,10 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -12154,10 +12152,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _reimage_initial( @@ -13917,10 +13915,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _export_request_rate_by_interval_initial( @@ -14291,10 +14289,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -15296,10 +15294,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -16321,10 +16319,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -17064,10 +17062,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -17774,10 +17772,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -18470,10 +18468,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -19248,10 +19246,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -19956,10 +19954,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -20739,10 +20737,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/models/_compute_management_client_enums.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/models/_compute_management_client_enums.py index 6afc2393f3d8..683e67caf434 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/models/_compute_management_client_enums.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/models/_compute_management_client_enums.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/models/_models_py3.py index d4a937f82ff2..bc4024a65d56 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,20 +7,15 @@ # 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, Literal, 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 +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] class AccessUri(_serialization.Model): @@ -43,7 +38,7 @@ class AccessUri(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.access_sas = None + self.access_sas: Optional[str] = None class AdditionalCapabilities(_serialization.Model): @@ -248,7 +243,7 @@ class AutomaticOSUpgradePolicy(_serialization.Model): applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false. :code:`
    `\\ :code:`
    ` If this is set to true for Windows based scale sets, `enableAutomaticUpdates - `_ # pylint: disable=line-too-long + `_ is automatically set to false and cannot be set to true. :vartype enable_automatic_os_upgrade: bool :ivar disable_automatic_rollback: Whether OS image rollback feature should be disabled. Default @@ -273,7 +268,7 @@ def __init__( applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false. :code:`
    `\\ :code:`
    ` If this is set to true for Windows based scale sets, `enableAutomaticUpdates - `_ # pylint: disable=line-too-long + `_ is automatically set to false and cannot be set to true. :paramtype enable_automatic_os_upgrade: bool :keyword disable_automatic_rollback: Whether OS image rollback feature should be disabled. @@ -391,9 +386,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -505,7 +500,7 @@ def __init__( self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines self.proximity_placement_group = proximity_placement_group - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class AvailabilitySetListResult(_serialization.Model): @@ -636,7 +631,7 @@ def __init__( self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines self.proximity_placement_group = proximity_placement_group - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class BillingProfile(_serialization.Model): @@ -742,9 +737,9 @@ class BootDiagnosticsInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None - self.status = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None + self.status: Optional["_models.InstanceViewStatus"] = None class ComputeOperationListResult(_serialization.Model): @@ -767,7 +762,7 @@ class ComputeOperationListResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.value = None + self.value: Optional[List["_models.ComputeOperationValue"]] = None class ComputeOperationValue(_serialization.Model): @@ -810,12 +805,12 @@ class ComputeOperationValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.origin = None - self.name = None - self.operation = None - self.resource = None - self.description = None - self.provider = None + self.origin: Optional[str] = None + self.name: Optional[str] = None + self.operation: Optional[str] = None + self.resource: Optional[str] = None + self.description: Optional[str] = None + self.provider: Optional[str] = None class CreationData(_serialization.Model): @@ -902,7 +897,7 @@ def __init__( self.image_reference = image_reference self.source_uri = source_uri self.source_resource_id = source_resource_id - self.source_unique_id = None + self.source_unique_id: Optional[str] = None self.upload_size_bytes = upload_size_bytes @@ -1049,8 +1044,8 @@ def __init__( self.disk_size_gb = disk_size_gb self.managed_disk = managed_disk self.to_be_detached = to_be_detached - self.disk_iops_read_write = None - self.disk_m_bps_read_write = None + self.disk_iops_read_write: Optional[int] = None + self.disk_m_bps_read_write: Optional[int] = None class DataDiskImage(_serialization.Model): @@ -1074,7 +1069,7 @@ class DataDiskImage(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.lun = None + self.lun: Optional[int] = None class DedicatedHost(Resource): @@ -1189,12 +1184,12 @@ def __init__( self.sku = sku self.platform_fault_domain = platform_fault_domain self.auto_replace_on_failure = auto_replace_on_failure - self.host_id = None - self.virtual_machines = None + self.host_id: Optional[str] = None + self.virtual_machines: Optional[List["_models.SubResourceReadOnly"]] = None self.license_type = license_type - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.DedicatedHostInstanceView"] = None class DedicatedHostAllocatableVM(_serialization.Model): @@ -1325,7 +1320,7 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.zones = zones self.platform_fault_domain_count = platform_fault_domain_count - self.hosts = None + self.hosts: Optional[List["_models.SubResourceReadOnly"]] = None class DedicatedHostGroupListResult(_serialization.Model): @@ -1415,7 +1410,7 @@ def __init__( super().__init__(tags=tags, **kwargs) self.zones = zones self.platform_fault_domain_count = platform_fault_domain_count - self.hosts = None + self.hosts: Optional[List["_models.SubResourceReadOnly"]] = None class DedicatedHostInstanceView(_serialization.Model): @@ -1458,7 +1453,7 @@ def __init__( :paramtype statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.asset_id = None + self.asset_id: Optional[str] = None self.available_capacity = available_capacity self.statuses = statuses @@ -1579,12 +1574,12 @@ def __init__( super().__init__(tags=tags, **kwargs) self.platform_fault_domain = platform_fault_domain self.auto_replace_on_failure = auto_replace_on_failure - self.host_id = None - self.virtual_machines = None + self.host_id: Optional[str] = None + self.virtual_machines: Optional[List["_models.SubResourceReadOnly"]] = None self.license_type = license_type - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.DedicatedHostInstanceView"] = None class DiagnosticsProfile(_serialization.Model): @@ -1816,21 +1811,21 @@ def __init__( :paramtype encryption: ~azure.mgmt.compute.v2019_07_01.models.Encryption """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None + self.managed_by: Optional[str] = None self.sku = sku self.zones = zones - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.disk_iops_read_write = disk_iops_read_write self.disk_m_bps_read_write = disk_m_bps_read_write - self.disk_state = None + self.disk_state: Optional[Union[str, "_models.DiskState"]] = None self.encryption = encryption @@ -1908,8 +1903,8 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.identity = identity self.active_key = active_key - self.previous_keys = None - self.provisioning_state = None + self.previous_keys: Optional[List["_models.KeyVaultAndKeyReference"]] = None + self.provisioning_state: Optional[str] = None class DiskEncryptionSetList(_serialization.Model): @@ -2160,7 +2155,7 @@ def __init__(self, *, name: Optional[Union[str, "_models.DiskStorageAccountTypes """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class DiskUpdate(_serialization.Model): @@ -2338,8 +2333,8 @@ def __init__( """ super().__init__(**kwargs) self.type = type - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None class EncryptionSettingsCollection(_serialization.Model): @@ -2504,7 +2499,7 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryPropertiesProvisioningState"]] = None class GalleryApplication(Resource): @@ -2795,8 +2790,10 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[ + Union[str, "_models.GalleryApplicationVersionPropertiesProvisioningState"] + ] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryApplicationVersionList(_serialization.Model): @@ -2906,7 +2903,7 @@ def __init__( self.target_regions = target_regions self.replica_count = replica_count self.exclude_from_latest = exclude_from_latest - self.published_date = None + self.published_date: Optional[datetime.datetime] = None self.end_of_life_date = end_of_life_date self.storage_account_type = storage_account_type @@ -3062,8 +3059,10 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[ + Union[str, "_models.GalleryApplicationVersionPropertiesProvisioningState"] + ] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryArtifactSource(_serialization.Model): @@ -3153,7 +3152,7 @@ def __init__( :paramtype source: ~azure.mgmt.compute.v2019_07_01.models.GalleryArtifactVersionSource """ super().__init__(**kwargs) - self.size_in_gb = None + self.size_in_gb: Optional[int] = None self.host_caching = host_caching self.source = source @@ -3234,7 +3233,7 @@ class GalleryIdentifier(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.unique_name = None + self.unique_name: Optional[str] = None class GalleryImage(Resource): @@ -3395,7 +3394,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImagePropertiesProvisioningState"]] = None class GalleryImageIdentifier(_serialization.Model): @@ -3609,7 +3608,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImagePropertiesProvisioningState"]] = None class GalleryImageVersion(Resource): @@ -3687,9 +3686,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImageVersionPropertiesProvisioningState"]] = None self.storage_profile = storage_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryImageVersionList(_serialization.Model): @@ -3847,9 +3846,9 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImageVersionPropertiesProvisioningState"]] = None self.storage_profile = storage_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryList(_serialization.Model): @@ -3950,7 +3949,7 @@ def __init__( super().__init__(tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryPropertiesProvisioningState"]] = None class GrantAccessData(_serialization.Model): @@ -3991,7 +3990,7 @@ class HardwareProfile(_serialization.Model): :ivar vm_size: Specifies the size of the virtual machine. For more information about virtual machine sizes, see `Sizes for virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` The available VM sizes depend on region and availability set. For a list of available sizes use these APIs: :code:`
    `\\ :code:`
    ` `List all available virtual machine sizes in an availability set @@ -4048,7 +4047,7 @@ def __init__( """ :keyword vm_size: Specifies the size of the virtual machine. For more information about virtual machine sizes, see `Sizes for virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` The available VM sizes depend on region and availability set. For a list of available sizes use these APIs: :code:`
    `\\ :code:`
    ` `List all available virtual machine sizes in an availability set @@ -4176,7 +4175,7 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.hyper_v_generation = hyper_v_generation @@ -4681,7 +4680,7 @@ def __init__( self.offer = offer self.sku = sku self.version = version - self.exact_version = None + self.exact_version: Optional[str] = None class ImageStorageProfile(_serialization.Model): @@ -4690,12 +4689,12 @@ class ImageStorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2019_07_01.models.ImageOSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2019_07_01.models.ImageDataDisk] :ivar zone_resilient: Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). @@ -4720,12 +4719,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2019_07_01.models.ImageOSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2019_07_01.models.ImageDataDisk] :keyword zone_resilient: Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). @@ -4792,7 +4791,7 @@ def __init__( super().__init__(tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.hyper_v_generation = hyper_v_generation @@ -5187,7 +5186,7 @@ class LogAnalyticsOperationResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None + self.properties: Optional["_models.LogAnalyticsOutput"] = None class LogAnalyticsOutput(_serialization.Model): @@ -5210,7 +5209,7 @@ class LogAnalyticsOutput(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.output = None + self.output: Optional[str] = None class MaintenanceRedeployStatus(_serialization.Model): @@ -5600,7 +5599,7 @@ class OSProfile(_serialization.Model): **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :vartype computer_name: str :ivar admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` This property cannot be updated after the VM is created. :code:`
    `\\ @@ -5613,10 +5612,10 @@ class OSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -5629,10 +5628,10 @@ class OSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum @@ -5643,7 +5642,7 @@ class OSProfile(_serialization.Model): `_ :code:`
    `\\ :code:`
    ` For using cloud-init for your Linux VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -5651,10 +5650,10 @@ class OSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2019_07_01.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machine. :vartype secrets: list[~azure.mgmt.compute.v2019_07_01.models.VaultSecretGroup] @@ -5699,7 +5698,7 @@ def __init__( **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :paramtype computer_name: str :keyword admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` This property cannot be updated after the VM is created. :code:`
    `\\ @@ -5712,10 +5711,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -5728,10 +5727,10 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum @@ -5742,7 +5741,7 @@ def __init__( `_ :code:`
    `\\ :code:`
    ` For using cloud-init for your Linux VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -5750,10 +5749,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2019_07_01.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machine. @@ -5920,9 +5919,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.proximity_placement_group_type = proximity_placement_group_type - self.virtual_machines = None - self.virtual_machine_scale_sets = None - self.availability_sets = None + self.virtual_machines: Optional[List["_models.SubResourceWithColocationStatus"]] = None + self.virtual_machine_scale_sets: Optional[List["_models.SubResourceWithColocationStatus"]] = None + self.availability_sets: Optional[List["_models.SubResourceWithColocationStatus"]] = None self.colocation_status = colocation_status @@ -6068,8 +6067,8 @@ class RecoveryWalkResponse(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.walk_performed = None - self.next_platform_update_domain = None + self.walk_performed: Optional[bool] = None + self.next_platform_update_domain: Optional[int] = None class RegionalReplicationStatus(_serialization.Model): @@ -6105,10 +6104,10 @@ class RegionalReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.region = None - self.state = None - self.details = None - self.progress = None + self.region: Optional[str] = None + self.state: Optional[Union[str, "_models.ReplicationState"]] = None + self.details: Optional[str] = None + self.progress: Optional[int] = None class ReplicationStatus(_serialization.Model): @@ -6137,8 +6136,8 @@ class ReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.aggregated_state = None - self.summary = None + self.aggregated_state: Optional[Union[str, "_models.AggregatedReplicationState"]] = None + self.summary: Optional[List["_models.RegionalReplicationStatus"]] = None class RequestRateByIntervalInput(LogAnalyticsInputBase): @@ -6284,9 +6283,9 @@ class RollbackStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successfully_rolledback_instance_count = None - self.failed_rolledback_instance_count = None - self.rollback_error = None + self.successfully_rolledback_instance_count: Optional[int] = None + self.failed_rolledback_instance_count: Optional[int] = None + self.rollback_error: Optional["_models.ApiError"] = None class RollingUpgradePolicy(_serialization.Model): @@ -6398,10 +6397,10 @@ class RollingUpgradeProgressInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successful_instance_count = None - self.failed_instance_count = None - self.in_progress_instance_count = None - self.pending_instance_count = None + self.successful_instance_count: Optional[int] = None + self.failed_instance_count: Optional[int] = None + self.in_progress_instance_count: Optional[int] = None + self.pending_instance_count: Optional[int] = None class RollingUpgradeRunningStatus(_serialization.Model): @@ -6438,10 +6437,10 @@ class RollingUpgradeRunningStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.last_action = None - self.last_action_time = None + self.code: Optional[Union[str, "_models.RollingUpgradeStatusCode"]] = None + self.start_time: Optional[datetime.datetime] = None + self.last_action: Optional[Union[str, "_models.RollingUpgradeActionType"]] = None + self.last_action_time: Optional[datetime.datetime] = None class RollingUpgradeStatusInfo(Resource): @@ -6503,10 +6502,10 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(location=location, tags=tags, **kwargs) - self.policy = None - self.running_status = None - self.progress = None - self.error = None + self.policy: Optional["_models.RollingUpgradePolicy"] = None + self.running_status: Optional["_models.RollingUpgradeRunningStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None class RunCommandDocumentBase(_serialization.Model): @@ -7085,17 +7084,17 @@ def __init__( :paramtype encryption: ~azure.mgmt.compute.v2019_07_01.models.Encryption """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None + self.managed_by: Optional[str] = None self.sku = sku - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.incremental = incremental self.encryption = encryption @@ -7164,7 +7163,7 @@ def __init__( """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class SnapshotUpdate(_serialization.Model): @@ -7294,7 +7293,7 @@ class SshPublicKey(_serialization.Model): :ivar key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :vartype key_data: str """ @@ -7312,7 +7311,7 @@ def __init__(self, *, path: Optional[str] = None, key_data: Optional[str] = None :keyword key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :paramtype key_data: str """ super().__init__(**kwargs) @@ -7331,12 +7330,12 @@ class StorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2019_07_01.models.OSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2019_07_01.models.DataDisk] """ @@ -7363,12 +7362,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2019_07_01.models.OSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2019_07_01.models.DataDisk] """ super().__init__(**kwargs) @@ -7397,7 +7396,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SubResourceWithColocationStatus(SubResource): @@ -7567,9 +7566,9 @@ class UpgradeOperationHistoricalStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None - self.type = None - self.location = None + self.properties: Optional["_models.UpgradeOperationHistoricalStatusInfoProperties"] = None + self.type: Optional[str] = None + self.location: Optional[str] = None class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # pylint: disable=name-too-long @@ -7613,12 +7612,12 @@ class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # p def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.running_status = None - self.progress = None - self.error = None - self.started_by = None - self.target_image_reference = None - self.rollback_info = None + self.running_status: Optional["_models.UpgradeOperationHistoryStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None + self.started_by: Optional[Union[str, "_models.UpgradeOperationInvoker"]] = None + self.target_image_reference: Optional["_models.ImageReference"] = None + self.rollback_info: Optional["_models.RollbackStatusInfo"] = None class UpgradeOperationHistoryStatus(_serialization.Model): @@ -7650,9 +7649,9 @@ class UpgradeOperationHistoryStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.end_time = None + self.code: Optional[Union[str, "_models.UpgradeState"]] = None + self.start_time: Optional[datetime.datetime] = None + self.end_time: Optional[datetime.datetime] = None class UpgradePolicy(_serialization.Model): @@ -7892,8 +7891,8 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None class VaultCertificate(_serialization.Model): @@ -8051,10 +8050,10 @@ class VirtualMachine(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -8100,7 +8099,7 @@ class VirtualMachine(Resource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and @@ -8207,10 +8206,10 @@ def __init__( # pylint: disable=too-many-locals machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -8252,13 +8251,13 @@ def __init__( # pylint: disable=too-many-locals element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ super().__init__(location=location, tags=tags, **kwargs) self.plan = plan - self.resources = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None self.identity = identity self.zones = zones self.hardware_profile = hardware_profile @@ -8274,10 +8273,10 @@ def __init__( # pylint: disable=too-many-locals self.eviction_policy = eviction_policy self.billing_profile = billing_profile self.host = host - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None class VirtualMachineAgentInstanceView(_serialization.Model): @@ -8403,10 +8402,10 @@ def __init__(self, *, id: Optional[str] = None, **kwargs: Any) -> None: # pylin :paramtype id: str """ super().__init__(id=id, **kwargs) - self.schema = None - self.content_version = None - self.parameters = None - self.resources = None + self.schema: Optional[str] = None + self.content_version: Optional[str] = None + self.parameters: Optional[JSON] = None + self.resources: Optional[List[JSON]] = None class VirtualMachineExtension(Resource): @@ -8528,7 +8527,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view @@ -8836,7 +8835,7 @@ class VirtualMachineHealthStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None + self.status: Optional["_models.InstanceViewStatus"] = None class VirtualMachineIdentity(_serialization.Model): @@ -8857,7 +8856,7 @@ class VirtualMachineIdentity(_serialization.Model): :vartype type: str or ~azure.mgmt.compute.v2019_07_01.models.ResourceIdentityType :ivar user_assigned_identities: The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2019_07_01.models.UserAssignedIdentitiesValue] """ @@ -8889,13 +8888,13 @@ def __init__( :paramtype type: str or ~azure.mgmt.compute.v2019_07_01.models.ResourceIdentityType :keyword user_assigned_identities: The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2019_07_01.models.UserAssignedIdentitiesValue] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.user_assigned_identities = user_assigned_identities @@ -9431,10 +9430,10 @@ def __init__( self.upgrade_policy = upgrade_policy self.automatic_repairs_policy = automatic_repairs_policy self.virtual_machine_profile = virtual_machine_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.overprovision = overprovision self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms - self.unique_id = None + self.unique_id: Optional[str] = None self.single_placement_group = single_placement_group self.zone_balance = zone_balance self.platform_fault_domain_count = platform_fault_domain_count @@ -9661,7 +9660,7 @@ def __init__( """ super().__init__(**kwargs) self.name = name - self.type = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -9669,7 +9668,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.provision_after_extensions = provision_after_extensions @@ -9830,8 +9829,8 @@ def __init__( :paramtype provision_after_extensions: list[str] """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -9839,7 +9838,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.provision_after_extensions = provision_after_extensions @@ -9862,7 +9861,7 @@ class VirtualMachineScaleSetIdentity(_serialization.Model): :vartype type: str or ~azure.mgmt.compute.v2019_07_01.models.ResourceIdentityType :ivar user_assigned_identities: The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue] """ @@ -9901,13 +9900,13 @@ def __init__( :keyword user_assigned_identities: The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.user_assigned_identities = user_assigned_identities @@ -9936,8 +9935,8 @@ class VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue(_serialization.M def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None class VirtualMachineScaleSetInstanceView(_serialization.Model): @@ -9972,8 +9971,8 @@ def __init__(self, *, statuses: Optional[List["_models.InstanceViewStatus"]] = N :paramtype statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.virtual_machine = None - self.extensions = None + self.virtual_machine: Optional["_models.VirtualMachineScaleSetInstanceViewStatusesSummary"] = None + self.extensions: Optional[List["_models.VirtualMachineScaleSetVMExtensionsSummary"]] = None self.statuses = statuses @@ -9998,7 +9997,7 @@ class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.statuses_summary = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetIPConfiguration(SubResource): @@ -10467,7 +10466,7 @@ class VirtualMachineScaleSetNetworkProfile(_serialization.Model): :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :vartype health_probe: ~azure.mgmt.compute.v2019_07_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: @@ -10492,7 +10491,7 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :paramtype health_probe: ~azure.mgmt.compute.v2019_07_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: @@ -10649,10 +10648,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -10665,16 +10664,16 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -10682,10 +10681,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2019_07_01.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. @@ -10728,10 +10727,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -10744,16 +10743,16 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -10761,10 +10760,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2019_07_01.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. @@ -10957,9 +10956,9 @@ class VirtualMachineScaleSetSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.sku = None - self.capacity = None + self.resource_type: Optional[str] = None + self.sku: Optional["_models.Sku"] = None + self.capacity: Optional["_models.VirtualMachineScaleSetSkuCapacity"] = None class VirtualMachineScaleSetSkuCapacity(_serialization.Model): @@ -10996,10 +10995,10 @@ class VirtualMachineScaleSetSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default_capacity = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default_capacity: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.VirtualMachineScaleSetSkuScaleType"]] = None class VirtualMachineScaleSetStorageProfile(_serialization.Model): @@ -11013,12 +11012,12 @@ class VirtualMachineScaleSetStorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetOSDisk :ivar data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetDataDisk] """ @@ -11046,12 +11045,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetOSDisk :keyword data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetDataDisk] """ @@ -11409,7 +11408,7 @@ class VirtualMachineScaleSetUpdateNetworkProfile(_serialization.Model): # pylin :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :vartype health_probe: ~azure.mgmt.compute.v2019_07_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: @@ -11436,7 +11435,7 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :paramtype health_probe: ~azure.mgmt.compute.v2019_07_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: @@ -11799,10 +11798,10 @@ class VirtualMachineScaleSetVM(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :vartype availability_set: ~azure.mgmt.compute.v2019_07_01.models.SubResource @@ -11815,7 +11814,7 @@ class VirtualMachineScaleSetVM(Resource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar model_definition_applied: Specifies whether the model applied to the virtual machine is @@ -11926,10 +11925,10 @@ def __init__( # pylint: disable=too-many-locals machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :paramtype availability_set: ~azure.mgmt.compute.v2019_07_01.models.SubResource @@ -11940,7 +11939,7 @@ def __init__( # pylint: disable=too-many-locals element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str :keyword protection_policy: Specifies the protection policy of the virtual machine. @@ -11948,14 +11947,14 @@ def __init__( # pylint: disable=too-many-locals ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetVMProtectionPolicy """ super().__init__(location=location, tags=tags, **kwargs) - self.instance_id = None - self.sku = None + self.instance_id: Optional[str] = None + self.sku: Optional["_models.Sku"] = None self.plan = plan - self.resources = None - self.zones = None - self.latest_model_applied = None - self.vm_id = None - self.instance_view = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None + self.zones: Optional[List[str]] = None + self.latest_model_applied: Optional[bool] = None + self.vm_id: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineScaleSetVMInstanceView"] = None self.hardware_profile = hardware_profile self.storage_profile = storage_profile self.additional_capabilities = additional_capabilities @@ -11964,9 +11963,9 @@ def __init__( # pylint: disable=too-many-locals self.network_profile_configuration = network_profile_configuration self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.license_type = license_type - self.model_definition_applied = None + self.model_definition_applied: Optional[str] = None self.protection_policy = protection_policy @@ -11995,8 +11994,8 @@ class VirtualMachineScaleSetVMExtensionsSummary(_serialization.Model): # pylint def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.statuses_summary = None + self.name: Optional[str] = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetVMInstanceIDs(_serialization.Model): @@ -12153,7 +12152,7 @@ def __init__( self.maintenance_redeploy_status = maintenance_redeploy_status self.disks = disks self.extensions = extensions - self.vm_health = None + self.vm_health: Optional["_models.VirtualMachineHealthStatus"] = None self.boot_diagnostics = boot_diagnostics self.statuses = statuses self.placement_group_id = placement_group_id @@ -12252,7 +12251,7 @@ class VirtualMachineScaleSetVMProfile(_serialization.Model): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar priority: Specifies the priority for the virtual machines in the scale set. @@ -12327,7 +12326,7 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str :keyword priority: Specifies the priority for the virtual machines in the scale set. @@ -12507,8 +12506,8 @@ class VirtualMachineStatusCodeCount(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.count = None + self.code: Optional[str] = None + self.count: Optional[int] = None class VirtualMachineUpdate(UpdateResource): @@ -12547,10 +12546,10 @@ class VirtualMachineUpdate(UpdateResource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -12596,7 +12595,7 @@ class VirtualMachineUpdate(UpdateResource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and @@ -12690,10 +12689,10 @@ def __init__( machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -12735,7 +12734,7 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ @@ -12756,10 +12755,10 @@ def __init__( self.eviction_policy = eviction_policy self.billing_profile = billing_profile self.host = host - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None class VMScaleSetConvertToSinglePlacementGroupInput(_serialization.Model): # pylint: disable=name-too-long diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/operations/_operations.py index 88a9bafa05b9..1720e1bfda4b 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_07_01/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, List, Literal, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -77,7 +75,7 @@ def build_availability_sets_create_or_update_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -111,7 +109,7 @@ def build_availability_sets_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -141,7 +139,7 @@ def build_availability_sets_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -169,7 +167,7 @@ def build_availability_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -226,7 +224,7 @@ def build_availability_sets_list_request(resource_group_name: str, subscription_ _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -256,7 +254,7 @@ def build_availability_sets_list_available_sizes_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -288,7 +286,7 @@ def build_proximity_placement_groups_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -324,7 +322,7 @@ def build_proximity_placement_groups_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -356,7 +354,7 @@ def build_proximity_placement_groups_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -391,7 +389,7 @@ def build_proximity_placement_groups_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -456,7 +454,7 @@ def build_proximity_placement_groups_list_by_resource_group_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -487,7 +485,7 @@ def build_dedicated_host_groups_create_or_update_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -521,7 +519,7 @@ def build_dedicated_host_groups_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -551,7 +549,7 @@ def build_dedicated_host_groups_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -579,7 +577,7 @@ def build_dedicated_host_groups_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -610,7 +608,7 @@ def build_dedicated_host_groups_list_by_resource_group_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -667,7 +665,7 @@ def build_dedicated_hosts_create_or_update_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -702,7 +700,7 @@ def build_dedicated_hosts_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -733,7 +731,7 @@ def build_dedicated_hosts_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -768,7 +766,7 @@ def build_dedicated_hosts_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -802,7 +800,7 @@ def build_dedicated_hosts_list_by_host_group_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -833,7 +831,7 @@ def build_virtual_machine_extension_images_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -866,7 +864,7 @@ def build_virtual_machine_extension_images_list_types_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -905,7 +903,7 @@ def build_virtual_machine_extension_images_list_versions_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -944,7 +942,7 @@ def build_virtual_machine_extensions_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -979,7 +977,7 @@ def build_virtual_machine_extensions_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1010,7 +1008,7 @@ def build_virtual_machine_extensions_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1045,7 +1043,7 @@ def build_virtual_machine_extensions_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1079,7 +1077,7 @@ def build_virtual_machine_extensions_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1112,7 +1110,7 @@ def build_virtual_machine_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1155,7 +1153,7 @@ def build_virtual_machine_images_list_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1194,7 +1192,7 @@ def build_virtual_machine_images_list_offers_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1224,7 +1222,7 @@ def build_virtual_machine_images_list_publishers_request( # pylint: disable=nam # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1254,7 +1252,7 @@ def build_virtual_machine_images_list_skus_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1283,7 +1281,7 @@ def build_usage_list_request(location: str, subscription_id: str, **kwargs: Any) # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1313,7 +1311,7 @@ def build_virtual_machines_list_by_location_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1344,7 +1342,7 @@ def build_virtual_machines_capture_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1378,7 +1376,7 @@ def build_virtual_machines_create_or_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1412,7 +1410,7 @@ def build_virtual_machines_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1442,7 +1440,7 @@ def build_virtual_machines_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1475,7 +1473,7 @@ def build_virtual_machines_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1508,7 +1506,7 @@ def build_virtual_machines_instance_view_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1536,7 +1534,7 @@ def build_virtual_machines_convert_to_managed_disks_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1561,7 +1559,7 @@ def build_virtual_machines_deallocate_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1586,7 +1584,7 @@ def build_virtual_machines_generalize_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1612,7 +1610,7 @@ def build_virtual_machines_list_request(resource_group_name: str, subscription_i _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1670,7 +1668,7 @@ def build_virtual_machines_list_available_sizes_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1698,7 +1696,7 @@ def build_virtual_machines_power_off_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1728,7 +1726,7 @@ def build_virtual_machines_reapply_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reapply", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1756,7 +1754,7 @@ def build_virtual_machines_restart_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1781,7 +1779,7 @@ def build_virtual_machines_start_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1806,7 +1804,7 @@ def build_virtual_machines_redeploy_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1833,7 +1831,7 @@ def build_virtual_machines_reimage_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1862,7 +1860,7 @@ def build_virtual_machines_perform_maintenance_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1891,7 +1889,7 @@ def build_virtual_machines_run_command_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1921,7 +1919,7 @@ def build_virtual_machine_sizes_list_request(location: str, subscription_id: str # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1952,7 +1950,7 @@ def build_images_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -1986,7 +1984,7 @@ def build_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2016,7 +2014,7 @@ def build_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2044,7 +2042,7 @@ def build_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2077,7 +2075,7 @@ def build_images_list_by_resource_group_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2132,7 +2130,7 @@ def build_virtual_machine_scale_sets_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2166,7 +2164,7 @@ def build_virtual_machine_scale_sets_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2196,7 +2194,7 @@ def build_virtual_machine_scale_sets_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2224,7 +2222,7 @@ def build_virtual_machine_scale_sets_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2254,7 +2252,7 @@ def build_virtual_machine_scale_sets_deallocate_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2285,7 +2283,7 @@ def build_virtual_machine_scale_sets_delete_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2317,7 +2315,7 @@ def build_virtual_machine_scale_sets_get_instance_view_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2348,7 +2346,7 @@ def build_virtual_machine_scale_sets_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2406,7 +2404,7 @@ def build_virtual_machine_scale_sets_list_skus_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2437,7 +2435,7 @@ def build_virtual_machine_scale_sets_get_os_upgrade_history_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2472,7 +2470,7 @@ def build_virtual_machine_scale_sets_power_off_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2505,7 +2503,7 @@ def build_virtual_machine_scale_sets_restart_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2536,7 +2534,7 @@ def build_virtual_machine_scale_sets_start_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2567,7 +2565,7 @@ def build_virtual_machine_scale_sets_redeploy_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2598,7 +2596,7 @@ def build_virtual_machine_scale_sets_perform_maintenance_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2629,7 +2627,7 @@ def build_virtual_machine_scale_sets_update_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2660,7 +2658,7 @@ def build_virtual_machine_scale_sets_reimage_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2691,7 +2689,7 @@ def build_virtual_machine_scale_sets_reimage_all_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2728,7 +2726,7 @@ def build_virtual_machine_scale_sets_force_recovery_service_fabric_platform_upda _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2759,7 +2757,7 @@ def build_virtual_machine_scale_sets_convert_to_single_placement_group_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/convertToSinglePlacementGroup", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2792,7 +2790,7 @@ def build_virtual_machine_scale_set_extensions_create_or_update_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2827,7 +2825,7 @@ def build_virtual_machine_scale_set_extensions_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2858,7 +2856,7 @@ def build_virtual_machine_scale_set_extensions_delete_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2893,7 +2891,7 @@ def build_virtual_machine_scale_set_extensions_get_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2927,7 +2925,7 @@ def build_virtual_machine_scale_set_extensions_list_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2955,7 +2953,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_cancel_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2980,7 +2978,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_os_upgrade_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3005,7 +3003,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_extension_upgrade_req _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensionRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3033,7 +3031,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_get_latest_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3070,7 +3068,7 @@ def build_virtual_machine_scale_set_vm_extensions_create_or_update_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3111,7 +3109,7 @@ def build_virtual_machine_scale_set_vm_extensions_update_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3151,7 +3149,7 @@ def build_virtual_machine_scale_set_vm_extensions_delete_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3191,7 +3189,7 @@ def build_virtual_machine_scale_set_vm_extensions_get_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3232,7 +3230,7 @@ def build_virtual_machine_scale_set_vm_extensions_list_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3265,7 +3263,7 @@ def build_virtual_machine_scale_set_vms_reimage_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3295,7 +3293,7 @@ def build_virtual_machine_scale_set_vms_reimage_all_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3321,7 +3319,7 @@ def build_virtual_machine_scale_set_vms_deallocate_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3351,7 +3349,7 @@ def build_virtual_machine_scale_set_vms_update_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3382,7 +3380,7 @@ def build_virtual_machine_scale_set_vms_delete_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3417,7 +3415,7 @@ def build_virtual_machine_scale_set_vms_get_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3451,7 +3449,7 @@ def build_virtual_machine_scale_set_vms_get_instance_view_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3490,7 +3488,7 @@ def build_virtual_machine_scale_set_vms_list_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "virtualMachineScaleSetName": _SERIALIZER.url( @@ -3532,7 +3530,7 @@ def build_virtual_machine_scale_set_vms_power_off_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3560,7 +3558,7 @@ def build_virtual_machine_scale_set_vms_restart_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3586,7 +3584,7 @@ def build_virtual_machine_scale_set_vms_start_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3612,7 +3610,7 @@ def build_virtual_machine_scale_set_vms_redeploy_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3638,7 +3636,7 @@ def build_virtual_machine_scale_set_vms_perform_maintenance_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3668,7 +3666,7 @@ def build_virtual_machine_scale_set_vms_run_command_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3703,7 +3701,7 @@ def build_log_analytics_export_request_rate_by_interval_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -3736,7 +3734,7 @@ def build_log_analytics_export_throttled_requests_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -3769,7 +3767,7 @@ def build_disks_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3803,7 +3801,7 @@ def build_disks_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3836,7 +3834,7 @@ def build_disks_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3864,7 +3862,7 @@ def build_disks_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3892,7 +3890,7 @@ def build_disks_list_by_resource_group_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3947,7 +3945,7 @@ def build_disks_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3977,7 +3975,7 @@ def build_disks_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4006,7 +4004,7 @@ def build_snapshots_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4040,7 +4038,7 @@ def build_snapshots_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4073,7 +4071,7 @@ def build_snapshots_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4101,7 +4099,7 @@ def build_snapshots_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4129,7 +4127,7 @@ def build_snapshots_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4184,7 +4182,7 @@ def build_snapshots_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4214,7 +4212,7 @@ def build_snapshots_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4243,7 +4241,7 @@ def build_disk_encryption_sets_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4277,7 +4275,7 @@ def build_disk_encryption_sets_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4310,7 +4308,7 @@ def build_disk_encryption_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4341,7 +4339,7 @@ def build_disk_encryption_sets_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4372,7 +4370,7 @@ def build_disk_encryption_sets_list_by_resource_group_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4427,7 +4425,7 @@ def build_galleries_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4461,7 +4459,7 @@ def build_galleries_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4494,7 +4492,7 @@ def build_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4525,7 +4523,7 @@ def build_galleries_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4556,7 +4554,7 @@ def build_galleries_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4611,7 +4609,7 @@ def build_gallery_images_create_or_update_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4646,7 +4644,7 @@ def build_gallery_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4680,7 +4678,7 @@ def build_gallery_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4712,7 +4710,7 @@ def build_gallery_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4744,7 +4742,7 @@ def build_gallery_images_list_by_gallery_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4781,7 +4779,7 @@ def build_gallery_image_versions_create_or_update_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4822,7 +4820,7 @@ def build_gallery_image_versions_update_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4864,7 +4862,7 @@ def build_gallery_image_versions_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4904,7 +4902,7 @@ def build_gallery_image_versions_delete_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4937,7 +4935,7 @@ def build_gallery_image_versions_list_by_gallery_image_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4970,7 +4968,7 @@ def build_gallery_applications_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5005,7 +5003,7 @@ def build_gallery_applications_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5039,7 +5037,7 @@ def build_gallery_applications_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5071,7 +5069,7 @@ def build_gallery_applications_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5103,7 +5101,7 @@ def build_gallery_applications_list_by_gallery_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5140,7 +5138,7 @@ def build_gallery_application_versions_create_or_update_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5183,7 +5181,7 @@ def build_gallery_application_versions_update_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5227,7 +5225,7 @@ def build_gallery_application_versions_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5269,7 +5267,7 @@ def build_gallery_application_versions_delete_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5304,7 +5302,7 @@ def build_gallery_application_versions_list_by_gallery_application_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5335,7 +5333,7 @@ def build_virtual_machine_run_commands_list_request( # pylint: disable=name-too # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -5365,7 +5363,7 @@ def build_virtual_machine_run_commands_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "commandId": _SERIALIZER.url("command_id", command_id, "str"), @@ -5397,10 +5395,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5493,10 +5491,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -6114,10 +6112,10 @@ class ProximityPlacementGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -6668,10 +6666,10 @@ class DedicatedHostGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -7208,10 +7206,10 @@ class DedicatedHostsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -7891,10 +7889,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -8106,10 +8104,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -8784,10 +8782,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -9117,10 +9115,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -9216,10 +9214,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -11607,10 +11605,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -11706,10 +11704,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -12402,10 +12400,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -15469,10 +15467,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -16174,10 +16172,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _cancel_initial(self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any) -> Iterator[bytes]: @@ -16563,10 +16561,10 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -17275,10 +17273,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _reimage_initial( @@ -19035,10 +19033,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _export_request_rate_by_interval_initial( @@ -19407,10 +19405,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -20405,10 +20403,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -21413,10 +21411,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -22142,10 +22140,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -22846,10 +22844,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -23541,10 +23539,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -24319,10 +24317,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -25026,10 +25024,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -25809,10 +25807,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_compute_management_client.py index 33b3e2e11be7..865ff826045c 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( AvailabilitySetsOperations, DedicatedHostGroupsOperations, @@ -127,7 +129,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2019-12-01". Note that overriding this default value may result in unsupported behavior. @@ -137,15 +139,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -164,7 +168,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_metadata.json index 4dc03b6591fb..6352bfb5fb78 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node
    is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/aio/_compute_management_client.py index 53acd83300e4..4f4e70f369d7 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( AvailabilitySetsOperations, @@ -129,7 +131,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2019-12-01". Note that overriding this default value may result in unsupported behavior. @@ -139,15 +141,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -166,7 +170,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/aio/operations/_operations.py index 822f133c8a60..81292f33d9ed 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/aio/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,8 +6,8 @@ # 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 -import sys from typing import ( Any, AsyncIterable, @@ -25,6 +25,7 @@ ) import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -46,6 +47,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_availability_sets_create_or_update_request, build_availability_sets_delete_request, @@ -204,11 +206,8 @@ build_virtual_machines_start_request, build_virtual_machines_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -227,10 +226,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -323,10 +322,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -945,10 +944,10 @@ class ProximityPlacementGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -1497,10 +1496,10 @@ class DedicatedHostGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -2039,10 +2038,10 @@ class DedicatedHostsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2729,10 +2728,10 @@ class SshPublicKeysOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -3328,10 +3327,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3543,10 +3542,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -4221,10 +4220,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -4554,10 +4553,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4653,10 +4652,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7112,10 +7111,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7212,10 +7211,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -7908,10 +7907,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -9142,7 +9141,6 @@ async def get_next(next_link=None): def get_os_upgrade_history( self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any ) -> AsyncIterable["_models.UpgradeOperationHistoricalStatusInfo"]: - # pylint: disable=line-too-long """Gets list of OS upgrades on a VM scale set instance. :param resource_group_name: The name of the resource group. Required. @@ -11168,10 +11166,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -11873,10 +11871,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _cancel_initial( @@ -12266,10 +12264,10 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -12978,10 +12976,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _reimage_initial( @@ -14797,10 +14795,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _export_request_rate_by_interval_initial( @@ -15171,10 +15169,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -15325,10 +15323,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -16035,10 +16033,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -16731,10 +16729,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -17509,10 +17507,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -18217,10 +18215,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/models/_compute_management_client_enums.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/models/_compute_management_client_enums.py index 0373d6c581b0..4b5b90346ec3 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/models/_compute_management_client_enums.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/models/_compute_management_client_enums.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/models/_models_py3.py index 00be9471c26d..bf564e36a9b1 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,20 +7,15 @@ # 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, Literal, 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 +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] class AdditionalCapabilities(_serialization.Model): @@ -225,7 +220,7 @@ class AutomaticOSUpgradePolicy(_serialization.Model): applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false. :code:`
    `\\ :code:`
    ` If this is set to true for Windows based scale sets, `enableAutomaticUpdates - `_ # pylint: disable=line-too-long + `_ is automatically set to false and cannot be set to true. :vartype enable_automatic_os_upgrade: bool :ivar disable_automatic_rollback: Whether OS image rollback feature should be disabled. Default @@ -250,7 +245,7 @@ def __init__( applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false. :code:`
    `\\ :code:`
    ` If this is set to true for Windows based scale sets, `enableAutomaticUpdates - `_ # pylint: disable=line-too-long + `_ is automatically set to false and cannot be set to true. :paramtype enable_automatic_os_upgrade: bool :keyword disable_automatic_rollback: Whether OS image rollback feature should be disabled. @@ -368,9 +363,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -482,7 +477,7 @@ def __init__( self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines self.proximity_placement_group = proximity_placement_group - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class AvailabilitySetListResult(_serialization.Model): @@ -613,7 +608,7 @@ def __init__( self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines self.proximity_placement_group = proximity_placement_group - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class BillingProfile(_serialization.Model): @@ -719,9 +714,9 @@ class BootDiagnosticsInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None - self.status = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None + self.status: Optional["_models.InstanceViewStatus"] = None class ComputeOperationListResult(_serialization.Model): @@ -744,7 +739,7 @@ class ComputeOperationListResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.value = None + self.value: Optional[List["_models.ComputeOperationValue"]] = None class ComputeOperationValue(_serialization.Model): @@ -787,12 +782,12 @@ class ComputeOperationValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.origin = None - self.name = None - self.operation = None - self.resource = None - self.description = None - self.provider = None + self.origin: Optional[str] = None + self.name: Optional[str] = None + self.operation: Optional[str] = None + self.resource: Optional[str] = None + self.description: Optional[str] = None + self.provider: Optional[str] = None class DataDisk(_serialization.Model): @@ -938,8 +933,8 @@ def __init__( self.disk_size_gb = disk_size_gb self.managed_disk = managed_disk self.to_be_detached = to_be_detached - self.disk_iops_read_write = None - self.disk_m_bps_read_write = None + self.disk_iops_read_write: Optional[int] = None + self.disk_m_bps_read_write: Optional[int] = None class DataDiskImage(_serialization.Model): @@ -963,7 +958,7 @@ class DataDiskImage(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.lun = None + self.lun: Optional[int] = None class DiskImageEncryption(_serialization.Model): @@ -1137,12 +1132,12 @@ def __init__( self.sku = sku self.platform_fault_domain = platform_fault_domain self.auto_replace_on_failure = auto_replace_on_failure - self.host_id = None - self.virtual_machines = None + self.host_id: Optional[str] = None + self.virtual_machines: Optional[List["_models.SubResourceReadOnly"]] = None self.license_type = license_type - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.DedicatedHostInstanceView"] = None class DedicatedHostAllocatableVM(_serialization.Model): @@ -1273,7 +1268,7 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.zones = zones self.platform_fault_domain_count = platform_fault_domain_count - self.hosts = None + self.hosts: Optional[List["_models.SubResourceReadOnly"]] = None class DedicatedHostGroupListResult(_serialization.Model): @@ -1363,7 +1358,7 @@ def __init__( super().__init__(tags=tags, **kwargs) self.zones = zones self.platform_fault_domain_count = platform_fault_domain_count - self.hosts = None + self.hosts: Optional[List["_models.SubResourceReadOnly"]] = None class DedicatedHostInstanceView(_serialization.Model): @@ -1406,7 +1401,7 @@ def __init__( :paramtype statuses: list[~azure.mgmt.compute.v2019_12_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.asset_id = None + self.asset_id: Optional[str] = None self.available_capacity = available_capacity self.statuses = statuses @@ -1527,12 +1522,12 @@ def __init__( super().__init__(tags=tags, **kwargs) self.platform_fault_domain = platform_fault_domain self.auto_replace_on_failure = auto_replace_on_failure - self.host_id = None - self.virtual_machines = None + self.host_id: Optional[str] = None + self.virtual_machines: Optional[List["_models.SubResourceReadOnly"]] = None self.license_type = license_type - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.DedicatedHostInstanceView"] = None class DiagnosticsProfile(_serialization.Model): @@ -1849,7 +1844,7 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryPropertiesProvisioningState"]] = None class GalleryApplication(Resource): @@ -2027,9 +2022,9 @@ def __init__(self, *, tags: Optional[Dict[str, str]] = None, **kwargs: Any) -> N :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -2197,8 +2192,10 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[ + Union[str, "_models.GalleryApplicationVersionPropertiesProvisioningState"] + ] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryApplicationVersionList(_serialization.Model): @@ -2310,7 +2307,7 @@ def __init__( self.target_regions = target_regions self.replica_count = replica_count self.exclude_from_latest = exclude_from_latest - self.published_date = None + self.published_date: Optional[datetime.datetime] = None self.end_of_life_date = end_of_life_date self.storage_account_type = storage_account_type @@ -2480,8 +2477,10 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[ + Union[str, "_models.GalleryApplicationVersionPropertiesProvisioningState"] + ] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryArtifactSource(_serialization.Model): @@ -2571,7 +2570,7 @@ def __init__( :paramtype source: ~azure.mgmt.compute.v2019_12_01.models.GalleryArtifactVersionSource """ super().__init__(**kwargs) - self.size_in_gb = None + self.size_in_gb: Optional[int] = None self.host_caching = host_caching self.source = source @@ -2652,7 +2651,7 @@ class GalleryIdentifier(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.unique_name = None + self.unique_name: Optional[str] = None class GalleryImage(Resource): @@ -2813,7 +2812,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImagePropertiesProvisioningState"]] = None class GalleryImageIdentifier(_serialization.Model): @@ -3039,7 +3038,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImagePropertiesProvisioningState"]] = None class GalleryImageVersion(Resource): @@ -3117,9 +3116,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImageVersionPropertiesProvisioningState"]] = None self.storage_profile = storage_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryImageVersionList(_serialization.Model): @@ -3290,9 +3289,9 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImageVersionPropertiesProvisioningState"]] = None self.storage_profile = storage_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryList(_serialization.Model): @@ -3405,7 +3404,7 @@ def __init__( super().__init__(tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryPropertiesProvisioningState"]] = None class HardwareProfile(_serialization.Model): @@ -3413,7 +3412,7 @@ class HardwareProfile(_serialization.Model): :ivar vm_size: Specifies the size of the virtual machine. For more information about virtual machine sizes, see `Sizes for virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` The available VM sizes depend on region and availability set. For a list of available sizes use these APIs: :code:`
    `\\ :code:`
    ` `List all available virtual machine sizes in an availability set @@ -3470,7 +3469,7 @@ def __init__( """ :keyword vm_size: Specifies the size of the virtual machine. For more information about virtual machine sizes, see `Sizes for virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` The available VM sizes depend on region and availability set. For a list of available sizes use these APIs: :code:`
    `\\ :code:`
    ` `List all available virtual machine sizes in an availability set @@ -3598,7 +3597,7 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.hyper_v_generation = hyper_v_generation @@ -4065,7 +4064,7 @@ def __init__( self.offer = offer self.sku = sku self.version = version - self.exact_version = None + self.exact_version: Optional[str] = None class ImageStorageProfile(_serialization.Model): @@ -4074,12 +4073,12 @@ class ImageStorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2019_12_01.models.ImageOSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2019_12_01.models.ImageDataDisk] :ivar zone_resilient: Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). @@ -4104,12 +4103,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2019_12_01.models.ImageOSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2019_12_01.models.ImageDataDisk] :keyword zone_resilient: Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). @@ -4176,7 +4175,7 @@ def __init__( super().__init__(tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.hyper_v_generation = hyper_v_generation @@ -4504,7 +4503,7 @@ class LogAnalyticsOperationResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None + self.properties: Optional["_models.LogAnalyticsOutput"] = None class LogAnalyticsOutput(_serialization.Model): @@ -4527,7 +4526,7 @@ class LogAnalyticsOutput(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.output = None + self.output: Optional[str] = None class MaintenanceRedeployStatus(_serialization.Model): @@ -4803,8 +4802,8 @@ class OrchestrationServiceSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.service_name = None - self.service_state = None + self.service_name: Optional[Union[str, "_models.OrchestrationServiceNames"]] = None + self.service_state: Optional[Union[str, "_models.OrchestrationServiceState"]] = None class OSDisk(_serialization.Model): @@ -4997,7 +4996,7 @@ class OSProfile(_serialization.Model): **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :vartype computer_name: str :ivar admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` This property cannot be updated after the VM is created. :code:`
    `\\ @@ -5010,10 +5009,10 @@ class OSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -5026,10 +5025,10 @@ class OSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum @@ -5040,7 +5039,7 @@ class OSProfile(_serialization.Model): `_ :code:`
    `\\ :code:`
    ` For using cloud-init for your Linux VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -5048,10 +5047,10 @@ class OSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2019_12_01.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machine. :vartype secrets: list[~azure.mgmt.compute.v2019_12_01.models.VaultSecretGroup] @@ -5096,7 +5095,7 @@ def __init__( **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :paramtype computer_name: str :keyword admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` This property cannot be updated after the VM is created. :code:`
    `\\ @@ -5109,10 +5108,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -5125,10 +5124,10 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum @@ -5139,7 +5138,7 @@ def __init__( `_ :code:`
    `\\ :code:`
    ` For using cloud-init for your Linux VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -5147,10 +5146,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2019_12_01.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machine. @@ -5317,9 +5316,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.proximity_placement_group_type = proximity_placement_group_type - self.virtual_machines = None - self.virtual_machine_scale_sets = None - self.availability_sets = None + self.virtual_machines: Optional[List["_models.SubResourceWithColocationStatus"]] = None + self.virtual_machine_scale_sets: Optional[List["_models.SubResourceWithColocationStatus"]] = None + self.availability_sets: Optional[List["_models.SubResourceWithColocationStatus"]] = None self.colocation_status = colocation_status @@ -5465,8 +5464,8 @@ class RecoveryWalkResponse(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.walk_performed = None - self.next_platform_update_domain = None + self.walk_performed: Optional[bool] = None + self.next_platform_update_domain: Optional[int] = None class RegionalReplicationStatus(_serialization.Model): @@ -5502,10 +5501,10 @@ class RegionalReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.region = None - self.state = None - self.details = None - self.progress = None + self.region: Optional[str] = None + self.state: Optional[Union[str, "_models.ReplicationState"]] = None + self.details: Optional[str] = None + self.progress: Optional[int] = None class ReplicationStatus(_serialization.Model): @@ -5534,8 +5533,8 @@ class ReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.aggregated_state = None - self.summary = None + self.aggregated_state: Optional[Union[str, "_models.AggregatedReplicationState"]] = None + self.summary: Optional[List["_models.RegionalReplicationStatus"]] = None class RequestRateByIntervalInput(LogAnalyticsInputBase): @@ -5681,9 +5680,9 @@ class RollbackStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successfully_rolledback_instance_count = None - self.failed_rolledback_instance_count = None - self.rollback_error = None + self.successfully_rolledback_instance_count: Optional[int] = None + self.failed_rolledback_instance_count: Optional[int] = None + self.rollback_error: Optional["_models.ApiError"] = None class RollingUpgradePolicy(_serialization.Model): @@ -5795,10 +5794,10 @@ class RollingUpgradeProgressInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successful_instance_count = None - self.failed_instance_count = None - self.in_progress_instance_count = None - self.pending_instance_count = None + self.successful_instance_count: Optional[int] = None + self.failed_instance_count: Optional[int] = None + self.in_progress_instance_count: Optional[int] = None + self.pending_instance_count: Optional[int] = None class RollingUpgradeRunningStatus(_serialization.Model): @@ -5835,10 +5834,10 @@ class RollingUpgradeRunningStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.last_action = None - self.last_action_time = None + self.code: Optional[Union[str, "_models.RollingUpgradeStatusCode"]] = None + self.start_time: Optional[datetime.datetime] = None + self.last_action: Optional[Union[str, "_models.RollingUpgradeActionType"]] = None + self.last_action_time: Optional[datetime.datetime] = None class RollingUpgradeStatusInfo(Resource): @@ -5900,10 +5899,10 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(location=location, tags=tags, **kwargs) - self.policy = None - self.running_status = None - self.progress = None - self.error = None + self.policy: Optional["_models.RollingUpgradePolicy"] = None + self.running_status: Optional["_models.RollingUpgradeRunningStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None class RunCommandDocumentBase(_serialization.Model): @@ -6376,7 +6375,7 @@ class SshPublicKey(_serialization.Model): :ivar key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :vartype key_data: str """ @@ -6394,7 +6393,7 @@ def __init__(self, *, path: Optional[str] = None, key_data: Optional[str] = None :keyword key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :paramtype key_data: str """ super().__init__(**kwargs) @@ -6415,7 +6414,7 @@ class SshPublicKeyGenerateKeyPairResult(_serialization.Model): through ssh. The public key is in ssh-rsa format. Required. :vartype public_key: str :ivar id: The ARM resource id in the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. Required. :vartype id: str """ @@ -6444,7 +6443,7 @@ def __init__( machine through ssh. The public key is in ssh-rsa format. Required. :paramtype public_key: str :keyword id: The ARM resource id in the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. Required. :paramtype id: str """ @@ -6592,12 +6591,12 @@ class StorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2019_12_01.models.OSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2019_12_01.models.DataDisk] """ @@ -6624,12 +6623,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2019_12_01.models.OSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2019_12_01.models.DataDisk] """ super().__init__(**kwargs) @@ -6658,7 +6657,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SubResourceWithColocationStatus(SubResource): @@ -6839,9 +6838,9 @@ class UpgradeOperationHistoricalStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None - self.type = None - self.location = None + self.properties: Optional["_models.UpgradeOperationHistoricalStatusInfoProperties"] = None + self.type: Optional[str] = None + self.location: Optional[str] = None class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # pylint: disable=name-too-long @@ -6885,12 +6884,12 @@ class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # p def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.running_status = None - self.progress = None - self.error = None - self.started_by = None - self.target_image_reference = None - self.rollback_info = None + self.running_status: Optional["_models.UpgradeOperationHistoryStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None + self.started_by: Optional[Union[str, "_models.UpgradeOperationInvoker"]] = None + self.target_image_reference: Optional["_models.ImageReference"] = None + self.rollback_info: Optional["_models.RollbackStatusInfo"] = None class UpgradeOperationHistoryStatus(_serialization.Model): @@ -6922,9 +6921,9 @@ class UpgradeOperationHistoryStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.end_time = None + self.code: Optional[Union[str, "_models.UpgradeState"]] = None + self.start_time: Optional[datetime.datetime] = None + self.end_time: Optional[datetime.datetime] = None class UpgradePolicy(_serialization.Model): @@ -7164,8 +7163,8 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None class VaultCertificate(_serialization.Model): @@ -7323,10 +7322,10 @@ class VirtualMachine(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -7373,7 +7372,7 @@ class VirtualMachine(Resource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and @@ -7480,10 +7479,10 @@ def __init__( # pylint: disable=too-many-locals machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -7526,13 +7525,13 @@ def __init__( # pylint: disable=too-many-locals element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ super().__init__(location=location, tags=tags, **kwargs) self.plan = plan - self.resources = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None self.identity = identity self.zones = zones self.hardware_profile = hardware_profile @@ -7548,10 +7547,10 @@ def __init__( # pylint: disable=too-many-locals self.eviction_policy = eviction_policy self.billing_profile = billing_profile self.host = host - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None class VirtualMachineAgentInstanceView(_serialization.Model): @@ -7677,10 +7676,10 @@ def __init__(self, *, id: Optional[str] = None, **kwargs: Any) -> None: # pylin :paramtype id: str """ super().__init__(id=id, **kwargs) - self.schema = None - self.content_version = None - self.parameters = None - self.resources = None + self.schema: Optional[str] = None + self.content_version: Optional[str] = None + self.parameters: Optional[JSON] = None + self.resources: Optional[List[JSON]] = None class VirtualMachineExtension(Resource): @@ -7802,7 +7801,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view @@ -8110,7 +8109,7 @@ class VirtualMachineHealthStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None + self.status: Optional["_models.InstanceViewStatus"] = None class VirtualMachineIdentity(_serialization.Model): @@ -8131,7 +8130,7 @@ class VirtualMachineIdentity(_serialization.Model): :vartype type: str or ~azure.mgmt.compute.v2019_12_01.models.ResourceIdentityType :ivar user_assigned_identities: The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2019_12_01.models.UserAssignedIdentitiesValue] """ @@ -8163,13 +8162,13 @@ def __init__( :paramtype type: str or ~azure.mgmt.compute.v2019_12_01.models.ResourceIdentityType :keyword user_assigned_identities: The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2019_12_01.models.UserAssignedIdentitiesValue] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.user_assigned_identities = user_assigned_identities @@ -8707,10 +8706,10 @@ def __init__( self.upgrade_policy = upgrade_policy self.automatic_repairs_policy = automatic_repairs_policy self.virtual_machine_profile = virtual_machine_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.overprovision = overprovision self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms - self.unique_id = None + self.unique_id: Optional[str] = None self.single_placement_group = single_placement_group self.zone_balance = zone_balance self.platform_fault_domain_count = platform_fault_domain_count @@ -8937,7 +8936,7 @@ def __init__( """ super().__init__(**kwargs) self.name = name - self.type = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -8945,7 +8944,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.provision_after_extensions = provision_after_extensions @@ -9106,8 +9105,8 @@ def __init__( :paramtype provision_after_extensions: list[str] """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -9115,7 +9114,7 @@ def __init__( self.auto_upgrade_minor_version = auto_upgrade_minor_version self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.provision_after_extensions = provision_after_extensions @@ -9138,7 +9137,7 @@ class VirtualMachineScaleSetIdentity(_serialization.Model): :vartype type: str or ~azure.mgmt.compute.v2019_12_01.models.ResourceIdentityType :ivar user_assigned_identities: The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2019_12_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue] """ @@ -9177,13 +9176,13 @@ def __init__( :keyword user_assigned_identities: The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2019_12_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.user_assigned_identities = user_assigned_identities @@ -9212,8 +9211,8 @@ class VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue(_serialization.M def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None class VirtualMachineScaleSetInstanceView(_serialization.Model): @@ -9253,10 +9252,10 @@ def __init__(self, *, statuses: Optional[List["_models.InstanceViewStatus"]] = N :paramtype statuses: list[~azure.mgmt.compute.v2019_12_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.virtual_machine = None - self.extensions = None + self.virtual_machine: Optional["_models.VirtualMachineScaleSetInstanceViewStatusesSummary"] = None + self.extensions: Optional[List["_models.VirtualMachineScaleSetVMExtensionsSummary"]] = None self.statuses = statuses - self.orchestration_services = None + self.orchestration_services: Optional[List["_models.OrchestrationServiceSummary"]] = None class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): # pylint: disable=name-too-long @@ -9280,7 +9279,7 @@ class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.statuses_summary = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetIPConfiguration(SubResource): @@ -9750,7 +9749,7 @@ class VirtualMachineScaleSetNetworkProfile(_serialization.Model): :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :vartype health_probe: ~azure.mgmt.compute.v2019_12_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: @@ -9775,7 +9774,7 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :paramtype health_probe: ~azure.mgmt.compute.v2019_12_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: @@ -9932,10 +9931,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -9948,16 +9947,16 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -9965,10 +9964,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2019_12_01.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. @@ -10011,10 +10010,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -10027,16 +10026,16 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -10044,10 +10043,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2019_12_01.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. @@ -10240,9 +10239,9 @@ class VirtualMachineScaleSetSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.sku = None - self.capacity = None + self.resource_type: Optional[str] = None + self.sku: Optional["_models.Sku"] = None + self.capacity: Optional["_models.VirtualMachineScaleSetSkuCapacity"] = None class VirtualMachineScaleSetSkuCapacity(_serialization.Model): @@ -10279,10 +10278,10 @@ class VirtualMachineScaleSetSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default_capacity = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default_capacity: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.VirtualMachineScaleSetSkuScaleType"]] = None class VirtualMachineScaleSetStorageProfile(_serialization.Model): @@ -10296,12 +10295,12 @@ class VirtualMachineScaleSetStorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2019_12_01.models.VirtualMachineScaleSetOSDisk :ivar data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2019_12_01.models.VirtualMachineScaleSetDataDisk] """ @@ -10329,12 +10328,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2019_12_01.models.VirtualMachineScaleSetOSDisk :keyword data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2019_12_01.models.VirtualMachineScaleSetDataDisk] """ @@ -10694,7 +10693,7 @@ class VirtualMachineScaleSetUpdateNetworkProfile(_serialization.Model): # pylin :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :vartype health_probe: ~azure.mgmt.compute.v2019_12_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: @@ -10721,7 +10720,7 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :paramtype health_probe: ~azure.mgmt.compute.v2019_12_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: @@ -11084,10 +11083,10 @@ class VirtualMachineScaleSetVM(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :vartype availability_set: ~azure.mgmt.compute.v2019_12_01.models.SubResource @@ -11100,7 +11099,7 @@ class VirtualMachineScaleSetVM(Resource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar model_definition_applied: Specifies whether the model applied to the virtual machine is @@ -11211,10 +11210,10 @@ def __init__( # pylint: disable=too-many-locals machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :paramtype availability_set: ~azure.mgmt.compute.v2019_12_01.models.SubResource @@ -11225,7 +11224,7 @@ def __init__( # pylint: disable=too-many-locals element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str :keyword protection_policy: Specifies the protection policy of the virtual machine. @@ -11233,14 +11232,14 @@ def __init__( # pylint: disable=too-many-locals ~azure.mgmt.compute.v2019_12_01.models.VirtualMachineScaleSetVMProtectionPolicy """ super().__init__(location=location, tags=tags, **kwargs) - self.instance_id = None - self.sku = None + self.instance_id: Optional[str] = None + self.sku: Optional["_models.Sku"] = None self.plan = plan - self.resources = None - self.zones = None - self.latest_model_applied = None - self.vm_id = None - self.instance_view = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None + self.zones: Optional[List[str]] = None + self.latest_model_applied: Optional[bool] = None + self.vm_id: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineScaleSetVMInstanceView"] = None self.hardware_profile = hardware_profile self.storage_profile = storage_profile self.additional_capabilities = additional_capabilities @@ -11249,9 +11248,9 @@ def __init__( # pylint: disable=too-many-locals self.network_profile_configuration = network_profile_configuration self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.license_type = license_type - self.model_definition_applied = None + self.model_definition_applied: Optional[str] = None self.protection_policy = protection_policy @@ -11280,8 +11279,8 @@ class VirtualMachineScaleSetVMExtensionsSummary(_serialization.Model): # pylint def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.statuses_summary = None + self.name: Optional[str] = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetVMInstanceIDs(_serialization.Model): @@ -11438,7 +11437,7 @@ def __init__( self.maintenance_redeploy_status = maintenance_redeploy_status self.disks = disks self.extensions = extensions - self.vm_health = None + self.vm_health: Optional["_models.VirtualMachineHealthStatus"] = None self.boot_diagnostics = boot_diagnostics self.statuses = statuses self.placement_group_id = placement_group_id @@ -11537,7 +11536,7 @@ class VirtualMachineScaleSetVMProfile(_serialization.Model): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar priority: Specifies the priority for the virtual machines in the scale set. @@ -11613,7 +11612,7 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str :keyword priority: Specifies the priority for the virtual machines in the scale set. @@ -11794,8 +11793,8 @@ class VirtualMachineStatusCodeCount(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.count = None + self.code: Optional[str] = None + self.count: Optional[int] = None class VirtualMachineUpdate(UpdateResource): @@ -11834,10 +11833,10 @@ class VirtualMachineUpdate(UpdateResource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -11884,7 +11883,7 @@ class VirtualMachineUpdate(UpdateResource): element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype license_type: str :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and @@ -11978,10 +11977,10 @@ def __init__( machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -12024,7 +12023,7 @@ def __init__( element is included in a request for an update, the value must match the initial value. This value cannot be updated. :code:`
    `\\ :code:`
    ` For more information, see `Azure Hybrid Use Benefit for Windows Server - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype license_type: str """ @@ -12045,10 +12044,10 @@ def __init__( self.eviction_policy = eviction_policy self.billing_profile = billing_profile self.host = host - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None class VMScaleSetConvertToSinglePlacementGroupInput(_serialization.Model): # pylint: disable=name-too-long diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/operations/_operations.py index 5f588b38cbf4..4e1973feee1f 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2019_12_01/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, List, Literal, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -77,7 +75,7 @@ def build_availability_sets_create_or_update_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -111,7 +109,7 @@ def build_availability_sets_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -141,7 +139,7 @@ def build_availability_sets_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -169,7 +167,7 @@ def build_availability_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -226,7 +224,7 @@ def build_availability_sets_list_request(resource_group_name: str, subscription_ _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -256,7 +254,7 @@ def build_availability_sets_list_available_sizes_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -288,7 +286,7 @@ def build_proximity_placement_groups_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -324,7 +322,7 @@ def build_proximity_placement_groups_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -356,7 +354,7 @@ def build_proximity_placement_groups_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -391,7 +389,7 @@ def build_proximity_placement_groups_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -456,7 +454,7 @@ def build_proximity_placement_groups_list_by_resource_group_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -487,7 +485,7 @@ def build_dedicated_host_groups_create_or_update_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -521,7 +519,7 @@ def build_dedicated_host_groups_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -551,7 +549,7 @@ def build_dedicated_host_groups_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -579,7 +577,7 @@ def build_dedicated_host_groups_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -610,7 +608,7 @@ def build_dedicated_host_groups_list_by_resource_group_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -667,7 +665,7 @@ def build_dedicated_hosts_create_or_update_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -702,7 +700,7 @@ def build_dedicated_hosts_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -733,7 +731,7 @@ def build_dedicated_hosts_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -768,7 +766,7 @@ def build_dedicated_hosts_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -802,7 +800,7 @@ def build_dedicated_hosts_list_by_host_group_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -859,7 +857,7 @@ def build_ssh_public_keys_list_by_resource_group_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -890,7 +888,7 @@ def build_ssh_public_keys_create_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -924,7 +922,7 @@ def build_ssh_public_keys_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -954,7 +952,7 @@ def build_ssh_public_keys_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -982,7 +980,7 @@ def build_ssh_public_keys_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -1013,7 +1011,7 @@ def build_ssh_public_keys_generate_key_pair_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}/generateKeyPair", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -1044,7 +1042,7 @@ def build_virtual_machine_extension_images_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1077,7 +1075,7 @@ def build_virtual_machine_extension_images_list_types_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1116,7 +1114,7 @@ def build_virtual_machine_extension_images_list_versions_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1155,7 +1153,7 @@ def build_virtual_machine_extensions_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1190,7 +1188,7 @@ def build_virtual_machine_extensions_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1221,7 +1219,7 @@ def build_virtual_machine_extensions_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1256,7 +1254,7 @@ def build_virtual_machine_extensions_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1290,7 +1288,7 @@ def build_virtual_machine_extensions_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1323,7 +1321,7 @@ def build_virtual_machine_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1366,7 +1364,7 @@ def build_virtual_machine_images_list_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1405,7 +1403,7 @@ def build_virtual_machine_images_list_offers_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1435,7 +1433,7 @@ def build_virtual_machine_images_list_publishers_request( # pylint: disable=nam # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1465,7 +1463,7 @@ def build_virtual_machine_images_list_skus_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1494,7 +1492,7 @@ def build_usage_list_request(location: str, subscription_id: str, **kwargs: Any) # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1524,7 +1522,7 @@ def build_virtual_machines_list_by_location_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1555,7 +1553,7 @@ def build_virtual_machines_capture_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1589,7 +1587,7 @@ def build_virtual_machines_create_or_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1623,7 +1621,7 @@ def build_virtual_machines_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1653,7 +1651,7 @@ def build_virtual_machines_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1686,7 +1684,7 @@ def build_virtual_machines_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1719,7 +1717,7 @@ def build_virtual_machines_instance_view_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1747,7 +1745,7 @@ def build_virtual_machines_convert_to_managed_disks_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1772,7 +1770,7 @@ def build_virtual_machines_deallocate_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1797,7 +1795,7 @@ def build_virtual_machines_generalize_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1823,7 +1821,7 @@ def build_virtual_machines_list_request(resource_group_name: str, subscription_i _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1881,7 +1879,7 @@ def build_virtual_machines_list_available_sizes_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1909,7 +1907,7 @@ def build_virtual_machines_power_off_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1939,7 +1937,7 @@ def build_virtual_machines_reapply_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reapply", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1967,7 +1965,7 @@ def build_virtual_machines_restart_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1992,7 +1990,7 @@ def build_virtual_machines_start_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2017,7 +2015,7 @@ def build_virtual_machines_redeploy_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2044,7 +2042,7 @@ def build_virtual_machines_reimage_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2073,7 +2071,7 @@ def build_virtual_machines_perform_maintenance_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2098,7 +2096,7 @@ def build_virtual_machines_simulate_eviction_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2127,7 +2125,7 @@ def build_virtual_machines_run_command_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2157,7 +2155,7 @@ def build_virtual_machine_sizes_list_request(location: str, subscription_id: str # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2188,7 +2186,7 @@ def build_images_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2222,7 +2220,7 @@ def build_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2252,7 +2250,7 @@ def build_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2280,7 +2278,7 @@ def build_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2313,7 +2311,7 @@ def build_images_list_by_resource_group_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2368,7 +2366,7 @@ def build_virtual_machine_scale_sets_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2402,7 +2400,7 @@ def build_virtual_machine_scale_sets_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2432,7 +2430,7 @@ def build_virtual_machine_scale_sets_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2460,7 +2458,7 @@ def build_virtual_machine_scale_sets_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2490,7 +2488,7 @@ def build_virtual_machine_scale_sets_deallocate_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2521,7 +2519,7 @@ def build_virtual_machine_scale_sets_delete_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2553,7 +2551,7 @@ def build_virtual_machine_scale_sets_get_instance_view_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2584,7 +2582,7 @@ def build_virtual_machine_scale_sets_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2642,7 +2640,7 @@ def build_virtual_machine_scale_sets_list_skus_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2673,7 +2671,7 @@ def build_virtual_machine_scale_sets_get_os_upgrade_history_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2708,7 +2706,7 @@ def build_virtual_machine_scale_sets_power_off_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2741,7 +2739,7 @@ def build_virtual_machine_scale_sets_restart_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2772,7 +2770,7 @@ def build_virtual_machine_scale_sets_start_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2803,7 +2801,7 @@ def build_virtual_machine_scale_sets_redeploy_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2834,7 +2832,7 @@ def build_virtual_machine_scale_sets_perform_maintenance_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2865,7 +2863,7 @@ def build_virtual_machine_scale_sets_update_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2896,7 +2894,7 @@ def build_virtual_machine_scale_sets_reimage_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2927,7 +2925,7 @@ def build_virtual_machine_scale_sets_reimage_all_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2964,7 +2962,7 @@ def build_virtual_machine_scale_sets_force_recovery_service_fabric_platform_upda _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2995,7 +2993,7 @@ def build_virtual_machine_scale_sets_convert_to_single_placement_group_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/convertToSinglePlacementGroup", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3026,7 +3024,7 @@ def build_virtual_machine_scale_sets_set_orchestration_service_state_request( # _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/setOrchestrationServiceState", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3059,7 +3057,7 @@ def build_virtual_machine_scale_set_extensions_create_or_update_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3094,7 +3092,7 @@ def build_virtual_machine_scale_set_extensions_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3125,7 +3123,7 @@ def build_virtual_machine_scale_set_extensions_delete_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3160,7 +3158,7 @@ def build_virtual_machine_scale_set_extensions_get_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3194,7 +3192,7 @@ def build_virtual_machine_scale_set_extensions_list_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3222,7 +3220,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_cancel_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3247,7 +3245,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_os_upgrade_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3272,7 +3270,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_extension_upgrade_req _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensionRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3300,7 +3298,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_get_latest_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3337,7 +3335,7 @@ def build_virtual_machine_scale_set_vm_extensions_create_or_update_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3378,7 +3376,7 @@ def build_virtual_machine_scale_set_vm_extensions_update_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3418,7 +3416,7 @@ def build_virtual_machine_scale_set_vm_extensions_delete_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3458,7 +3456,7 @@ def build_virtual_machine_scale_set_vm_extensions_get_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3499,7 +3497,7 @@ def build_virtual_machine_scale_set_vm_extensions_list_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3532,7 +3530,7 @@ def build_virtual_machine_scale_set_vms_reimage_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3562,7 +3560,7 @@ def build_virtual_machine_scale_set_vms_reimage_all_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3588,7 +3586,7 @@ def build_virtual_machine_scale_set_vms_deallocate_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3618,7 +3616,7 @@ def build_virtual_machine_scale_set_vms_update_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3649,7 +3647,7 @@ def build_virtual_machine_scale_set_vms_delete_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3684,7 +3682,7 @@ def build_virtual_machine_scale_set_vms_get_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3718,7 +3716,7 @@ def build_virtual_machine_scale_set_vms_get_instance_view_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3757,7 +3755,7 @@ def build_virtual_machine_scale_set_vms_list_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "virtualMachineScaleSetName": _SERIALIZER.url( @@ -3799,7 +3797,7 @@ def build_virtual_machine_scale_set_vms_power_off_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3827,7 +3825,7 @@ def build_virtual_machine_scale_set_vms_restart_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3853,7 +3851,7 @@ def build_virtual_machine_scale_set_vms_start_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3879,7 +3877,7 @@ def build_virtual_machine_scale_set_vms_redeploy_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3905,7 +3903,7 @@ def build_virtual_machine_scale_set_vms_perform_maintenance_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3931,7 +3929,7 @@ def build_virtual_machine_scale_set_vms_simulate_eviction_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/simulateEviction", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3961,7 +3959,7 @@ def build_virtual_machine_scale_set_vms_run_command_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3996,7 +3994,7 @@ def build_log_analytics_export_request_rate_by_interval_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -4029,7 +4027,7 @@ def build_log_analytics_export_throttled_requests_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -4060,7 +4058,7 @@ def build_virtual_machine_run_commands_list_request( # pylint: disable=name-too # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -4090,7 +4088,7 @@ def build_virtual_machine_run_commands_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "commandId": _SERIALIZER.url("command_id", command_id, "str"), @@ -4122,7 +4120,7 @@ def build_galleries_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4156,7 +4154,7 @@ def build_galleries_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4189,7 +4187,7 @@ def build_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4220,7 +4218,7 @@ def build_galleries_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4251,7 +4249,7 @@ def build_galleries_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4306,7 +4304,7 @@ def build_gallery_images_create_or_update_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4341,7 +4339,7 @@ def build_gallery_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4375,7 +4373,7 @@ def build_gallery_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4407,7 +4405,7 @@ def build_gallery_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4439,7 +4437,7 @@ def build_gallery_images_list_by_gallery_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4476,7 +4474,7 @@ def build_gallery_image_versions_create_or_update_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4517,7 +4515,7 @@ def build_gallery_image_versions_update_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4559,7 +4557,7 @@ def build_gallery_image_versions_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4599,7 +4597,7 @@ def build_gallery_image_versions_delete_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4632,7 +4630,7 @@ def build_gallery_image_versions_list_by_gallery_image_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4665,7 +4663,7 @@ def build_gallery_applications_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4700,7 +4698,7 @@ def build_gallery_applications_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4734,7 +4732,7 @@ def build_gallery_applications_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4766,7 +4764,7 @@ def build_gallery_applications_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4798,7 +4796,7 @@ def build_gallery_applications_list_by_gallery_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4835,7 +4833,7 @@ def build_gallery_application_versions_create_or_update_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4878,7 +4876,7 @@ def build_gallery_application_versions_update_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4922,7 +4920,7 @@ def build_gallery_application_versions_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4964,7 +4962,7 @@ def build_gallery_application_versions_delete_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -4999,7 +4997,7 @@ def build_gallery_application_versions_list_by_gallery_application_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5032,10 +5030,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5128,10 +5126,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -5749,10 +5747,10 @@ class ProximityPlacementGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -6303,10 +6301,10 @@ class DedicatedHostGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -6843,10 +6841,10 @@ class DedicatedHostsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -7526,10 +7524,10 @@ class SshPublicKeysOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -8125,10 +8123,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -8340,10 +8338,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -9018,10 +9016,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -9351,10 +9349,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -9450,10 +9448,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -11894,10 +11892,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -11993,10 +11991,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -12689,10 +12687,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -15942,10 +15940,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -16647,10 +16645,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _cancel_initial(self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any) -> Iterator[bytes]: @@ -17036,10 +17034,10 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -17748,10 +17746,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _reimage_initial( @@ -19564,10 +19562,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _export_request_rate_by_interval_initial( @@ -19936,10 +19934,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -20090,10 +20088,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -20794,10 +20792,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -21489,10 +21487,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -22267,10 +22265,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -22974,10 +22972,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_compute_management_client.py index d917f96f37a4..f06c113d57f2 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import DiskAccessesOperations, DiskEncryptionSetsOperations, DisksOperations, SnapshotsOperations if TYPE_CHECKING: @@ -41,7 +43,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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-05-01". Note that overriding this default value may result in unsupported behavior. @@ -51,15 +53,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -78,7 +82,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_metadata.json index 9c8456602c4b..148fd0b9b794 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node
    is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/aio/_compute_management_client.py index 316f5a911c5f..dd4167fc08ee 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import DiskAccessesOperations, DiskEncryptionSetsOperations, DisksOperations, SnapshotsOperations @@ -41,7 +43,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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-05-01". Note that overriding this default value may result in unsupported behavior. @@ -51,15 +53,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -78,7 +82,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/aio/operations/_operations.py index c742c2ba1bac..a26bea387c5c 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/aio/operations/_operations.py @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_disk_accesses_create_or_update_request, build_disk_accesses_delete_request, @@ -63,11 +65,8 @@ build_snapshots_revoke_access_request, build_snapshots_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -86,10 +85,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1091,10 +1090,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2116,10 +2115,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2859,10 +2858,10 @@ class DiskAccessesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/models/_models_py3.py index f6e5cf75345f..eaf234c495de 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/models/_models_py3.py @@ -9,7 +9,7 @@ from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union -from ... import _serialization +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models @@ -35,7 +35,7 @@ class AccessUri(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.access_sas = None + self.access_sas: Optional[str] = None class ApiError(_serialization.Model): @@ -220,7 +220,7 @@ def __init__( self.gallery_image_reference = gallery_image_reference self.source_uri = source_uri self.source_resource_id = source_resource_id - self.source_unique_id = None + self.source_unique_id: Optional[str] = None self.upload_size_bytes = upload_size_bytes @@ -266,9 +266,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -487,27 +487,27 @@ def __init__( # pylint: disable=too-many-locals :paramtype disk_access_id: str """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None - self.managed_by_extended = None + self.managed_by: Optional[str] = None + self.managed_by_extended: Optional[List[str]] = None self.sku = sku self.zones = zones - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.disk_iops_read_write = disk_iops_read_write self.disk_m_bps_read_write = disk_m_bps_read_write self.disk_iops_read_only = disk_iops_read_only self.disk_m_bps_read_only = disk_m_bps_read_only - self.disk_state = None + self.disk_state: Optional[Union[str, "_models.DiskState"]] = None self.encryption = encryption self.max_shares = max_shares - self.share_info = None + self.share_info: Optional[List["_models.ShareInfoElement"]] = None self.network_access_policy = network_access_policy self.disk_access_id = disk_access_id @@ -571,9 +571,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(location=location, tags=tags, **kwargs) - self.private_endpoint_connections = None - self.provisioning_state = None - self.time_created = None + self.private_endpoint_connections: Optional[List["_models.PrivateEndpointConnection"]] = None + self.provisioning_state: Optional[str] = None + self.time_created: Optional[datetime.datetime] = None class DiskAccessList(_serialization.Model): @@ -715,8 +715,8 @@ def __init__( self.identity = identity self.encryption_type = encryption_type self.active_key = active_key - self.previous_keys = None - self.provisioning_state = None + self.previous_keys: Optional[List["_models.KeyVaultAndKeyReference"]] = None + self.provisioning_state: Optional[str] = None class DiskEncryptionSetList(_serialization.Model): @@ -863,7 +863,7 @@ def __init__(self, *, name: Optional[Union[str, "_models.DiskStorageAccountTypes """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class DiskUpdate(_serialization.Model): @@ -1089,8 +1089,8 @@ def __init__( """ super().__init__(**kwargs) self.type = type - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None class EncryptionSettingsCollection(_serialization.Model): @@ -1371,7 +1371,7 @@ class PrivateEndpoint(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class PrivateEndpointConnection(_serialization.Model): @@ -1432,12 +1432,12 @@ def __init__( ~azure.mgmt.compute.v2020_05_01.models.PrivateLinkServiceConnectionState """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.private_endpoint = private_endpoint self.private_link_service_connection_state = private_link_service_connection_state - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.PrivateEndpointConnectionProvisioningState"]] = None class PrivateLinkResource(_serialization.Model): @@ -1482,11 +1482,11 @@ def __init__(self, *, required_zone_names: Optional[List[str]] = None, **kwargs: :paramtype required_zone_names: list[str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.group_id = None - self.required_members = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.group_id: Optional[str] = None + self.required_members: Optional[List[str]] = None self.required_zone_names = required_zone_names @@ -1576,7 +1576,7 @@ class ShareInfoElement(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.vm_uri = None + self.vm_uri: Optional[str] = None class Snapshot(Resource): @@ -1733,17 +1733,17 @@ def __init__( :paramtype disk_access_id: str """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None + self.managed_by: Optional[str] = None self.sku = sku - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.incremental = incremental self.encryption = encryption self.network_access_policy = network_access_policy @@ -1814,7 +1814,7 @@ def __init__( """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class SnapshotUpdate(_serialization.Model): diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/operations/_operations.py index b43b704fdf40..e989c10861a1 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_05_01/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -58,7 +56,7 @@ def build_disks_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -92,7 +90,7 @@ def build_disks_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -125,7 +123,7 @@ def build_disks_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -153,7 +151,7 @@ def build_disks_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -181,7 +179,7 @@ def build_disks_list_by_resource_group_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -236,7 +234,7 @@ def build_disks_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -266,7 +264,7 @@ def build_disks_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -295,7 +293,7 @@ def build_snapshots_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -329,7 +327,7 @@ def build_snapshots_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -362,7 +360,7 @@ def build_snapshots_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -390,7 +388,7 @@ def build_snapshots_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -418,7 +416,7 @@ def build_snapshots_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -473,7 +471,7 @@ def build_snapshots_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -503,7 +501,7 @@ def build_snapshots_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -532,7 +530,7 @@ def build_disk_encryption_sets_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -566,7 +564,7 @@ def build_disk_encryption_sets_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -599,7 +597,7 @@ def build_disk_encryption_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -630,7 +628,7 @@ def build_disk_encryption_sets_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -661,7 +659,7 @@ def build_disk_encryption_sets_list_by_resource_group_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -716,7 +714,7 @@ def build_disk_accesses_create_or_update_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -750,7 +748,7 @@ def build_disk_accesses_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -783,7 +781,7 @@ def build_disk_accesses_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -814,7 +812,7 @@ def build_disk_accesses_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -845,7 +843,7 @@ def build_disk_accesses_list_by_resource_group_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -899,7 +897,7 @@ def build_disk_accesses_get_private_link_resources_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateLinkResources", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -931,10 +929,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -1929,10 +1927,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -2937,10 +2935,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3666,10 +3664,10 @@ class DiskAccessesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_compute_management_client.py index eb3a7a5bba5a..3a9d15667567 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( AvailabilitySetsOperations, DedicatedHostGroupsOperations, @@ -114,7 +116,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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-06-01". Note that overriding this default value may result in unsupported behavior. @@ -124,15 +126,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -151,7 +155,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_metadata.json index 4ad38d5dadb0..6f559a4a9259 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/aio/_compute_management_client.py index 5f60cb47786a..3681d3706304 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( AvailabilitySetsOperations, @@ -116,7 +118,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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-06-01". Note that overriding this default value may result in unsupported behavior. @@ -126,15 +128,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -153,7 +157,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/aio/operations/_operations.py index cfbef6a14027..f3c7600ad28a 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/aio/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,8 +6,8 @@ # 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 -import sys from typing import ( Any, AsyncIterable, @@ -25,6 +25,7 @@ ) import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -46,6 +47,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_availability_sets_create_or_update_request, build_availability_sets_delete_request, @@ -191,11 +193,8 @@ build_virtual_machines_start_request, build_virtual_machines_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -214,10 +213,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -310,10 +309,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -932,10 +931,10 @@ class ProximityPlacementGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -1484,10 +1483,10 @@ class DedicatedHostGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -2038,10 +2037,10 @@ class DedicatedHostsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2728,10 +2727,10 @@ class SshPublicKeysOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -3327,10 +3326,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3542,10 +3541,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -4220,10 +4219,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -4553,10 +4552,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4652,10 +4651,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7292,10 +7291,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7392,10 +7391,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -8088,10 +8087,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -9322,7 +9321,6 @@ async def get_next(next_link=None): def get_os_upgrade_history( self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any ) -> AsyncIterable["_models.UpgradeOperationHistoricalStatusInfo"]: - # pylint: disable=line-too-long """Gets list of OS upgrades on a VM scale set instance. :param resource_group_name: The name of the resource group. Required. @@ -11348,10 +11346,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -12053,10 +12051,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _cancel_initial( @@ -12446,10 +12444,10 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -13162,10 +13160,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _reimage_initial( @@ -15051,10 +15049,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _export_request_rate_by_interval_initial( @@ -15425,10 +15423,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -16262,10 +16260,10 @@ class VirtualMachineScaleSetVMRunCommandsOperations: # pylint: disable=name-too 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/models/_models_py3.py index 8831e0a433c9..ab7a53cadd8d 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,20 +7,15 @@ # 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, Literal, 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 +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] class AdditionalCapabilities(_serialization.Model): @@ -225,7 +220,7 @@ class AutomaticOSUpgradePolicy(_serialization.Model): applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false. :code:`
    `\\ :code:`
    ` If this is set to true for Windows based scale sets, `enableAutomaticUpdates - `_ # pylint: disable=line-too-long + `_ is automatically set to false and cannot be set to true. :vartype enable_automatic_os_upgrade: bool :ivar disable_automatic_rollback: Whether OS image rollback feature should be disabled. Default @@ -250,7 +245,7 @@ def __init__( applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false. :code:`
    `\\ :code:`
    ` If this is set to true for Windows based scale sets, `enableAutomaticUpdates - `_ # pylint: disable=line-too-long + `_ is automatically set to false and cannot be set to true. :paramtype enable_automatic_os_upgrade: bool :keyword disable_automatic_rollback: Whether OS image rollback feature should be disabled. @@ -368,9 +363,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -482,7 +477,7 @@ def __init__( self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines self.proximity_placement_group = proximity_placement_group - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class AvailabilitySetListResult(_serialization.Model): @@ -613,7 +608,7 @@ def __init__( self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines self.proximity_placement_group = proximity_placement_group - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class AvailablePatchSummary(_serialization.Model): @@ -672,14 +667,14 @@ class AvailablePatchSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.assessment_activity_id = None - self.reboot_pending = None - self.critical_and_security_patch_count = None - self.other_patch_count = None - self.start_time = None - self.last_modified_time = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.assessment_activity_id: Optional[str] = None + self.reboot_pending: Optional[bool] = None + self.critical_and_security_patch_count: Optional[int] = None + self.other_patch_count: Optional[int] = None + self.start_time: Optional[datetime.datetime] = None + self.last_modified_time: Optional[datetime.datetime] = None + self.error: Optional["_models.ApiError"] = None class BillingProfile(_serialization.Model): @@ -791,9 +786,9 @@ class BootDiagnosticsInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None - self.status = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None + self.status: Optional["_models.InstanceViewStatus"] = None class ComputeOperationListResult(_serialization.Model): @@ -816,7 +811,7 @@ class ComputeOperationListResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.value = None + self.value: Optional[List["_models.ComputeOperationValue"]] = None class ComputeOperationValue(_serialization.Model): @@ -859,12 +854,12 @@ class ComputeOperationValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.origin = None - self.name = None - self.operation = None - self.resource = None - self.description = None - self.provider = None + self.origin: Optional[str] = None + self.name: Optional[str] = None + self.operation: Optional[str] = None + self.resource: Optional[str] = None + self.description: Optional[str] = None + self.provider: Optional[str] = None class DataDisk(_serialization.Model): @@ -1010,8 +1005,8 @@ def __init__( self.disk_size_gb = disk_size_gb self.managed_disk = managed_disk self.to_be_detached = to_be_detached - self.disk_iops_read_write = None - self.disk_m_bps_read_write = None + self.disk_iops_read_write: Optional[int] = None + self.disk_m_bps_read_write: Optional[int] = None class DataDiskImage(_serialization.Model): @@ -1035,7 +1030,7 @@ class DataDiskImage(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.lun = None + self.lun: Optional[int] = None class DedicatedHost(Resource): @@ -1150,12 +1145,12 @@ def __init__( self.sku = sku self.platform_fault_domain = platform_fault_domain self.auto_replace_on_failure = auto_replace_on_failure - self.host_id = None - self.virtual_machines = None + self.host_id: Optional[str] = None + self.virtual_machines: Optional[List["_models.SubResourceReadOnly"]] = None self.license_type = license_type - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.DedicatedHostInstanceView"] = None class DedicatedHostAllocatableVM(_serialization.Model): @@ -1305,8 +1300,8 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.zones = zones self.platform_fault_domain_count = platform_fault_domain_count - self.hosts = None - self.instance_view = None + self.hosts: Optional[List["_models.SubResourceReadOnly"]] = None + self.instance_view: Optional["_models.DedicatedHostGroupInstanceView"] = None self.support_automatic_placement = support_automatic_placement @@ -1439,8 +1434,8 @@ def __init__( super().__init__(tags=tags, **kwargs) self.zones = zones self.platform_fault_domain_count = platform_fault_domain_count - self.hosts = None - self.instance_view = None + self.hosts: Optional[List["_models.SubResourceReadOnly"]] = None + self.instance_view: Optional["_models.DedicatedHostGroupInstanceView"] = None self.support_automatic_placement = support_automatic_placement @@ -1484,7 +1479,7 @@ def __init__( :paramtype statuses: list[~azure.mgmt.compute.v2020_06_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.asset_id = None + self.asset_id: Optional[str] = None self.available_capacity = available_capacity self.statuses = statuses @@ -1534,7 +1529,7 @@ def __init__( :paramtype statuses: list[~azure.mgmt.compute.v2020_06_01.models.InstanceViewStatus] """ super().__init__(available_capacity=available_capacity, statuses=statuses, **kwargs) - self.name = None + self.name: Optional[str] = None class DedicatedHostListResult(_serialization.Model): @@ -1653,12 +1648,12 @@ def __init__( super().__init__(tags=tags, **kwargs) self.platform_fault_domain = platform_fault_domain self.auto_replace_on_failure = auto_replace_on_failure - self.host_id = None - self.virtual_machines = None + self.host_id: Optional[str] = None + self.virtual_machines: Optional[List["_models.SubResourceReadOnly"]] = None self.license_type = license_type - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.DedicatedHostInstanceView"] = None class DiagnosticsProfile(_serialization.Model): @@ -2071,7 +2066,7 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.hyper_v_generation = hyper_v_generation @@ -2499,7 +2494,7 @@ def __init__( self.offer = offer self.sku = sku self.version = version - self.exact_version = None + self.exact_version: Optional[str] = None class ImageStorageProfile(_serialization.Model): @@ -2508,12 +2503,12 @@ class ImageStorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2020_06_01.models.ImageOSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2020_06_01.models.ImageDataDisk] :ivar zone_resilient: Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). @@ -2538,12 +2533,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2020_06_01.models.ImageOSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2020_06_01.models.ImageDataDisk] :keyword zone_resilient: Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). @@ -2610,7 +2605,7 @@ def __init__( super().__init__(tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.hyper_v_generation = hyper_v_generation @@ -2843,19 +2838,19 @@ class LastPatchInstallationSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.installation_activity_id = None - self.maintenance_window_exceeded = None - self.reboot_status = None - self.not_selected_patch_count = None - self.excluded_patch_count = None - self.pending_patch_count = None - self.installed_patch_count = None - self.failed_patch_count = None - self.start_time = None - self.last_modified_time = None - self.started_by = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.installation_activity_id: Optional[str] = None + self.maintenance_window_exceeded: Optional[bool] = None + self.reboot_status: Optional[Union[str, "_models.RebootStatus"]] = None + self.not_selected_patch_count: Optional[int] = None + self.excluded_patch_count: Optional[int] = None + self.pending_patch_count: Optional[int] = None + self.installed_patch_count: Optional[int] = None + self.failed_patch_count: Optional[int] = None + self.start_time: Optional[datetime.datetime] = None + self.last_modified_time: Optional[datetime.datetime] = None + self.started_by: Optional[str] = None + self.error: Optional["_models.ApiError"] = None class LinuxConfiguration(_serialization.Model): @@ -3049,7 +3044,7 @@ class LogAnalyticsOperationResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None + self.properties: Optional["_models.LogAnalyticsOutput"] = None class LogAnalyticsOutput(_serialization.Model): @@ -3072,7 +3067,7 @@ class LogAnalyticsOutput(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.output = None + self.output: Optional[str] = None class MaintenanceRedeployStatus(_serialization.Model): @@ -3324,8 +3319,8 @@ class OrchestrationServiceSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.service_name = None - self.service_state = None + self.service_name: Optional[Union[str, "_models.OrchestrationServiceNames"]] = None + self.service_state: Optional[Union[str, "_models.OrchestrationServiceState"]] = None class OSDisk(_serialization.Model): @@ -3509,7 +3504,7 @@ class OSProfile(_serialization.Model): **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :vartype computer_name: str :ivar admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` This property cannot be updated after the VM is created. :code:`
    `\\ @@ -3522,10 +3517,10 @@ class OSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -3538,10 +3533,10 @@ class OSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum @@ -3552,7 +3547,7 @@ class OSProfile(_serialization.Model): `_ :code:`
    `\\ :code:`
    ` For using cloud-init for your Linux VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -3560,10 +3555,10 @@ class OSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2020_06_01.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machine. :vartype secrets: list[~azure.mgmt.compute.v2020_06_01.models.VaultSecretGroup] @@ -3609,7 +3604,7 @@ def __init__( **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :paramtype computer_name: str :keyword admin_username: Specifies the name of the administrator account. :code:`
    `\\ :code:`
    ` This property cannot be updated after the VM is created. :code:`
    `\\ @@ -3622,10 +3617,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -3638,10 +3633,10 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum @@ -3652,7 +3647,7 @@ def __init__( `_ :code:`
    `\\ :code:`
    ` For using cloud-init for your Linux VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -3660,10 +3655,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2020_06_01.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machine. @@ -3869,9 +3864,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.proximity_placement_group_type = proximity_placement_group_type - self.virtual_machines = None - self.virtual_machine_scale_sets = None - self.availability_sets = None + self.virtual_machines: Optional[List["_models.SubResourceWithColocationStatus"]] = None + self.virtual_machine_scale_sets: Optional[List["_models.SubResourceWithColocationStatus"]] = None + self.availability_sets: Optional[List["_models.SubResourceWithColocationStatus"]] = None self.colocation_status = colocation_status @@ -3984,8 +3979,8 @@ class RecoveryWalkResponse(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.walk_performed = None - self.next_platform_update_domain = None + self.walk_performed: Optional[bool] = None + self.next_platform_update_domain: Optional[int] = None class RequestRateByIntervalInput(LogAnalyticsInputBase): @@ -4108,8 +4103,8 @@ class RetrieveBootDiagnosticsDataResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None class RollbackStatusInfo(_serialization.Model): @@ -4141,9 +4136,9 @@ class RollbackStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successfully_rolledback_instance_count = None - self.failed_rolledback_instance_count = None - self.rollback_error = None + self.successfully_rolledback_instance_count: Optional[int] = None + self.failed_rolledback_instance_count: Optional[int] = None + self.rollback_error: Optional["_models.ApiError"] = None class RollingUpgradePolicy(_serialization.Model): @@ -4255,10 +4250,10 @@ class RollingUpgradeProgressInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successful_instance_count = None - self.failed_instance_count = None - self.in_progress_instance_count = None - self.pending_instance_count = None + self.successful_instance_count: Optional[int] = None + self.failed_instance_count: Optional[int] = None + self.in_progress_instance_count: Optional[int] = None + self.pending_instance_count: Optional[int] = None class RollingUpgradeRunningStatus(_serialization.Model): @@ -4295,10 +4290,10 @@ class RollingUpgradeRunningStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.last_action = None - self.last_action_time = None + self.code: Optional[Union[str, "_models.RollingUpgradeStatusCode"]] = None + self.start_time: Optional[datetime.datetime] = None + self.last_action: Optional[Union[str, "_models.RollingUpgradeActionType"]] = None + self.last_action_time: Optional[datetime.datetime] = None class RollingUpgradeStatusInfo(Resource): @@ -4360,10 +4355,10 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(location=location, tags=tags, **kwargs) - self.policy = None - self.running_status = None - self.progress = None - self.error = None + self.policy: Optional["_models.RollingUpgradePolicy"] = None + self.running_status: Optional["_models.RollingUpgradeRunningStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None class RunCommandDocumentBase(_serialization.Model): @@ -4864,7 +4859,7 @@ class SshPublicKey(_serialization.Model): :ivar key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :vartype key_data: str """ @@ -4882,7 +4877,7 @@ def __init__(self, *, path: Optional[str] = None, key_data: Optional[str] = None :keyword key_data: SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. :code:`
    `\\ :code:`
    ` For creating ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure - `_. # pylint: disable=line-too-long + `_. :paramtype key_data: str """ super().__init__(**kwargs) @@ -4903,7 +4898,7 @@ class SshPublicKeyGenerateKeyPairResult(_serialization.Model): through ssh. The public key is in ssh-rsa format. Required. :vartype public_key: str :ivar id: The ARM resource id in the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. Required. :vartype id: str """ @@ -4932,7 +4927,7 @@ def __init__( machine through ssh. The public key is in ssh-rsa format. Required. :paramtype public_key: str :keyword id: The ARM resource id in the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. Required. :paramtype id: str """ @@ -5080,12 +5075,12 @@ class StorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2020_06_01.models.OSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2020_06_01.models.DataDisk] """ @@ -5112,12 +5107,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2020_06_01.models.OSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2020_06_01.models.DataDisk] """ super().__init__(**kwargs) @@ -5146,7 +5141,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SubResourceWithColocationStatus(SubResource): @@ -5270,9 +5265,9 @@ class UpgradeOperationHistoricalStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None - self.type = None - self.location = None + self.properties: Optional["_models.UpgradeOperationHistoricalStatusInfoProperties"] = None + self.type: Optional[str] = None + self.location: Optional[str] = None class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # pylint: disable=name-too-long @@ -5316,12 +5311,12 @@ class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # p def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.running_status = None - self.progress = None - self.error = None - self.started_by = None - self.target_image_reference = None - self.rollback_info = None + self.running_status: Optional["_models.UpgradeOperationHistoryStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None + self.started_by: Optional[Union[str, "_models.UpgradeOperationInvoker"]] = None + self.target_image_reference: Optional["_models.ImageReference"] = None + self.rollback_info: Optional["_models.RollbackStatusInfo"] = None class UpgradeOperationHistoryStatus(_serialization.Model): @@ -5353,9 +5348,9 @@ class UpgradeOperationHistoryStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.end_time = None + self.code: Optional[Union[str, "_models.UpgradeState"]] = None + self.start_time: Optional[datetime.datetime] = None + self.end_time: Optional[datetime.datetime] = None class UpgradePolicy(_serialization.Model): @@ -5512,8 +5507,8 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None class VaultCertificate(_serialization.Model): @@ -5674,10 +5669,10 @@ class VirtualMachine(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -5851,10 +5846,10 @@ def __init__( # pylint: disable=too-many-locals machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -5914,7 +5909,7 @@ def __init__( # pylint: disable=too-many-locals """ super().__init__(location=location, tags=tags, **kwargs) self.plan = plan - self.resources = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None self.identity = identity self.zones = zones self.hardware_profile = hardware_profile @@ -5932,10 +5927,10 @@ def __init__( # pylint: disable=too-many-locals self.billing_profile = billing_profile self.host = host self.host_group = host_group - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None self.extensions_time_budget = extensions_time_budget @@ -6037,14 +6032,14 @@ class VirtualMachineAssessPatchesResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.assessment_activity_id = None - self.reboot_pending = None - self.critical_and_security_patch_count = None - self.other_patch_count = None - self.start_date_time = None - self.patches = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.assessment_activity_id: Optional[str] = None + self.reboot_pending: Optional[bool] = None + self.critical_and_security_patch_count: Optional[int] = None + self.other_patch_count: Optional[int] = None + self.start_date_time: Optional[datetime.datetime] = None + self.patches: Optional[List["_models.VirtualMachineSoftwarePatchProperties"]] = None + self.error: Optional["_models.ApiError"] = None class VirtualMachineCaptureParameters(_serialization.Model): @@ -6129,10 +6124,10 @@ def __init__(self, *, id: Optional[str] = None, **kwargs: Any) -> None: # pylin :paramtype id: str """ super().__init__(id=id, **kwargs) - self.schema = None - self.content_version = None - self.parameters = None - self.resources = None + self.schema: Optional[str] = None + self.content_version: Optional[str] = None + self.parameters: Optional[JSON] = None + self.resources: Optional[List[JSON]] = None class VirtualMachineExtension(Resource): @@ -6263,7 +6258,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view @@ -6580,7 +6575,7 @@ class VirtualMachineHealthStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None + self.status: Optional["_models.InstanceViewStatus"] = None class VirtualMachineIdentity(_serialization.Model): @@ -6601,7 +6596,7 @@ class VirtualMachineIdentity(_serialization.Model): :vartype type: str or ~azure.mgmt.compute.v2020_06_01.models.ResourceIdentityType :ivar user_assigned_identities: The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2020_06_01.models.UserAssignedIdentitiesValue] """ @@ -6633,13 +6628,13 @@ def __init__( :paramtype type: str or ~azure.mgmt.compute.v2020_06_01.models.ResourceIdentityType :keyword user_assigned_identities: The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2020_06_01.models.UserAssignedIdentitiesValue] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.user_assigned_identities = user_assigned_identities @@ -6948,9 +6943,9 @@ def __init__( self.maintenance_redeploy_status = maintenance_redeploy_status self.disks = disks self.extensions = extensions - self.vm_health = None + self.vm_health: Optional["_models.VirtualMachineHealthStatus"] = None self.boot_diagnostics = boot_diagnostics - self.assigned_host = None + self.assigned_host: Optional[str] = None self.statuses = statuses self.patch_status = patch_status @@ -7186,8 +7181,8 @@ def __init__( self.timeout_in_seconds = timeout_in_seconds self.output_blob_uri = output_blob_uri self.error_blob_uri = error_blob_uri - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineRunCommandInstanceView"] = None class VirtualMachineRunCommandInstanceView(_serialization.Model): @@ -7448,8 +7443,8 @@ def __init__( self.timeout_in_seconds = timeout_in_seconds self.output_blob_uri = output_blob_uri self.error_blob_uri = error_blob_uri - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineRunCommandInstanceView"] = None class VirtualMachineScaleSet(Resource): @@ -7657,10 +7652,10 @@ def __init__( self.upgrade_policy = upgrade_policy self.automatic_repairs_policy = automatic_repairs_policy self.virtual_machine_profile = virtual_machine_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.overprovision = overprovision self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms - self.unique_id = None + self.unique_id: Optional[str] = None self.single_placement_group = single_placement_group self.zone_balance = zone_balance self.platform_fault_domain_count = platform_fault_domain_count @@ -7896,7 +7891,7 @@ def __init__( """ super().__init__(**kwargs) self.name = name - self.type = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -7905,7 +7900,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.provision_after_extensions = provision_after_extensions @@ -8090,8 +8085,8 @@ def __init__( :paramtype provision_after_extensions: list[str] """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -8100,7 +8095,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.provision_after_extensions = provision_after_extensions @@ -8123,7 +8118,7 @@ class VirtualMachineScaleSetIdentity(_serialization.Model): :vartype type: str or ~azure.mgmt.compute.v2020_06_01.models.ResourceIdentityType :ivar user_assigned_identities: The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2020_06_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue] """ @@ -8162,13 +8157,13 @@ def __init__( :keyword user_assigned_identities: The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2020_06_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.user_assigned_identities = user_assigned_identities @@ -8197,8 +8192,8 @@ class VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue(_serialization.M def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None class VirtualMachineScaleSetInstanceView(_serialization.Model): @@ -8238,10 +8233,10 @@ def __init__(self, *, statuses: Optional[List["_models.InstanceViewStatus"]] = N :paramtype statuses: list[~azure.mgmt.compute.v2020_06_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.virtual_machine = None - self.extensions = None + self.virtual_machine: Optional["_models.VirtualMachineScaleSetInstanceViewStatusesSummary"] = None + self.extensions: Optional[List["_models.VirtualMachineScaleSetVMExtensionsSummary"]] = None self.statuses = statuses - self.orchestration_services = None + self.orchestration_services: Optional[List["_models.OrchestrationServiceSummary"]] = None class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): # pylint: disable=name-too-long @@ -8265,7 +8260,7 @@ class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.statuses_summary = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetIPConfiguration(SubResource): @@ -8740,7 +8735,7 @@ class VirtualMachineScaleSetNetworkProfile(_serialization.Model): :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :vartype health_probe: ~azure.mgmt.compute.v2020_06_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: @@ -8765,7 +8760,7 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :paramtype health_probe: ~azure.mgmt.compute.v2020_06_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: @@ -8922,10 +8917,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :vartype admin_username: str :ivar admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -8938,16 +8933,16 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :vartype admin_password: str :ivar custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -8955,10 +8950,10 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :vartype linux_configuration: ~azure.mgmt.compute.v2020_06_01.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. @@ -9001,10 +8996,10 @@ def __init__( :code:`
    `\\ :code:`
    ` **Max-length (Windows):** 20 characters :code:`
    `\\ :code:`
    `\\ :code:`
  • ` For root access to the Linux VM, see `Using root privileges on Linux virtual machines in Azure - `_\\ # pylint: disable=line-too-long + `_\\ :code:`
    `\\ :code:`
  • ` For a list of built-in system users on Linux that should not be used in this field, see `Selecting User Names for Linux on Azure - `_. # pylint: disable=line-too-long + `_. :paramtype admin_username: str :keyword admin_password: Specifies the password of the administrator account. :code:`
    `\\ :code:`
    ` **Minimum-length (Windows):** 8 characters :code:`
    `\\ :code:`
    ` @@ -9017,16 +9012,16 @@ def __init__( "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`
    `\\ :code:`
    ` For resetting the password, see `How to reset the Remote Desktop service or its login password in a Windows VM - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For resetting root password, see `Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension - `_. # pylint: disable=line-too-long + `_. :paramtype admin_password: str :keyword custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. :code:`
    `\\ :code:`
    ` For using cloud-init for your VM, see `Using cloud-init to customize a Linux VM during creation - `_. # pylint: disable=line-too-long + `_. :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. @@ -9034,10 +9029,10 @@ def __init__( :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. :code:`
    `\\ :code:`
    `For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions - `_. # pylint: disable=line-too-long + `_. :paramtype linux_configuration: ~azure.mgmt.compute.v2020_06_01.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. @@ -9230,9 +9225,9 @@ class VirtualMachineScaleSetSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.sku = None - self.capacity = None + self.resource_type: Optional[str] = None + self.sku: Optional["_models.Sku"] = None + self.capacity: Optional["_models.VirtualMachineScaleSetSkuCapacity"] = None class VirtualMachineScaleSetSkuCapacity(_serialization.Model): @@ -9269,10 +9264,10 @@ class VirtualMachineScaleSetSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default_capacity = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default_capacity: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.VirtualMachineScaleSetSkuScaleType"]] = None class VirtualMachineScaleSetStorageProfile(_serialization.Model): @@ -9286,12 +9281,12 @@ class VirtualMachineScaleSetStorageProfile(_serialization.Model): :ivar os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype os_disk: ~azure.mgmt.compute.v2020_06_01.models.VirtualMachineScaleSetOSDisk :ivar data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :vartype data_disks: list[~azure.mgmt.compute.v2020_06_01.models.VirtualMachineScaleSetDataDisk] """ @@ -9319,12 +9314,12 @@ def __init__( :keyword os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype os_disk: ~azure.mgmt.compute.v2020_06_01.models.VirtualMachineScaleSetOSDisk :keyword data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines - `_. # pylint: disable=line-too-long + `_. :paramtype data_disks: list[~azure.mgmt.compute.v2020_06_01.models.VirtualMachineScaleSetDataDisk] """ @@ -9691,7 +9686,7 @@ class VirtualMachineScaleSetUpdateNetworkProfile(_serialization.Model): # pylin :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :vartype health_probe: ~azure.mgmt.compute.v2020_06_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: @@ -9718,7 +9713,7 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :paramtype health_probe: ~azure.mgmt.compute.v2020_06_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: @@ -10091,10 +10086,10 @@ class VirtualMachineScaleSetVM(Resource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :vartype availability_set: ~azure.mgmt.compute.v2020_06_01.models.SubResource @@ -10225,10 +10220,10 @@ def __init__( # pylint: disable=too-many-locals machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. :paramtype availability_set: ~azure.mgmt.compute.v2020_06_01.models.SubResource @@ -10249,14 +10244,14 @@ def __init__( # pylint: disable=too-many-locals ~azure.mgmt.compute.v2020_06_01.models.VirtualMachineScaleSetVMProtectionPolicy """ super().__init__(location=location, tags=tags, **kwargs) - self.instance_id = None - self.sku = None + self.instance_id: Optional[str] = None + self.sku: Optional["_models.Sku"] = None self.plan = plan - self.resources = None - self.zones = None - self.latest_model_applied = None - self.vm_id = None - self.instance_view = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None + self.zones: Optional[List[str]] = None + self.latest_model_applied: Optional[bool] = None + self.vm_id: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineScaleSetVMInstanceView"] = None self.hardware_profile = hardware_profile self.storage_profile = storage_profile self.additional_capabilities = additional_capabilities @@ -10266,9 +10261,9 @@ def __init__( # pylint: disable=too-many-locals self.network_profile_configuration = network_profile_configuration self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.license_type = license_type - self.model_definition_applied = None + self.model_definition_applied: Optional[str] = None self.protection_policy = protection_policy @@ -10377,8 +10372,8 @@ def __init__( ~azure.mgmt.compute.v2020_06_01.models.VirtualMachineExtensionInstanceView """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -10387,7 +10382,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view @@ -10439,8 +10434,8 @@ class VirtualMachineScaleSetVMExtensionsSummary(_serialization.Model): # pylint def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.statuses_summary = None + self.name: Optional[str] = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetVMExtensionUpdate(SubResourceReadOnly): @@ -10536,8 +10531,8 @@ def __init__( :paramtype protected_settings: JSON """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -10709,10 +10704,10 @@ def __init__( self.maintenance_redeploy_status = maintenance_redeploy_status self.disks = disks self.extensions = extensions - self.vm_health = None + self.vm_health: Optional["_models.VirtualMachineHealthStatus"] = None self.boot_diagnostics = boot_diagnostics self.statuses = statuses - self.assigned_host = None + self.assigned_host: Optional[str] = None self.placement_group_id = placement_group_id @@ -11115,16 +11110,16 @@ class VirtualMachineSoftwarePatchProperties(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.patch_id = None - self.name = None - self.version = None - self.kbid = None - self.classifications = None - self.reboot_behavior = None - self.activity_id = None - self.published_date = None - self.last_modified_date_time = None - self.assessment_state = None + self.patch_id: Optional[str] = None + self.name: Optional[str] = None + self.version: Optional[str] = None + self.kbid: Optional[str] = None + self.classifications: Optional[List[str]] = None + self.reboot_behavior: Optional[Union[str, "_models.SoftwareUpdateRebootBehavior"]] = None + self.activity_id: Optional[str] = None + self.published_date: Optional[datetime.datetime] = None + self.last_modified_date_time: Optional[datetime.datetime] = None + self.assessment_state: Optional[Union[str, "_models.PatchAssessmentState"]] = None class VirtualMachineStatusCodeCount(_serialization.Model): @@ -11151,8 +11146,8 @@ class VirtualMachineStatusCodeCount(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.count = None + self.code: Optional[str] = None + self.count: Optional[int] = None class VirtualMachineUpdate(UpdateResource): @@ -11194,10 +11189,10 @@ class VirtualMachineUpdate(UpdateResource): machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -11358,10 +11353,10 @@ def __init__( # pylint: disable=too-many-locals machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines - `_. # pylint: disable=line-too-long + `_. :code:`
    `\\ :code:`
    ` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure - `_ # pylint: disable=line-too-long + `_ :code:`
    `\\ :code:`
    ` Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. @@ -11438,10 +11433,10 @@ def __init__( # pylint: disable=too-many-locals self.billing_profile = billing_profile self.host = host self.host_group = host_group - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None self.extensions_time_budget = extensions_time_budget diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/operations/_operations.py index 5b035cf6f9e7..11afa8a2b9c5 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2020_06_01/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, List, Literal, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -77,7 +75,7 @@ def build_availability_sets_create_or_update_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -111,7 +109,7 @@ def build_availability_sets_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -141,7 +139,7 @@ def build_availability_sets_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -169,7 +167,7 @@ def build_availability_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -226,7 +224,7 @@ def build_availability_sets_list_request(resource_group_name: str, subscription_ _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -256,7 +254,7 @@ def build_availability_sets_list_available_sizes_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -288,7 +286,7 @@ def build_proximity_placement_groups_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -324,7 +322,7 @@ def build_proximity_placement_groups_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -356,7 +354,7 @@ def build_proximity_placement_groups_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -391,7 +389,7 @@ def build_proximity_placement_groups_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -456,7 +454,7 @@ def build_proximity_placement_groups_list_by_resource_group_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -487,7 +485,7 @@ def build_dedicated_host_groups_create_or_update_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -521,7 +519,7 @@ def build_dedicated_host_groups_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -551,7 +549,7 @@ def build_dedicated_host_groups_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -584,7 +582,7 @@ def build_dedicated_host_groups_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -617,7 +615,7 @@ def build_dedicated_host_groups_list_by_resource_group_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -674,7 +672,7 @@ def build_dedicated_hosts_create_or_update_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -709,7 +707,7 @@ def build_dedicated_hosts_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -740,7 +738,7 @@ def build_dedicated_hosts_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -775,7 +773,7 @@ def build_dedicated_hosts_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -809,7 +807,7 @@ def build_dedicated_hosts_list_by_host_group_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -866,7 +864,7 @@ def build_ssh_public_keys_list_by_resource_group_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -897,7 +895,7 @@ def build_ssh_public_keys_create_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -931,7 +929,7 @@ def build_ssh_public_keys_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -961,7 +959,7 @@ def build_ssh_public_keys_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -989,7 +987,7 @@ def build_ssh_public_keys_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -1020,7 +1018,7 @@ def build_ssh_public_keys_generate_key_pair_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}/generateKeyPair", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -1051,7 +1049,7 @@ def build_virtual_machine_extension_images_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1084,7 +1082,7 @@ def build_virtual_machine_extension_images_list_types_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1123,7 +1121,7 @@ def build_virtual_machine_extension_images_list_versions_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1162,7 +1160,7 @@ def build_virtual_machine_extensions_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1197,7 +1195,7 @@ def build_virtual_machine_extensions_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1228,7 +1226,7 @@ def build_virtual_machine_extensions_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1263,7 +1261,7 @@ def build_virtual_machine_extensions_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1297,7 +1295,7 @@ def build_virtual_machine_extensions_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1330,7 +1328,7 @@ def build_virtual_machine_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1373,7 +1371,7 @@ def build_virtual_machine_images_list_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1412,7 +1410,7 @@ def build_virtual_machine_images_list_offers_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1442,7 +1440,7 @@ def build_virtual_machine_images_list_publishers_request( # pylint: disable=nam # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1472,7 +1470,7 @@ def build_virtual_machine_images_list_skus_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1501,7 +1499,7 @@ def build_usage_list_request(location: str, subscription_id: str, **kwargs: Any) # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1531,7 +1529,7 @@ def build_virtual_machines_list_by_location_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1562,7 +1560,7 @@ def build_virtual_machines_capture_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1596,7 +1594,7 @@ def build_virtual_machines_create_or_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1630,7 +1628,7 @@ def build_virtual_machines_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1665,7 +1663,7 @@ def build_virtual_machines_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1700,7 +1698,7 @@ def build_virtual_machines_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1733,7 +1731,7 @@ def build_virtual_machines_instance_view_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1761,7 +1759,7 @@ def build_virtual_machines_convert_to_managed_disks_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1786,7 +1784,7 @@ def build_virtual_machines_deallocate_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1811,7 +1809,7 @@ def build_virtual_machines_generalize_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1837,7 +1835,7 @@ def build_virtual_machines_list_request(resource_group_name: str, subscription_i _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1895,7 +1893,7 @@ def build_virtual_machines_list_available_sizes_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1923,7 +1921,7 @@ def build_virtual_machines_power_off_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1953,7 +1951,7 @@ def build_virtual_machines_reapply_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reapply", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1981,7 +1979,7 @@ def build_virtual_machines_restart_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2006,7 +2004,7 @@ def build_virtual_machines_start_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2031,7 +2029,7 @@ def build_virtual_machines_redeploy_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2058,7 +2056,7 @@ def build_virtual_machines_reimage_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2095,7 +2093,7 @@ def build_virtual_machines_retrieve_boot_diagnostics_data_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/retrieveBootDiagnosticsData", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2127,7 +2125,7 @@ def build_virtual_machines_perform_maintenance_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2152,7 +2150,7 @@ def build_virtual_machines_simulate_eviction_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2180,7 +2178,7 @@ def build_virtual_machines_assess_patches_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/assessPatches", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2212,7 +2210,7 @@ def build_virtual_machines_run_command_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2242,7 +2240,7 @@ def build_virtual_machine_sizes_list_request(location: str, subscription_id: str # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2273,7 +2271,7 @@ def build_images_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2307,7 +2305,7 @@ def build_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2337,7 +2335,7 @@ def build_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2365,7 +2363,7 @@ def build_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -2398,7 +2396,7 @@ def build_images_list_by_resource_group_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2453,7 +2451,7 @@ def build_virtual_machine_scale_sets_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2487,7 +2485,7 @@ def build_virtual_machine_scale_sets_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2517,7 +2515,7 @@ def build_virtual_machine_scale_sets_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2545,7 +2543,7 @@ def build_virtual_machine_scale_sets_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2575,7 +2573,7 @@ def build_virtual_machine_scale_sets_deallocate_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2606,7 +2604,7 @@ def build_virtual_machine_scale_sets_delete_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2638,7 +2636,7 @@ def build_virtual_machine_scale_sets_get_instance_view_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2669,7 +2667,7 @@ def build_virtual_machine_scale_sets_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2727,7 +2725,7 @@ def build_virtual_machine_scale_sets_list_skus_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2758,7 +2756,7 @@ def build_virtual_machine_scale_sets_get_os_upgrade_history_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2793,7 +2791,7 @@ def build_virtual_machine_scale_sets_power_off_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2826,7 +2824,7 @@ def build_virtual_machine_scale_sets_restart_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2857,7 +2855,7 @@ def build_virtual_machine_scale_sets_start_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2888,7 +2886,7 @@ def build_virtual_machine_scale_sets_redeploy_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2919,7 +2917,7 @@ def build_virtual_machine_scale_sets_perform_maintenance_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2950,7 +2948,7 @@ def build_virtual_machine_scale_sets_update_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2981,7 +2979,7 @@ def build_virtual_machine_scale_sets_reimage_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3012,7 +3010,7 @@ def build_virtual_machine_scale_sets_reimage_all_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3049,7 +3047,7 @@ def build_virtual_machine_scale_sets_force_recovery_service_fabric_platform_upda _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3080,7 +3078,7 @@ def build_virtual_machine_scale_sets_convert_to_single_placement_group_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/convertToSinglePlacementGroup", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3111,7 +3109,7 @@ def build_virtual_machine_scale_sets_set_orchestration_service_state_request( # _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/setOrchestrationServiceState", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3144,7 +3142,7 @@ def build_virtual_machine_scale_set_extensions_create_or_update_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3179,7 +3177,7 @@ def build_virtual_machine_scale_set_extensions_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3210,7 +3208,7 @@ def build_virtual_machine_scale_set_extensions_delete_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3245,7 +3243,7 @@ def build_virtual_machine_scale_set_extensions_get_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3279,7 +3277,7 @@ def build_virtual_machine_scale_set_extensions_list_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3307,7 +3305,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_cancel_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3332,7 +3330,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_os_upgrade_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3357,7 +3355,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_extension_upgrade_req _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensionRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3385,7 +3383,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_get_latest_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3422,7 +3420,7 @@ def build_virtual_machine_scale_set_vm_extensions_create_or_update_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3463,7 +3461,7 @@ def build_virtual_machine_scale_set_vm_extensions_update_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3503,7 +3501,7 @@ def build_virtual_machine_scale_set_vm_extensions_delete_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3543,7 +3541,7 @@ def build_virtual_machine_scale_set_vm_extensions_get_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3584,7 +3582,7 @@ def build_virtual_machine_scale_set_vm_extensions_list_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3617,7 +3615,7 @@ def build_virtual_machine_scale_set_vms_reimage_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3647,7 +3645,7 @@ def build_virtual_machine_scale_set_vms_reimage_all_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3673,7 +3671,7 @@ def build_virtual_machine_scale_set_vms_deallocate_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3703,7 +3701,7 @@ def build_virtual_machine_scale_set_vms_update_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3734,7 +3732,7 @@ def build_virtual_machine_scale_set_vms_delete_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3769,7 +3767,7 @@ def build_virtual_machine_scale_set_vms_get_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3803,7 +3801,7 @@ def build_virtual_machine_scale_set_vms_get_instance_view_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3842,7 +3840,7 @@ def build_virtual_machine_scale_set_vms_list_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "virtualMachineScaleSetName": _SERIALIZER.url( @@ -3884,7 +3882,7 @@ def build_virtual_machine_scale_set_vms_power_off_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3912,7 +3910,7 @@ def build_virtual_machine_scale_set_vms_restart_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3938,7 +3936,7 @@ def build_virtual_machine_scale_set_vms_start_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3964,7 +3962,7 @@ def build_virtual_machine_scale_set_vms_redeploy_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3999,7 +3997,7 @@ def build_virtual_machine_scale_set_vms_retrieve_boot_diagnostics_data_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/retrieveBootDiagnosticsData", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4032,7 +4030,7 @@ def build_virtual_machine_scale_set_vms_perform_maintenance_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4058,7 +4056,7 @@ def build_virtual_machine_scale_set_vms_simulate_eviction_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/simulateEviction", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4088,7 +4086,7 @@ def build_virtual_machine_scale_set_vms_run_command_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4123,7 +4121,7 @@ def build_log_analytics_export_request_rate_by_interval_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -4156,7 +4154,7 @@ def build_log_analytics_export_throttled_requests_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -4187,7 +4185,7 @@ def build_virtual_machine_run_commands_list_request( # pylint: disable=name-too # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -4217,7 +4215,7 @@ def build_virtual_machine_run_commands_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "commandId": _SERIALIZER.url("command_id", command_id, "str"), @@ -4249,7 +4247,7 @@ def build_virtual_machine_run_commands_create_or_update_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -4284,7 +4282,7 @@ def build_virtual_machine_run_commands_update_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -4318,7 +4316,7 @@ def build_virtual_machine_run_commands_delete_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -4356,7 +4354,7 @@ def build_virtual_machine_run_commands_get_by_virtual_machine_request( # pylint _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -4390,7 +4388,7 @@ def build_virtual_machine_run_commands_list_by_virtual_machine_request( # pylin _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -4429,7 +4427,7 @@ def build_virtual_machine_scale_set_vm_run_commands_create_or_update_request( # _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4470,7 +4468,7 @@ def build_virtual_machine_scale_set_vm_run_commands_update_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4510,7 +4508,7 @@ def build_virtual_machine_scale_set_vm_run_commands_delete_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4550,7 +4548,7 @@ def build_virtual_machine_scale_set_vm_run_commands_get_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4591,7 +4589,7 @@ def build_virtual_machine_scale_set_vm_run_commands_list_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4626,10 +4624,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4722,10 +4720,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -5343,10 +5341,10 @@ class ProximityPlacementGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -5897,10 +5895,10 @@ class DedicatedHostGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -6449,10 +6447,10 @@ class DedicatedHostsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -7132,10 +7130,10 @@ class SshPublicKeysOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7731,10 +7729,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7946,10 +7944,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -8624,10 +8622,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -8957,10 +8955,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -9056,10 +9054,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -11679,10 +11677,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -11778,10 +11776,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -12474,10 +12472,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -15727,10 +15725,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -16432,10 +16430,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _cancel_initial(self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any) -> Iterator[bytes]: @@ -16821,10 +16819,10 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -17537,10 +17535,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _reimage_initial( @@ -19423,10 +19421,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _export_request_rate_by_interval_initial( @@ -19795,10 +19793,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -20632,10 +20630,10 @@ class VirtualMachineScaleSetVMRunCommandsOperations: # pylint: disable=name-too 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_compute_management_client.py index 893ea61686ba..235ecdb624ca 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( AvailabilitySetsOperations, CapacityReservationGroupsOperations, @@ -181,7 +183,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2021-07-01". Note that overriding this default value may result in unsupported behavior. @@ -191,15 +193,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -218,7 +222,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_metadata.json index 086d8054075b..9c8c12473b87 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node
    is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/aio/_compute_management_client.py index 05616bbced51..a440ad8f57dc 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( AvailabilitySetsOperations, @@ -184,7 +186,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2021-07-01". Note that overriding this default value may result in unsupported behavior. @@ -194,15 +196,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -221,7 +225,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/aio/operations/_operations.py index 48f22e6dd1f7..50126c219bf4 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/aio/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, List, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_availability_sets_create_or_update_request, build_availability_sets_delete_request, @@ -241,11 +243,8 @@ build_virtual_machines_start_request, build_virtual_machines_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -264,10 +263,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -360,10 +359,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -982,10 +981,10 @@ class ProximityPlacementGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -1534,10 +1533,10 @@ class DedicatedHostGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -2089,10 +2088,10 @@ class DedicatedHostsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2780,10 +2779,10 @@ class SshPublicKeysOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -3379,10 +3378,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3594,10 +3593,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -4272,10 +4271,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -4605,10 +4604,10 @@ class VirtualMachineImagesEdgeZoneOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -4960,10 +4959,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5059,10 +5058,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7914,10 +7913,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -9260,7 +9259,6 @@ async def get_next(next_link=None): def get_os_upgrade_history( self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any ) -> AsyncIterable["_models.UpgradeOperationHistoricalStatusInfo"]: - # pylint: disable=line-too-long """Gets list of OS upgrades on a VM scale set instance. :param resource_group_name: The name of the resource group. Required. @@ -11286,10 +11284,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -11386,10 +11384,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -12082,10 +12080,10 @@ class RestorePointCollectionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -12697,10 +12695,10 @@ class RestorePointsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_initial( @@ -13089,10 +13087,10 @@ class CapacityReservationGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -13677,10 +13675,10 @@ class CapacityReservationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -14385,10 +14383,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -15090,10 +15088,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _cancel_initial( @@ -15483,10 +15481,10 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -16199,10 +16197,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _reimage_initial( @@ -18106,10 +18104,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _export_request_rate_by_interval_initial( @@ -18480,10 +18478,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -19317,10 +19315,10 @@ class VirtualMachineScaleSetVMRunCommandsOperations: # pylint: disable=name-too 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -20055,10 +20053,10 @@ class ResourceSkusOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -20161,10 +20159,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -20882,10 +20880,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -21578,10 +21576,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -22356,10 +22354,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -23064,10 +23062,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -23847,10 +23845,10 @@ class GallerySharingProfileOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _update_initial( @@ -24060,10 +24058,10 @@ class SharedGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -24219,10 +24217,10 @@ class SharedGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -24392,10 +24390,10 @@ class SharedGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -24582,10 +24580,10 @@ class CommunityGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -24657,10 +24655,10 @@ class CommunityGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -24737,10 +24735,10 @@ class CommunityGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/models/_models_py3.py index c0a29e88ce69..5d4c61e516f3 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,20 +7,15 @@ # 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, Literal, 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 +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] class AdditionalCapabilities(_serialization.Model): @@ -260,7 +255,7 @@ class AutomaticOSUpgradePolicy(_serialization.Model): applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false. :code:`
    `\\ :code:`
    ` If this is set to true for Windows based scale sets, `enableAutomaticUpdates - `_ # pylint: disable=line-too-long + `_ is automatically set to false and cannot be set to true. :vartype enable_automatic_os_upgrade: bool :ivar disable_automatic_rollback: Whether OS image rollback feature should be disabled. Default @@ -285,7 +280,7 @@ def __init__( applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false. :code:`
    `\\ :code:`
    ` If this is set to true for Windows based scale sets, `enableAutomaticUpdates - `_ # pylint: disable=line-too-long + `_ is automatically set to false and cannot be set to true. :paramtype enable_automatic_os_upgrade: bool :keyword disable_automatic_rollback: Whether OS image rollback feature should be disabled. @@ -403,9 +398,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -516,7 +511,7 @@ def __init__( self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines self.proximity_placement_group = proximity_placement_group - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class AvailabilitySetListResult(_serialization.Model): @@ -647,7 +642,7 @@ def __init__( self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines self.proximity_placement_group = proximity_placement_group - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None class AvailablePatchSummary(_serialization.Model): @@ -706,14 +701,14 @@ class AvailablePatchSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.assessment_activity_id = None - self.reboot_pending = None - self.critical_and_security_patch_count = None - self.other_patch_count = None - self.start_time = None - self.last_modified_time = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.assessment_activity_id: Optional[str] = None + self.reboot_pending: Optional[bool] = None + self.critical_and_security_patch_count: Optional[int] = None + self.other_patch_count: Optional[int] = None + self.start_time: Optional[datetime.datetime] = None + self.last_modified_time: Optional[datetime.datetime] = None + self.error: Optional["_models.ApiError"] = None class BillingProfile(_serialization.Model): @@ -825,9 +820,9 @@ class BootDiagnosticsInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None - self.status = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None + self.status: Optional["_models.InstanceViewStatus"] = None class CapacityReservation(Resource): @@ -932,11 +927,11 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.sku = sku self.zones = zones - self.reservation_id = None - self.virtual_machines_associated = None - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None + self.reservation_id: Optional[str] = None + self.virtual_machines_associated: Optional[List["_models.SubResourceReadOnly"]] = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.CapacityReservationInstanceView"] = None class CapacityReservationGroup(Resource): @@ -1016,9 +1011,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.zones = zones - self.capacity_reservations = None - self.virtual_machines_associated = None - self.instance_view = None + self.capacity_reservations: Optional[List["_models.SubResourceReadOnly"]] = None + self.virtual_machines_associated: Optional[List["_models.SubResourceReadOnly"]] = None + self.instance_view: Optional["_models.CapacityReservationGroupInstanceView"] = None class CapacityReservationGroupInstanceView(_serialization.Model): @@ -1043,7 +1038,7 @@ class CapacityReservationGroupInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.capacity_reservations = None + self.capacity_reservations: Optional[List["_models.CapacityReservationInstanceViewWithName"]] = None class CapacityReservationGroupListResult(_serialization.Model): @@ -1122,9 +1117,9 @@ def __init__(self, *, tags: Optional[Dict[str, str]] = None, **kwargs: Any) -> N :paramtype tags: dict[str, str] """ super().__init__(tags=tags, **kwargs) - self.capacity_reservations = None - self.virtual_machines_associated = None - self.instance_view = None + self.capacity_reservations: Optional[List["_models.SubResourceReadOnly"]] = None + self.virtual_machines_associated: Optional[List["_models.SubResourceReadOnly"]] = None + self.instance_view: Optional["_models.CapacityReservationGroupInstanceView"] = None class CapacityReservationInstanceView(_serialization.Model): @@ -1203,7 +1198,7 @@ def __init__( :paramtype statuses: list[~azure.mgmt.compute.v2021_07_01.models.InstanceViewStatus] """ super().__init__(utilization_info=utilization_info, statuses=statuses, **kwargs) - self.name = None + self.name: Optional[str] = None class CapacityReservationListResult(_serialization.Model): @@ -1330,11 +1325,11 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.sku = sku - self.reservation_id = None - self.virtual_machines_associated = None - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None + self.reservation_id: Optional[str] = None + self.virtual_machines_associated: Optional[List["_models.SubResourceReadOnly"]] = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.CapacityReservationInstanceView"] = None class CapacityReservationUtilization(_serialization.Model): @@ -1359,7 +1354,7 @@ class CapacityReservationUtilization(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.virtual_machines_allocated = None + self.virtual_machines_allocated: Optional[List["_models.SubResourceReadOnly"]] = None class PirCommunityGalleryResource(_serialization.Model): @@ -1396,9 +1391,9 @@ def __init__(self, *, unique_id: Optional[str] = None, **kwargs: Any) -> None: :paramtype unique_id: str """ super().__init__(**kwargs) - self.name = None - self.location = None - self.type = None + self.name: Optional[str] = None + self.location: Optional[str] = None + self.type: Optional[str] = None self.unique_id = unique_id @@ -1619,7 +1614,7 @@ class ComputeOperationListResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.value = None + self.value: Optional[List["_models.ComputeOperationValue"]] = None class ComputeOperationValue(_serialization.Model): @@ -1662,12 +1657,12 @@ class ComputeOperationValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.origin = None - self.name = None - self.operation = None - self.resource = None - self.description = None - self.provider = None + self.origin: Optional[str] = None + self.name: Optional[str] = None + self.operation: Optional[str] = None + self.resource: Optional[str] = None + self.description: Optional[str] = None + self.provider: Optional[str] = None class DataDisk(_serialization.Model): @@ -1853,8 +1848,8 @@ def __init__( self.disk_size_gb = disk_size_gb self.managed_disk = managed_disk self.to_be_detached = to_be_detached - self.disk_iops_read_write = None - self.disk_m_bps_read_write = None + self.disk_iops_read_write: Optional[int] = None + self.disk_m_bps_read_write: Optional[int] = None self.detach_option = detach_option self.delete_option = delete_option @@ -1880,7 +1875,7 @@ class DataDiskImage(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.lun = None + self.lun: Optional[int] = None class DiskImageEncryption(_serialization.Model): @@ -2054,12 +2049,12 @@ def __init__( self.sku = sku self.platform_fault_domain = platform_fault_domain self.auto_replace_on_failure = auto_replace_on_failure - self.host_id = None - self.virtual_machines = None + self.host_id: Optional[str] = None + self.virtual_machines: Optional[List["_models.SubResourceReadOnly"]] = None self.license_type = license_type - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.DedicatedHostInstanceView"] = None class DedicatedHostAllocatableVM(_serialization.Model): @@ -2209,8 +2204,8 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.zones = zones self.platform_fault_domain_count = platform_fault_domain_count - self.hosts = None - self.instance_view = None + self.hosts: Optional[List["_models.SubResourceReadOnly"]] = None + self.instance_view: Optional["_models.DedicatedHostGroupInstanceView"] = None self.support_automatic_placement = support_automatic_placement @@ -2343,8 +2338,8 @@ def __init__( super().__init__(tags=tags, **kwargs) self.zones = zones self.platform_fault_domain_count = platform_fault_domain_count - self.hosts = None - self.instance_view = None + self.hosts: Optional[List["_models.SubResourceReadOnly"]] = None + self.instance_view: Optional["_models.DedicatedHostGroupInstanceView"] = None self.support_automatic_placement = support_automatic_placement @@ -2388,7 +2383,7 @@ def __init__( :paramtype statuses: list[~azure.mgmt.compute.v2021_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.asset_id = None + self.asset_id: Optional[str] = None self.available_capacity = available_capacity self.statuses = statuses @@ -2438,7 +2433,7 @@ def __init__( :paramtype statuses: list[~azure.mgmt.compute.v2021_07_01.models.InstanceViewStatus] """ super().__init__(available_capacity=available_capacity, statuses=statuses, **kwargs) - self.name = None + self.name: Optional[str] = None class DedicatedHostListResult(_serialization.Model): @@ -2557,12 +2552,12 @@ def __init__( super().__init__(tags=tags, **kwargs) self.platform_fault_domain = platform_fault_domain self.auto_replace_on_failure = auto_replace_on_failure - self.host_id = None - self.virtual_machines = None + self.host_id: Optional[str] = None + self.virtual_machines: Optional[List["_models.SubResourceReadOnly"]] = None self.license_type = license_type - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.DedicatedHostInstanceView"] = None class DiagnosticsProfile(_serialization.Model): @@ -2950,7 +2945,7 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryPropertiesProvisioningState"]] = None self.sharing_profile = sharing_profile self.soft_delete_policy = soft_delete_policy @@ -3130,9 +3125,9 @@ def __init__(self, *, tags: Optional[Dict[str, str]] = None, **kwargs: Any) -> N :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -3300,8 +3295,10 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[ + Union[str, "_models.GalleryApplicationVersionPropertiesProvisioningState"] + ] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryApplicationVersionList(_serialization.Model): @@ -3421,7 +3418,7 @@ def __init__( self.target_regions = target_regions self.replica_count = replica_count self.exclude_from_latest = exclude_from_latest - self.published_date = None + self.published_date: Optional[datetime.datetime] = None self.end_of_life_date = end_of_life_date self.storage_account_type = storage_account_type self.replication_mode = replication_mode @@ -3601,8 +3598,10 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[ + Union[str, "_models.GalleryApplicationVersionPropertiesProvisioningState"] + ] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryArtifactSource(_serialization.Model): @@ -3702,7 +3701,7 @@ def __init__( :paramtype source: ~azure.mgmt.compute.v2021_07_01.models.GalleryArtifactVersionSource """ super().__init__(**kwargs) - self.size_in_gb = None + self.size_in_gb: Optional[int] = None self.host_caching = host_caching self.source = source @@ -3783,7 +3782,7 @@ class GalleryIdentifier(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.unique_name = None + self.unique_name: Optional[str] = None class GalleryImage(Resource): @@ -3950,7 +3949,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImagePropertiesProvisioningState"]] = None self.features = features @@ -4209,7 +4208,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImagePropertiesProvisioningState"]] = None self.features = features @@ -4288,9 +4287,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImageVersionPropertiesProvisioningState"]] = None self.storage_profile = storage_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryImageVersionList(_serialization.Model): @@ -4464,9 +4463,9 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImageVersionPropertiesProvisioningState"]] = None self.storage_profile = storage_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryList(_serialization.Model): @@ -4592,7 +4591,7 @@ def __init__( super().__init__(tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryPropertiesProvisioningState"]] = None self.sharing_profile = sharing_profile self.soft_delete_policy = soft_delete_policy @@ -4818,7 +4817,7 @@ def __init__( self.extended_location = extended_location self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.hyper_v_generation = hyper_v_generation @@ -5299,7 +5298,7 @@ def __init__( self.offer = offer self.sku = sku self.version = version - self.exact_version = None + self.exact_version: Optional[str] = None self.shared_gallery_image_id = shared_gallery_image_id @@ -5417,7 +5416,7 @@ def __init__( super().__init__(tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.hyper_v_generation = hyper_v_generation @@ -5637,17 +5636,17 @@ class LastPatchInstallationSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.installation_activity_id = None - self.maintenance_window_exceeded = None - self.not_selected_patch_count = None - self.excluded_patch_count = None - self.pending_patch_count = None - self.installed_patch_count = None - self.failed_patch_count = None - self.start_time = None - self.last_modified_time = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.installation_activity_id: Optional[str] = None + self.maintenance_window_exceeded: Optional[bool] = None + self.not_selected_patch_count: Optional[int] = None + self.excluded_patch_count: Optional[int] = None + self.pending_patch_count: Optional[int] = None + self.installed_patch_count: Optional[int] = None + self.failed_patch_count: Optional[int] = None + self.start_time: Optional[datetime.datetime] = None + self.last_modified_time: Optional[datetime.datetime] = None + self.error: Optional["_models.ApiError"] = None class LinuxConfiguration(_serialization.Model): @@ -5958,7 +5957,7 @@ class LogAnalyticsOperationResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None + self.properties: Optional["_models.LogAnalyticsOutput"] = None class LogAnalyticsOutput(_serialization.Model): @@ -5981,7 +5980,7 @@ class LogAnalyticsOutput(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.output = None + self.output: Optional[str] = None class MaintenanceRedeployStatus(_serialization.Model): @@ -6294,8 +6293,8 @@ class OrchestrationServiceSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.service_name = None - self.service_state = None + self.service_name: Optional[Union[str, "_models.OrchestrationServiceNames"]] = None + self.service_state: Optional[Union[str, "_models.OrchestrationServiceState"]] = None class OSDisk(_serialization.Model): @@ -6719,12 +6718,12 @@ class PatchInstallationDetail(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.patch_id = None - self.name = None - self.version = None - self.kb_id = None - self.classifications = None - self.installation_state = None + self.patch_id: Optional[str] = None + self.name: Optional[str] = None + self.version: Optional[str] = None + self.kb_id: Optional[str] = None + self.classifications: Optional[List[str]] = None + self.installation_state: Optional[Union[str, "_models.PatchInstallationState"]] = None class PatchSettings(_serialization.Model): @@ -6826,8 +6825,8 @@ class PirResource(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.location = None + self.name: Optional[str] = None + self.location: Optional[str] = None class PirSharedGalleryResource(PirResource): @@ -7005,9 +7004,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.proximity_placement_group_type = proximity_placement_group_type - self.virtual_machines = None - self.virtual_machine_scale_sets = None - self.availability_sets = None + self.virtual_machines: Optional[List["_models.SubResourceWithColocationStatus"]] = None + self.virtual_machine_scale_sets: Optional[List["_models.SubResourceWithColocationStatus"]] = None + self.availability_sets: Optional[List["_models.SubResourceWithColocationStatus"]] = None self.colocation_status = colocation_status @@ -7082,9 +7081,9 @@ class ProxyResource(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None class PublicIPAddressSku(_serialization.Model): @@ -7220,8 +7219,8 @@ class RecoveryWalkResponse(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.walk_performed = None - self.next_platform_update_domain = None + self.walk_performed: Optional[bool] = None + self.next_platform_update_domain: Optional[int] = None class RegionalReplicationStatus(_serialization.Model): @@ -7257,10 +7256,10 @@ class RegionalReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.region = None - self.state = None - self.details = None - self.progress = None + self.region: Optional[str] = None + self.state: Optional[Union[str, "_models.ReplicationState"]] = None + self.details: Optional[str] = None + self.progress: Optional[int] = None class ReplicationStatus(_serialization.Model): @@ -7289,8 +7288,8 @@ class ReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.aggregated_state = None - self.summary = None + self.aggregated_state: Optional[Union[str, "_models.AggregatedReplicationState"]] = None + self.summary: Optional[List["_models.RegionalReplicationStatus"]] = None class RequestRateByIntervalInput(LogAnalyticsInputBase): @@ -7493,19 +7492,19 @@ class ResourceSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.name = None - self.tier = None - self.size = None - self.family = None - self.kind = None - self.capacity = None - self.locations = None - self.location_info = None - self.api_versions = None - self.costs = None - self.capabilities = None - self.restrictions = None + self.resource_type: Optional[str] = None + self.name: Optional[str] = None + self.tier: Optional[str] = None + self.size: Optional[str] = None + self.family: Optional[str] = None + self.kind: Optional[str] = None + self.capacity: Optional["_models.ResourceSkuCapacity"] = None + self.locations: Optional[List[str]] = None + self.location_info: Optional[List["_models.ResourceSkuLocationInfo"]] = None + self.api_versions: Optional[List[str]] = None + self.costs: Optional[List["_models.ResourceSkuCosts"]] = None + self.capabilities: Optional[List["_models.ResourceSkuCapabilities"]] = None + self.restrictions: Optional[List["_models.ResourceSkuRestrictions"]] = None class ResourceSkuCapabilities(_serialization.Model): @@ -7532,8 +7531,8 @@ class ResourceSkuCapabilities(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.value = None + self.name: Optional[str] = None + self.value: Optional[str] = None class ResourceSkuCapacity(_serialization.Model): @@ -7569,10 +7568,10 @@ class ResourceSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.ResourceSkuCapacityScaleType"]] = None class ResourceSkuCosts(_serialization.Model): @@ -7603,9 +7602,9 @@ class ResourceSkuCosts(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.meter_id = None - self.quantity = None - self.extended_unit = None + self.meter_id: Optional[str] = None + self.quantity: Optional[int] = None + self.extended_unit: Optional[str] = None class ResourceSkuLocationInfo(_serialization.Model): @@ -7644,11 +7643,11 @@ class ResourceSkuLocationInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.location = None - self.zones = None - self.zone_details = None - self.extended_locations = None - self.type = None + self.location: Optional[str] = None + self.zones: Optional[List[str]] = None + self.zone_details: Optional[List["_models.ResourceSkuZoneDetails"]] = None + self.extended_locations: Optional[List[str]] = None + self.type: Optional[Union[str, "_models.ExtendedLocationType"]] = None class ResourceSkuRestrictionInfo(_serialization.Model): @@ -7675,8 +7674,8 @@ class ResourceSkuRestrictionInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.locations = None - self.zones = None + self.locations: Optional[List[str]] = None + self.zones: Optional[List[str]] = None class ResourceSkuRestrictions(_serialization.Model): @@ -7714,10 +7713,10 @@ class ResourceSkuRestrictions(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.type = None - self.values = None - self.restriction_info = None - self.reason_code = None + self.type: Optional[Union[str, "_models.ResourceSkuRestrictionsType"]] = None + self.values: Optional[List[str]] = None + self.restriction_info: Optional["_models.ResourceSkuRestrictionInfo"] = None + self.reason_code: Optional[Union[str, "_models.ResourceSkuRestrictionsReasonCode"]] = None class ResourceSkusResult(_serialization.Model): @@ -7779,8 +7778,8 @@ class ResourceSkuZoneDetails(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.capabilities = None + self.name: Optional[List[str]] = None + self.capabilities: Optional[List["_models.ResourceSkuCapabilities"]] = None class RestorePoint(ProxyResource): @@ -7846,9 +7845,9 @@ def __init__( """ super().__init__(**kwargs) self.exclude_disks = exclude_disks - self.source_metadata = None - self.provisioning_state = None - self.consistency_mode = None + self.source_metadata: Optional["_models.RestorePointSourceMetadata"] = None + self.provisioning_state: Optional[str] = None + self.consistency_mode: Optional[Union[str, "_models.ConsistencyModeTypes"]] = None self.time_created = time_created @@ -7923,9 +7922,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.source = source - self.provisioning_state = None - self.restore_point_collection_id = None - self.restore_points = None + self.provisioning_state: Optional[str] = None + self.restore_point_collection_id: Optional[str] = None + self.restore_points: Optional[List["_models.RestorePoint"]] = None class RestorePointCollectionListResult(_serialization.Model): @@ -7988,7 +7987,7 @@ def __init__(self, *, id: Optional[str] = None, **kwargs: Any) -> None: # pylin :paramtype id: str """ super().__init__(**kwargs) - self.location = None + self.location: Optional[str] = None self.id = id @@ -8042,9 +8041,9 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.source = source - self.provisioning_state = None - self.restore_point_collection_id = None - self.restore_points = None + self.provisioning_state: Optional[str] = None + self.restore_point_collection_id: Optional[str] = None + self.restore_points: Optional[List["_models.RestorePoint"]] = None class RestorePointSourceMetadata(_serialization.Model): @@ -8314,8 +8313,8 @@ class RetrieveBootDiagnosticsDataResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None class RollbackStatusInfo(_serialization.Model): @@ -8347,9 +8346,9 @@ class RollbackStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successfully_rolledback_instance_count = None - self.failed_rolledback_instance_count = None - self.rollback_error = None + self.successfully_rolledback_instance_count: Optional[int] = None + self.failed_rolledback_instance_count: Optional[int] = None + self.rollback_error: Optional["_models.ApiError"] = None class RollingUpgradePolicy(_serialization.Model): @@ -8481,10 +8480,10 @@ class RollingUpgradeProgressInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successful_instance_count = None - self.failed_instance_count = None - self.in_progress_instance_count = None - self.pending_instance_count = None + self.successful_instance_count: Optional[int] = None + self.failed_instance_count: Optional[int] = None + self.in_progress_instance_count: Optional[int] = None + self.pending_instance_count: Optional[int] = None class RollingUpgradeRunningStatus(_serialization.Model): @@ -8521,10 +8520,10 @@ class RollingUpgradeRunningStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.last_action = None - self.last_action_time = None + self.code: Optional[Union[str, "_models.RollingUpgradeStatusCode"]] = None + self.start_time: Optional[datetime.datetime] = None + self.last_action: Optional[Union[str, "_models.RollingUpgradeActionType"]] = None + self.last_action_time: Optional[datetime.datetime] = None class RollingUpgradeStatusInfo(Resource): @@ -8586,10 +8585,10 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(location=location, tags=tags, **kwargs) - self.policy = None - self.running_status = None - self.progress = None - self.error = None + self.policy: Optional["_models.RollingUpgradePolicy"] = None + self.running_status: Optional["_models.RollingUpgradeRunningStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None class RunCommandDocumentBase(_serialization.Model): @@ -9386,7 +9385,7 @@ def __init__( """ super().__init__(**kwargs) self.permissions = permissions - self.groups = None + self.groups: Optional[List["_models.SharingProfileGroup"]] = None class SharingProfileGroup(_serialization.Model): @@ -9636,7 +9635,7 @@ class SshPublicKeyGenerateKeyPairResult(_serialization.Model): through ssh. The public key is in ssh-rsa format. Required. :vartype public_key: str :ivar id: The ARM resource id in the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. Required. :vartype id: str """ @@ -9665,7 +9664,7 @@ def __init__( machine through ssh. The public key is in ssh-rsa format. Required. :paramtype public_key: str :keyword id: The ARM resource id in the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. Required. :paramtype id: str """ @@ -9879,7 +9878,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SubResourceWithColocationStatus(SubResource): @@ -10097,9 +10096,9 @@ class UpgradeOperationHistoricalStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None - self.type = None - self.location = None + self.properties: Optional["_models.UpgradeOperationHistoricalStatusInfoProperties"] = None + self.type: Optional[str] = None + self.location: Optional[str] = None class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # pylint: disable=name-too-long @@ -10143,12 +10142,12 @@ class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # p def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.running_status = None - self.progress = None - self.error = None - self.started_by = None - self.target_image_reference = None - self.rollback_info = None + self.running_status: Optional["_models.UpgradeOperationHistoryStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None + self.started_by: Optional[Union[str, "_models.UpgradeOperationInvoker"]] = None + self.target_image_reference: Optional["_models.ImageReference"] = None + self.rollback_info: Optional["_models.RollbackStatusInfo"] = None class UpgradeOperationHistoryStatus(_serialization.Model): @@ -10180,9 +10179,9 @@ class UpgradeOperationHistoryStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.end_time = None + self.code: Optional[Union[str, "_models.UpgradeState"]] = None + self.start_time: Optional[datetime.datetime] = None + self.end_time: Optional[datetime.datetime] = None class UpgradePolicy(_serialization.Model): @@ -10422,8 +10421,8 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None class VaultCertificate(_serialization.Model): @@ -10894,7 +10893,7 @@ def __init__( # pylint: disable=too-many-locals """ super().__init__(location=location, tags=tags, **kwargs) self.plan = plan - self.resources = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None self.identity = identity self.zones = zones self.extended_location = extended_location @@ -10913,10 +10912,10 @@ def __init__( # pylint: disable=too-many-locals self.billing_profile = billing_profile self.host = host self.host_group = host_group - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None self.extensions_time_budget = extensions_time_budget self.platform_fault_domain = platform_fault_domain self.scheduled_events_profile = scheduled_events_profile @@ -11024,14 +11023,14 @@ class VirtualMachineAssessPatchesResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.assessment_activity_id = None - self.reboot_pending = None - self.critical_and_security_patch_count = None - self.other_patch_count = None - self.start_date_time = None - self.available_patches = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.assessment_activity_id: Optional[str] = None + self.reboot_pending: Optional[bool] = None + self.critical_and_security_patch_count: Optional[int] = None + self.other_patch_count: Optional[int] = None + self.start_date_time: Optional[datetime.datetime] = None + self.available_patches: Optional[List["_models.VirtualMachineSoftwarePatchProperties"]] = None + self.error: Optional["_models.ApiError"] = None class VirtualMachineCaptureParameters(_serialization.Model): @@ -11116,10 +11115,10 @@ def __init__(self, *, id: Optional[str] = None, **kwargs: Any) -> None: # pylin :paramtype id: str """ super().__init__(id=id, **kwargs) - self.schema = None - self.content_version = None - self.parameters = None - self.resources = None + self.schema: Optional[str] = None + self.content_version: Optional[str] = None + self.parameters: Optional[JSON] = None + self.resources: Optional[List[JSON]] = None class VirtualMachineExtension(Resource): @@ -11260,7 +11259,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view self.suppress_failures = suppress_failures @@ -11589,7 +11588,7 @@ class VirtualMachineHealthStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None + self.status: Optional["_models.InstanceViewStatus"] = None class VirtualMachineIdentity(_serialization.Model): @@ -11610,7 +11609,7 @@ class VirtualMachineIdentity(_serialization.Model): :vartype type: str or ~azure.mgmt.compute.v2021_07_01.models.ResourceIdentityType :ivar user_assigned_identities: The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2021_07_01.models.UserAssignedIdentitiesValue] """ @@ -11642,13 +11641,13 @@ def __init__( :paramtype type: str or ~azure.mgmt.compute.v2021_07_01.models.ResourceIdentityType :keyword user_assigned_identities: The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2021_07_01.models.UserAssignedIdentitiesValue] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.user_assigned_identities = user_assigned_identities @@ -12001,18 +12000,18 @@ class VirtualMachineInstallPatchesResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.installation_activity_id = None - self.reboot_status = None - self.maintenance_window_exceeded = None - self.excluded_patch_count = None - self.not_selected_patch_count = None - self.pending_patch_count = None - self.installed_patch_count = None - self.failed_patch_count = None - self.patches = None - self.start_date_time = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.installation_activity_id: Optional[str] = None + self.reboot_status: Optional[Union[str, "_models.VMGuestPatchRebootStatus"]] = None + self.maintenance_window_exceeded: Optional[bool] = None + self.excluded_patch_count: Optional[int] = None + self.not_selected_patch_count: Optional[int] = None + self.pending_patch_count: Optional[int] = None + self.installed_patch_count: Optional[int] = None + self.failed_patch_count: Optional[int] = None + self.patches: Optional[List["_models.PatchInstallationDetail"]] = None + self.start_date_time: Optional[datetime.datetime] = None + self.error: Optional["_models.ApiError"] = None class VirtualMachineInstanceView(_serialization.Model): @@ -12155,9 +12154,9 @@ def __init__( self.maintenance_redeploy_status = maintenance_redeploy_status self.disks = disks self.extensions = extensions - self.vm_health = None + self.vm_health: Optional["_models.VirtualMachineHealthStatus"] = None self.boot_diagnostics = boot_diagnostics - self.assigned_host = None + self.assigned_host: Optional[str] = None self.statuses = statuses self.patch_status = patch_status @@ -12520,7 +12519,7 @@ def __init__( super().__init__(**kwargs) self.available_patch_summary = available_patch_summary self.last_patch_installation_summary = last_patch_installation_summary - self.configuration_statuses = None + self.configuration_statuses: Optional[List["_models.InstanceViewStatus"]] = None class VirtualMachinePublicIPAddressConfiguration(_serialization.Model): # pylint: disable=name-too-long @@ -12808,8 +12807,8 @@ def __init__( self.timeout_in_seconds = timeout_in_seconds self.output_blob_uri = output_blob_uri self.error_blob_uri = error_blob_uri - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineRunCommandInstanceView"] = None class VirtualMachineRunCommandInstanceView(_serialization.Model): @@ -13070,8 +13069,8 @@ def __init__( self.timeout_in_seconds = timeout_in_seconds self.output_blob_uri = output_blob_uri self.error_blob_uri = error_blob_uri - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineRunCommandInstanceView"] = None class VirtualMachineScaleSet(Resource): @@ -13306,10 +13305,10 @@ def __init__( # pylint: disable=too-many-locals self.upgrade_policy = upgrade_policy self.automatic_repairs_policy = automatic_repairs_policy self.virtual_machine_profile = virtual_machine_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.overprovision = overprovision self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms - self.unique_id = None + self.unique_id: Optional[str] = None self.single_placement_group = single_placement_group self.zone_balance = zone_balance self.platform_fault_domain_count = platform_fault_domain_count @@ -13557,7 +13556,7 @@ def __init__( """ super().__init__(**kwargs) self.name = name - self.type = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -13566,7 +13565,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.provision_after_extensions = provision_after_extensions self.suppress_failures = suppress_failures @@ -13762,8 +13761,8 @@ def __init__( :paramtype suppress_failures: bool """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -13772,7 +13771,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.provision_after_extensions = provision_after_extensions self.suppress_failures = suppress_failures @@ -13796,7 +13795,7 @@ class VirtualMachineScaleSetIdentity(_serialization.Model): :vartype type: str or ~azure.mgmt.compute.v2021_07_01.models.ResourceIdentityType :ivar user_assigned_identities: The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2021_07_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue] """ @@ -13835,13 +13834,13 @@ def __init__( :keyword user_assigned_identities: The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2021_07_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.user_assigned_identities = user_assigned_identities @@ -13870,8 +13869,8 @@ class VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue(_serialization.M def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None class VirtualMachineScaleSetInstanceView(_serialization.Model): @@ -13911,10 +13910,10 @@ def __init__(self, *, statuses: Optional[List["_models.InstanceViewStatus"]] = N :paramtype statuses: list[~azure.mgmt.compute.v2021_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.virtual_machine = None - self.extensions = None + self.virtual_machine: Optional["_models.VirtualMachineScaleSetInstanceViewStatusesSummary"] = None + self.extensions: Optional[List["_models.VirtualMachineScaleSetVMExtensionsSummary"]] = None self.statuses = statuses - self.orchestration_services = None + self.orchestration_services: Optional[List["_models.OrchestrationServiceSummary"]] = None class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): # pylint: disable=name-too-long @@ -13938,7 +13937,7 @@ class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.statuses_summary = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetIPConfiguration(SubResource): @@ -14424,7 +14423,7 @@ class VirtualMachineScaleSetNetworkProfile(_serialization.Model): :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :vartype health_probe: ~azure.mgmt.compute.v2021_07_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: @@ -14455,7 +14454,7 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :paramtype health_probe: ~azure.mgmt.compute.v2021_07_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: @@ -14929,9 +14928,9 @@ class VirtualMachineScaleSetSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.sku = None - self.capacity = None + self.resource_type: Optional[str] = None + self.sku: Optional["_models.Sku"] = None + self.capacity: Optional["_models.VirtualMachineScaleSetSkuCapacity"] = None class VirtualMachineScaleSetSkuCapacity(_serialization.Model): @@ -14968,10 +14967,10 @@ class VirtualMachineScaleSetSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default_capacity = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default_capacity: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.VirtualMachineScaleSetSkuScaleType"]] = None class VirtualMachineScaleSetStorageProfile(_serialization.Model): @@ -15399,7 +15398,7 @@ class VirtualMachineScaleSetUpdateNetworkProfile(_serialization.Model): # pylin :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :vartype health_probe: ~azure.mgmt.compute.v2021_07_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: @@ -15432,7 +15431,7 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. :paramtype health_probe: ~azure.mgmt.compute.v2021_07_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: @@ -15994,14 +15993,14 @@ def __init__( # pylint: disable=too-many-locals :paramtype user_data: str """ super().__init__(location=location, tags=tags, **kwargs) - self.instance_id = None - self.sku = None + self.instance_id: Optional[str] = None + self.sku: Optional["_models.Sku"] = None self.plan = plan - self.resources = None - self.zones = None - self.latest_model_applied = None - self.vm_id = None - self.instance_view = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None + self.zones: Optional[List[str]] = None + self.latest_model_applied: Optional[bool] = None + self.vm_id: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineScaleSetVMInstanceView"] = None self.hardware_profile = hardware_profile self.storage_profile = storage_profile self.additional_capabilities = additional_capabilities @@ -16011,9 +16010,9 @@ def __init__( # pylint: disable=too-many-locals self.network_profile_configuration = network_profile_configuration self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.license_type = license_type - self.model_definition_applied = None + self.model_definition_applied: Optional[str] = None self.protection_policy = protection_policy self.user_data = user_data @@ -16133,8 +16132,8 @@ def __init__( :paramtype suppress_failures: bool """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -16143,7 +16142,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view self.suppress_failures = suppress_failures @@ -16196,8 +16195,8 @@ class VirtualMachineScaleSetVMExtensionsSummary(_serialization.Model): # pylint def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.statuses_summary = None + self.name: Optional[str] = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetVMExtensionUpdate(SubResourceReadOnly): @@ -16303,8 +16302,8 @@ def __init__( :paramtype suppress_failures: bool """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -16477,10 +16476,10 @@ def __init__( self.maintenance_redeploy_status = maintenance_redeploy_status self.disks = disks self.extensions = extensions - self.vm_health = None + self.vm_health: Optional["_models.VirtualMachineHealthStatus"] = None self.boot_diagnostics = boot_diagnostics self.statuses = statuses - self.assigned_host = None + self.assigned_host: Optional[str] = None self.placement_group_id = placement_group_id @@ -16922,16 +16921,16 @@ class VirtualMachineSoftwarePatchProperties(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.patch_id = None - self.name = None - self.version = None - self.kb_id = None - self.classifications = None - self.reboot_behavior = None - self.activity_id = None - self.published_date = None - self.last_modified_date_time = None - self.assessment_state = None + self.patch_id: Optional[str] = None + self.name: Optional[str] = None + self.version: Optional[str] = None + self.kb_id: Optional[str] = None + self.classifications: Optional[List[str]] = None + self.reboot_behavior: Optional[Union[str, "_models.VMGuestPatchRebootBehavior"]] = None + self.activity_id: Optional[str] = None + self.published_date: Optional[datetime.datetime] = None + self.last_modified_date_time: Optional[datetime.datetime] = None + self.assessment_state: Optional[Union[str, "_models.PatchAssessmentState"]] = None class VirtualMachineStatusCodeCount(_serialization.Model): @@ -16958,8 +16957,8 @@ class VirtualMachineStatusCodeCount(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.count = None + self.code: Optional[str] = None + self.count: Optional[int] = None class VirtualMachineUpdate(UpdateResource): @@ -17299,10 +17298,10 @@ def __init__( # pylint: disable=too-many-locals self.billing_profile = billing_profile self.host = host self.host_group = host_group - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None self.extensions_time_budget = extensions_time_budget self.platform_fault_domain = platform_fault_domain self.scheduled_events_profile = scheduled_events_profile @@ -17321,7 +17320,7 @@ class VMGalleryApplication(_serialization.Model): :ivar order: Optional, Specifies the order in which the packages have to be installed. :vartype order: int :ivar package_reference_id: Specifies the GalleryApplicationVersion resource id on the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version}. Required. :vartype package_reference_id: str :ivar configuration_reference: Optional, Specifies the uri to an azure blob that will replace @@ -17356,7 +17355,7 @@ def __init__( :paramtype order: int :keyword package_reference_id: Specifies the GalleryApplicationVersion resource id on the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version}. Required. :paramtype package_reference_id: str :keyword configuration_reference: Optional, Specifies the uri to an azure blob that will diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/operations/_operations.py index 8f5241fe1265..23b163b43f7e 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_07_01/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, List, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -77,7 +75,7 @@ def build_availability_sets_create_or_update_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -111,7 +109,7 @@ def build_availability_sets_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -141,7 +139,7 @@ def build_availability_sets_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -169,7 +167,7 @@ def build_availability_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -226,7 +224,7 @@ def build_availability_sets_list_request(resource_group_name: str, subscription_ _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -256,7 +254,7 @@ def build_availability_sets_list_available_sizes_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -288,7 +286,7 @@ def build_proximity_placement_groups_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -324,7 +322,7 @@ def build_proximity_placement_groups_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -356,7 +354,7 @@ def build_proximity_placement_groups_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -391,7 +389,7 @@ def build_proximity_placement_groups_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "proximityPlacementGroupName": _SERIALIZER.url( @@ -456,7 +454,7 @@ def build_proximity_placement_groups_list_by_resource_group_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -487,7 +485,7 @@ def build_dedicated_host_groups_create_or_update_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -521,7 +519,7 @@ def build_dedicated_host_groups_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -551,7 +549,7 @@ def build_dedicated_host_groups_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -584,7 +582,7 @@ def build_dedicated_host_groups_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -617,7 +615,7 @@ def build_dedicated_host_groups_list_by_resource_group_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -674,7 +672,7 @@ def build_dedicated_hosts_create_or_update_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -709,7 +707,7 @@ def build_dedicated_hosts_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -740,7 +738,7 @@ def build_dedicated_hosts_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -775,7 +773,7 @@ def build_dedicated_hosts_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -809,7 +807,7 @@ def build_dedicated_hosts_list_by_host_group_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -866,7 +864,7 @@ def build_ssh_public_keys_list_by_resource_group_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -897,7 +895,7 @@ def build_ssh_public_keys_create_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -931,7 +929,7 @@ def build_ssh_public_keys_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -961,7 +959,7 @@ def build_ssh_public_keys_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -989,7 +987,7 @@ def build_ssh_public_keys_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -1020,7 +1018,7 @@ def build_ssh_public_keys_generate_key_pair_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}/generateKeyPair", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -1051,7 +1049,7 @@ def build_virtual_machine_extension_images_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1084,7 +1082,7 @@ def build_virtual_machine_extension_images_list_types_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1123,7 +1121,7 @@ def build_virtual_machine_extension_images_list_versions_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1162,7 +1160,7 @@ def build_virtual_machine_extensions_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1197,7 +1195,7 @@ def build_virtual_machine_extensions_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1228,7 +1226,7 @@ def build_virtual_machine_extensions_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1263,7 +1261,7 @@ def build_virtual_machine_extensions_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1297,7 +1295,7 @@ def build_virtual_machine_extensions_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1330,7 +1328,7 @@ def build_virtual_machine_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1373,7 +1371,7 @@ def build_virtual_machine_images_list_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1412,7 +1410,7 @@ def build_virtual_machine_images_list_offers_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1442,7 +1440,7 @@ def build_virtual_machine_images_list_publishers_request( # pylint: disable=nam # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1472,7 +1470,7 @@ def build_virtual_machine_images_list_skus_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -1511,7 +1509,7 @@ def build_virtual_machine_images_edge_zone_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -1556,7 +1554,7 @@ def build_virtual_machine_images_edge_zone_list_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -1596,7 +1594,7 @@ def build_virtual_machine_images_edge_zone_list_offers_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -1628,7 +1626,7 @@ def build_virtual_machine_images_edge_zone_list_publishers_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -1659,7 +1657,7 @@ def build_virtual_machine_images_edge_zone_list_skus_request( # pylint: disable _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -1689,7 +1687,7 @@ def build_usage_list_request(location: str, subscription_id: str, **kwargs: Any) # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1719,7 +1717,7 @@ def build_virtual_machines_list_by_location_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1750,7 +1748,7 @@ def build_virtual_machines_capture_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1784,7 +1782,7 @@ def build_virtual_machines_create_or_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1818,7 +1816,7 @@ def build_virtual_machines_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1853,7 +1851,7 @@ def build_virtual_machines_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1888,7 +1886,7 @@ def build_virtual_machines_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1921,7 +1919,7 @@ def build_virtual_machines_instance_view_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1949,7 +1947,7 @@ def build_virtual_machines_convert_to_managed_disks_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -1974,7 +1972,7 @@ def build_virtual_machines_deallocate_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2001,7 +1999,7 @@ def build_virtual_machines_generalize_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2027,7 +2025,7 @@ def build_virtual_machines_list_request(resource_group_name: str, subscription_i _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2085,7 +2083,7 @@ def build_virtual_machines_list_available_sizes_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2113,7 +2111,7 @@ def build_virtual_machines_power_off_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2143,7 +2141,7 @@ def build_virtual_machines_reapply_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reapply", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2171,7 +2169,7 @@ def build_virtual_machines_restart_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2196,7 +2194,7 @@ def build_virtual_machines_start_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2221,7 +2219,7 @@ def build_virtual_machines_redeploy_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2248,7 +2246,7 @@ def build_virtual_machines_reimage_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2285,7 +2283,7 @@ def build_virtual_machines_retrieve_boot_diagnostics_data_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/retrieveBootDiagnosticsData", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2317,7 +2315,7 @@ def build_virtual_machines_perform_maintenance_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2342,7 +2340,7 @@ def build_virtual_machines_simulate_eviction_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2370,7 +2368,7 @@ def build_virtual_machines_assess_patches_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/assessPatches", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2402,7 +2400,7 @@ def build_virtual_machines_install_patches_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/installPatches", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2436,7 +2434,7 @@ def build_virtual_machines_run_command_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2469,7 +2467,7 @@ def build_virtual_machine_scale_sets_list_by_location_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachineScaleSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2500,7 +2498,7 @@ def build_virtual_machine_scale_sets_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2534,7 +2532,7 @@ def build_virtual_machine_scale_sets_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2569,7 +2567,7 @@ def build_virtual_machine_scale_sets_delete_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2604,7 +2602,7 @@ def build_virtual_machine_scale_sets_get_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2636,7 +2634,7 @@ def build_virtual_machine_scale_sets_deallocate_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2672,7 +2670,7 @@ def build_virtual_machine_scale_sets_delete_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2706,7 +2704,7 @@ def build_virtual_machine_scale_sets_get_instance_view_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2737,7 +2735,7 @@ def build_virtual_machine_scale_sets_list_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2795,7 +2793,7 @@ def build_virtual_machine_scale_sets_list_skus_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2826,7 +2824,7 @@ def build_virtual_machine_scale_sets_get_os_upgrade_history_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2861,7 +2859,7 @@ def build_virtual_machine_scale_sets_power_off_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2894,7 +2892,7 @@ def build_virtual_machine_scale_sets_restart_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2925,7 +2923,7 @@ def build_virtual_machine_scale_sets_start_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2956,7 +2954,7 @@ def build_virtual_machine_scale_sets_redeploy_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2987,7 +2985,7 @@ def build_virtual_machine_scale_sets_perform_maintenance_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3018,7 +3016,7 @@ def build_virtual_machine_scale_sets_update_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3049,7 +3047,7 @@ def build_virtual_machine_scale_sets_reimage_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3080,7 +3078,7 @@ def build_virtual_machine_scale_sets_reimage_all_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3117,7 +3115,7 @@ def build_virtual_machine_scale_sets_force_recovery_service_fabric_platform_upda _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3148,7 +3146,7 @@ def build_virtual_machine_scale_sets_convert_to_single_placement_group_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/convertToSinglePlacementGroup", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3179,7 +3177,7 @@ def build_virtual_machine_scale_sets_set_orchestration_service_state_request( # _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/setOrchestrationServiceState", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -3208,7 +3206,7 @@ def build_virtual_machine_sizes_list_request(location: str, subscription_id: str # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -3239,7 +3237,7 @@ def build_images_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -3273,7 +3271,7 @@ def build_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -3303,7 +3301,7 @@ def build_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -3331,7 +3329,7 @@ def build_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -3364,7 +3362,7 @@ def build_images_list_by_resource_group_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -3419,7 +3417,7 @@ def build_restore_point_collections_create_or_update_request( # pylint: disable _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3455,7 +3453,7 @@ def build_restore_point_collections_update_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3490,7 +3488,7 @@ def build_restore_point_collections_delete_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3528,7 +3526,7 @@ def build_restore_point_collections_get_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3563,7 +3561,7 @@ def build_restore_point_collections_list_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3626,7 +3624,7 @@ def build_restore_points_create_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3666,7 +3664,7 @@ def build_restore_points_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3704,7 +3702,7 @@ def build_restore_points_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -3739,7 +3737,7 @@ def build_capacity_reservation_groups_create_or_update_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -3775,7 +3773,7 @@ def build_capacity_reservation_groups_update_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -3810,7 +3808,7 @@ def build_capacity_reservation_groups_delete_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -3848,7 +3846,7 @@ def build_capacity_reservation_groups_get_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -3887,7 +3885,7 @@ def build_capacity_reservation_groups_list_by_resource_group_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -3921,7 +3919,7 @@ def build_capacity_reservation_groups_list_by_subscription_request( # pylint: d # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/capacityReservationGroups" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } @@ -3957,7 +3955,7 @@ def build_capacity_reservations_create_or_update_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -3998,7 +3996,7 @@ def build_capacity_reservations_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -4038,7 +4036,7 @@ def build_capacity_reservations_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -4078,7 +4076,7 @@ def build_capacity_reservations_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -4114,7 +4112,7 @@ def build_capacity_reservations_list_by_capacity_reservation_group_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -4148,7 +4146,7 @@ def build_virtual_machine_scale_set_extensions_create_or_update_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4183,7 +4181,7 @@ def build_virtual_machine_scale_set_extensions_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4214,7 +4212,7 @@ def build_virtual_machine_scale_set_extensions_delete_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4249,7 +4247,7 @@ def build_virtual_machine_scale_set_extensions_get_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4283,7 +4281,7 @@ def build_virtual_machine_scale_set_extensions_list_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4311,7 +4309,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_cancel_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4336,7 +4334,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_os_upgrade_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4361,7 +4359,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_extension_upgrade_req _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensionRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4389,7 +4387,7 @@ def build_virtual_machine_scale_set_rolling_upgrades_get_latest_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4426,7 +4424,7 @@ def build_virtual_machine_scale_set_vm_extensions_create_or_update_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4467,7 +4465,7 @@ def build_virtual_machine_scale_set_vm_extensions_update_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4507,7 +4505,7 @@ def build_virtual_machine_scale_set_vm_extensions_delete_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4547,7 +4545,7 @@ def build_virtual_machine_scale_set_vm_extensions_get_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4588,7 +4586,7 @@ def build_virtual_machine_scale_set_vm_extensions_list_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4621,7 +4619,7 @@ def build_virtual_machine_scale_set_vms_reimage_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4651,7 +4649,7 @@ def build_virtual_machine_scale_set_vms_reimage_all_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4677,7 +4675,7 @@ def build_virtual_machine_scale_set_vms_deallocate_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4707,7 +4705,7 @@ def build_virtual_machine_scale_set_vms_update_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4744,7 +4742,7 @@ def build_virtual_machine_scale_set_vms_delete_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4781,7 +4779,7 @@ def build_virtual_machine_scale_set_vms_get_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4815,7 +4813,7 @@ def build_virtual_machine_scale_set_vms_get_instance_view_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4854,7 +4852,7 @@ def build_virtual_machine_scale_set_vms_list_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "virtualMachineScaleSetName": _SERIALIZER.url( @@ -4896,7 +4894,7 @@ def build_virtual_machine_scale_set_vms_power_off_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4924,7 +4922,7 @@ def build_virtual_machine_scale_set_vms_restart_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4950,7 +4948,7 @@ def build_virtual_machine_scale_set_vms_start_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -4976,7 +4974,7 @@ def build_virtual_machine_scale_set_vms_redeploy_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -5011,7 +5009,7 @@ def build_virtual_machine_scale_set_vms_retrieve_boot_diagnostics_data_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/retrieveBootDiagnosticsData", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -5044,7 +5042,7 @@ def build_virtual_machine_scale_set_vms_perform_maintenance_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -5070,7 +5068,7 @@ def build_virtual_machine_scale_set_vms_simulate_eviction_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/simulateEviction", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -5100,7 +5098,7 @@ def build_virtual_machine_scale_set_vms_run_command_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -5135,7 +5133,7 @@ def build_log_analytics_export_request_rate_by_interval_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -5168,7 +5166,7 @@ def build_log_analytics_export_throttled_requests_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -5199,7 +5197,7 @@ def build_virtual_machine_run_commands_list_request( # pylint: disable=name-too # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -5229,7 +5227,7 @@ def build_virtual_machine_run_commands_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "commandId": _SERIALIZER.url("command_id", command_id, "str"), @@ -5261,7 +5259,7 @@ def build_virtual_machine_run_commands_create_or_update_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -5296,7 +5294,7 @@ def build_virtual_machine_run_commands_update_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -5330,7 +5328,7 @@ def build_virtual_machine_run_commands_delete_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -5368,7 +5366,7 @@ def build_virtual_machine_run_commands_get_by_virtual_machine_request( # pylint _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -5402,7 +5400,7 @@ def build_virtual_machine_run_commands_list_by_virtual_machine_request( # pylin _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -5441,7 +5439,7 @@ def build_virtual_machine_scale_set_vm_run_commands_create_or_update_request( # _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -5482,7 +5480,7 @@ def build_virtual_machine_scale_set_vm_run_commands_update_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -5522,7 +5520,7 @@ def build_virtual_machine_scale_set_vm_run_commands_delete_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -5562,7 +5560,7 @@ def build_virtual_machine_scale_set_vm_run_commands_get_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -5603,7 +5601,7 @@ def build_virtual_machine_scale_set_vm_run_commands_list_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -5674,7 +5672,7 @@ def build_galleries_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5708,7 +5706,7 @@ def build_galleries_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5746,7 +5744,7 @@ def build_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5779,7 +5777,7 @@ def build_galleries_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5810,7 +5808,7 @@ def build_galleries_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5865,7 +5863,7 @@ def build_gallery_images_create_or_update_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5900,7 +5898,7 @@ def build_gallery_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5934,7 +5932,7 @@ def build_gallery_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5966,7 +5964,7 @@ def build_gallery_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5998,7 +5996,7 @@ def build_gallery_images_list_by_gallery_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6035,7 +6033,7 @@ def build_gallery_image_versions_create_or_update_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6076,7 +6074,7 @@ def build_gallery_image_versions_update_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6118,7 +6116,7 @@ def build_gallery_image_versions_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6158,7 +6156,7 @@ def build_gallery_image_versions_delete_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6191,7 +6189,7 @@ def build_gallery_image_versions_list_by_gallery_image_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6224,7 +6222,7 @@ def build_gallery_applications_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6259,7 +6257,7 @@ def build_gallery_applications_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6293,7 +6291,7 @@ def build_gallery_applications_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6325,7 +6323,7 @@ def build_gallery_applications_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6357,7 +6355,7 @@ def build_gallery_applications_list_by_gallery_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6394,7 +6392,7 @@ def build_gallery_application_versions_create_or_update_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6437,7 +6435,7 @@ def build_gallery_application_versions_update_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6481,7 +6479,7 @@ def build_gallery_application_versions_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6523,7 +6521,7 @@ def build_gallery_application_versions_delete_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6558,7 +6556,7 @@ def build_gallery_application_versions_list_by_gallery_application_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6591,7 +6589,7 @@ def build_gallery_sharing_profile_update_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/share", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -6628,7 +6626,7 @@ def build_shared_galleries_list_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -6660,7 +6658,7 @@ def build_shared_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -6696,7 +6694,7 @@ def build_shared_gallery_images_list_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -6729,7 +6727,7 @@ def build_shared_gallery_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -6767,7 +6765,7 @@ def build_shared_gallery_image_versions_list_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -6806,7 +6804,7 @@ def build_shared_gallery_image_versions_get_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -6839,7 +6837,7 @@ def build_community_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -6870,7 +6868,7 @@ def build_community_gallery_images_get_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -6907,7 +6905,7 @@ def build_community_gallery_image_versions_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -6941,10 +6939,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -7037,10 +7035,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -7658,10 +7656,10 @@ class ProximityPlacementGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -8212,10 +8210,10 @@ class DedicatedHostGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -8765,10 +8763,10 @@ class DedicatedHostsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -9449,10 +9447,10 @@ class SshPublicKeysOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -10048,10 +10046,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -10263,10 +10261,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -10941,10 +10939,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -11274,10 +11272,10 @@ class VirtualMachineImagesEdgeZoneOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -11629,10 +11627,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -11728,10 +11726,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -14566,10 +14564,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -17937,10 +17935,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -18036,10 +18034,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -18732,10 +18730,10 @@ class RestorePointCollectionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -19347,10 +19345,10 @@ class RestorePointsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_initial( @@ -19739,10 +19737,10 @@ class CapacityReservationGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -20329,10 +20327,10 @@ class CapacityReservationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -21037,10 +21035,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -21742,10 +21740,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _cancel_initial(self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any) -> Iterator[bytes]: @@ -22131,10 +22129,10 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -22847,10 +22845,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _reimage_initial( @@ -24751,10 +24749,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _export_request_rate_by_interval_initial( @@ -25123,10 +25121,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -25960,10 +25958,10 @@ class VirtualMachineScaleSetVMRunCommandsOperations: # pylint: disable=name-too 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -26698,10 +26696,10 @@ class ResourceSkusOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -26803,10 +26801,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -27518,10 +27516,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -28213,10 +28211,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -28991,10 +28989,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -29698,10 +29696,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -30481,10 +30479,10 @@ class GallerySharingProfileOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _update_initial( @@ -30691,10 +30689,10 @@ class SharedGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -30849,10 +30847,10 @@ class SharedGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -31021,10 +31019,10 @@ class SharedGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -31211,10 +31209,10 @@ class CommunityGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -31286,10 +31284,10 @@ class CommunityGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -31366,10 +31364,10 @@ class CommunityGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_compute_management_client.py index c0db86ff27ea..9e6d1ff1dc98 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( GalleriesOperations, GalleryApplicationVersionsOperations, @@ -55,7 +57,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2021-10-01". Note that overriding this default value may result in unsupported behavior. @@ -65,15 +67,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -92,7 +96,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_metadata.json index de488be21641..2be900274dec 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node
    is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/aio/_compute_management_client.py index 4938e55303b1..8c0871696df5 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( GalleriesOperations, @@ -55,7 +57,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2021-10-01". Note that overriding this default value may result in unsupported behavior. @@ -65,15 +67,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -92,7 +96,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/aio/operations/_operations.py index b47705e440e5..291138448348 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/aio/operations/_operations.py @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_galleries_create_or_update_request, build_galleries_delete_request, @@ -61,11 +63,8 @@ build_gallery_images_update_request, build_gallery_sharing_profile_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -84,10 +83,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -810,10 +809,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1506,10 +1505,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2284,10 +2283,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2992,10 +2991,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -3775,10 +3774,10 @@ class GallerySharingProfileOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/models/_models_py3.py index b5463f665c96..b08a828ba310 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/models/_models_py3.py @@ -10,7 +10,7 @@ import datetime from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union -from ... import _serialization +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models @@ -161,8 +161,8 @@ def __init__( self.publisher_contact = publisher_contact self.eula = eula self.public_name_prefix = public_name_prefix - self.community_gallery_enabled = None - self.public_names = None + self.community_gallery_enabled: Optional[bool] = None + self.public_names: Optional[List[str]] = None class DiskImageEncryption(_serialization.Model): @@ -320,9 +320,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -414,10 +414,10 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryPropertiesProvisioningState"]] = None self.sharing_profile = sharing_profile self.soft_delete_policy = soft_delete_policy - self.sharing_status = None + self.sharing_status: Optional["_models.SharingStatus"] = None class GalleryApplication(Resource): @@ -595,9 +595,9 @@ def __init__(self, *, tags: Optional[Dict[str, str]] = None, **kwargs: Any) -> N :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -765,8 +765,10 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[ + Union[str, "_models.GalleryApplicationVersionPropertiesProvisioningState"] + ] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryApplicationVersionList(_serialization.Model): @@ -896,7 +898,7 @@ def __init__( self.target_regions = target_regions self.replica_count = replica_count self.exclude_from_latest = exclude_from_latest - self.published_date = None + self.published_date: Optional[datetime.datetime] = None self.end_of_life_date = end_of_life_date self.storage_account_type = storage_account_type self.replication_mode = replication_mode @@ -1088,8 +1090,10 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[ + Union[str, "_models.GalleryApplicationVersionPropertiesProvisioningState"] + ] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryArtifactSource(_serialization.Model): @@ -1189,7 +1193,7 @@ def __init__( :paramtype source: ~azure.mgmt.compute.v2021_10_01.models.GalleryArtifactVersionSource """ super().__init__(**kwargs) - self.size_in_gb = None + self.size_in_gb: Optional[int] = None self.host_caching = host_caching self.source = source @@ -1302,7 +1306,7 @@ class GalleryIdentifier(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.unique_name = None + self.unique_name: Optional[str] = None class GalleryImage(Resource): @@ -1477,7 +1481,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImagePropertiesProvisioningState"]] = None self.features = features self.architecture = architecture @@ -1745,7 +1749,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImagePropertiesProvisioningState"]] = None self.features = features self.architecture = architecture @@ -1825,9 +1829,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImageVersionPropertiesProvisioningState"]] = None self.storage_profile = storage_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryImageVersionList(_serialization.Model): @@ -2005,9 +2009,9 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryImageVersionPropertiesProvisioningState"]] = None self.storage_profile = storage_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryList(_serialization.Model): @@ -2199,10 +2203,10 @@ def __init__( super().__init__(tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryPropertiesProvisioningState"]] = None self.sharing_profile = sharing_profile self.soft_delete_policy = soft_delete_policy - self.sharing_status = None + self.sharing_status: Optional["_models.SharingStatus"] = None class ImagePurchasePlan(_serialization.Model): @@ -2433,10 +2437,10 @@ class RegionalReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.region = None - self.state = None - self.details = None - self.progress = None + self.region: Optional[str] = None + self.state: Optional[Union[str, "_models.ReplicationState"]] = None + self.details: Optional[str] = None + self.progress: Optional[int] = None class RegionalSharingStatus(_serialization.Model): @@ -2472,7 +2476,7 @@ def __init__(self, *, region: Optional[str] = None, details: Optional[str] = Non """ super().__init__(**kwargs) self.region = region - self.state = None + self.state: Optional[Union[str, "_models.SharingState"]] = None self.details = details @@ -2502,8 +2506,8 @@ class ReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.aggregated_state = None - self.summary = None + self.aggregated_state: Optional[Union[str, "_models.AggregatedReplicationState"]] = None + self.summary: Optional[List["_models.RegionalReplicationStatus"]] = None class ResourceRange(_serialization.Model): @@ -2584,7 +2588,7 @@ def __init__( """ super().__init__(**kwargs) self.permissions = permissions - self.groups = None + self.groups: Optional[List["_models.SharingProfileGroup"]] = None self.community_gallery_info = community_gallery_info @@ -2653,7 +2657,7 @@ def __init__(self, *, summary: Optional[List["_models.RegionalSharingStatus"]] = :paramtype summary: list[~azure.mgmt.compute.v2021_10_01.models.RegionalSharingStatus] """ super().__init__(**kwargs) - self.aggregated_state = None + self.aggregated_state: Optional[Union[str, "_models.SharingState"]] = None self.summary = summary diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/operations/_operations.py index f03d8bbc5260..f16754651abb 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2021_10_01/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -58,7 +56,7 @@ def build_galleries_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -92,7 +90,7 @@ def build_galleries_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -131,7 +129,7 @@ def build_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -166,7 +164,7 @@ def build_galleries_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -197,7 +195,7 @@ def build_galleries_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -252,7 +250,7 @@ def build_gallery_images_create_or_update_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -287,7 +285,7 @@ def build_gallery_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -321,7 +319,7 @@ def build_gallery_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -353,7 +351,7 @@ def build_gallery_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -385,7 +383,7 @@ def build_gallery_images_list_by_gallery_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -422,7 +420,7 @@ def build_gallery_image_versions_create_or_update_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -463,7 +461,7 @@ def build_gallery_image_versions_update_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -505,7 +503,7 @@ def build_gallery_image_versions_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -545,7 +543,7 @@ def build_gallery_image_versions_delete_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -578,7 +576,7 @@ def build_gallery_image_versions_list_by_gallery_image_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -611,7 +609,7 @@ def build_gallery_applications_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -646,7 +644,7 @@ def build_gallery_applications_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -680,7 +678,7 @@ def build_gallery_applications_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -712,7 +710,7 @@ def build_gallery_applications_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -744,7 +742,7 @@ def build_gallery_applications_list_by_gallery_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -781,7 +779,7 @@ def build_gallery_application_versions_create_or_update_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -824,7 +822,7 @@ def build_gallery_application_versions_update_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -868,7 +866,7 @@ def build_gallery_application_versions_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -910,7 +908,7 @@ def build_gallery_application_versions_delete_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -945,7 +943,7 @@ def build_gallery_application_versions_list_by_gallery_application_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -978,7 +976,7 @@ def build_gallery_sharing_profile_update_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/share", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1012,10 +1010,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -1732,10 +1730,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -2427,10 +2425,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3205,10 +3203,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3912,10 +3910,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -4695,10 +4693,10 @@ class GallerySharingProfileOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_compute_management_client.py index 32f81e179fb8..917e7f407945 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( CommunityGalleriesOperations, CommunityGalleryImageVersionsOperations, @@ -78,7 +80,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2022-01-03". Note that overriding this default value may result in unsupported behavior. @@ -88,15 +90,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -115,7 +119,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_metadata.json index 8a847bf8f7a6..f4b807c6f75a 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/aio/_compute_management_client.py index 22fdc5fe351f..1948b5dfc4ef 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( CommunityGalleriesOperations, @@ -79,7 +81,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2022-01-03". Note that overriding this default value may result in unsupported behavior. @@ -89,15 +91,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -116,7 +120,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/aio/operations/_operations.py index 861b61524139..27f57196ba5b 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/aio/operations/_operations.py @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_community_galleries_get_request, build_community_gallery_image_versions_get_request, @@ -72,11 +74,8 @@ build_shared_gallery_images_get_request, build_shared_gallery_images_list_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -95,10 +94,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -821,10 +820,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1517,10 +1516,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2295,10 +2294,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -3003,10 +3002,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -3786,10 +3785,10 @@ class GallerySharingProfileOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _update_initial( @@ -3999,10 +3998,10 @@ class SharedGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4158,10 +4157,10 @@ class SharedGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4331,10 +4330,10 @@ class SharedGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4521,10 +4520,10 @@ class CommunityGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -4596,10 +4595,10 @@ class CommunityGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -4760,10 +4759,10 @@ class CommunityGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/models/_models_py3.py index 8c8e30b76ff0..1d13eb920515 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/models/_models_py3.py @@ -10,7 +10,7 @@ import datetime from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union -from ... import _serialization +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models @@ -137,9 +137,9 @@ def __init__(self, *, unique_id: Optional[str] = None, **kwargs: Any) -> None: :paramtype unique_id: str """ super().__init__(**kwargs) - self.name = None - self.location = None - self.type = None + self.name: Optional[str] = None + self.location: Optional[str] = None + self.type: Optional[str] = None self.unique_id = unique_id @@ -515,8 +515,8 @@ def __init__( self.publisher_contact = publisher_contact self.eula = eula self.public_name_prefix = public_name_prefix - self.community_gallery_enabled = None - self.public_names = None + self.community_gallery_enabled: Optional[bool] = None + self.public_names: Optional[List[str]] = None class DiskImageEncryption(_serialization.Model): @@ -706,9 +706,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -800,10 +800,10 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.sharing_profile = sharing_profile self.soft_delete_policy = soft_delete_policy - self.sharing_status = None + self.sharing_status: Optional["_models.SharingStatus"] = None class GalleryApplication(Resource): @@ -981,9 +981,9 @@ def __init__(self, *, tags: Optional[Dict[str, str]] = None, **kwargs: Any) -> N :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -1151,8 +1151,8 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryApplicationVersionList(_serialization.Model): @@ -1282,7 +1282,7 @@ def __init__( self.target_regions = target_regions self.replica_count = replica_count self.exclude_from_latest = exclude_from_latest - self.published_date = None + self.published_date: Optional[datetime.datetime] = None self.end_of_life_date = end_of_life_date self.storage_account_type = storage_account_type self.replication_mode = replication_mode @@ -1492,8 +1492,8 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryArtifactSource(_serialization.Model): @@ -1593,7 +1593,7 @@ def __init__( :paramtype source: ~azure.mgmt.compute.v2022_01_03.models.GalleryArtifactVersionSource """ super().__init__(**kwargs) - self.size_in_gb = None + self.size_in_gb: Optional[int] = None self.host_caching = host_caching self.source = source @@ -1706,7 +1706,7 @@ class GalleryIdentifier(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.unique_name = None + self.unique_name: Optional[str] = None class GalleryImage(Resource): @@ -1881,7 +1881,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.features = features self.architecture = architecture @@ -2149,7 +2149,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.features = features self.architecture = architecture @@ -2229,9 +2229,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.storage_profile = storage_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryImageVersionList(_serialization.Model): @@ -2409,9 +2409,9 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.storage_profile = storage_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryList(_serialization.Model): @@ -2603,10 +2603,10 @@ def __init__( super().__init__(tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.sharing_profile = sharing_profile self.soft_delete_policy = soft_delete_policy - self.sharing_status = None + self.sharing_status: Optional["_models.SharingStatus"] = None class ImagePurchasePlan(_serialization.Model): @@ -2795,8 +2795,8 @@ class PirResource(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.location = None + self.name: Optional[str] = None + self.location: Optional[str] = None class PirSharedGalleryResource(PirResource): @@ -2898,10 +2898,10 @@ class RegionalReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.region = None - self.state = None - self.details = None - self.progress = None + self.region: Optional[str] = None + self.state: Optional[Union[str, "_models.ReplicationState"]] = None + self.details: Optional[str] = None + self.progress: Optional[int] = None class RegionalSharingStatus(_serialization.Model): @@ -2937,7 +2937,7 @@ def __init__(self, *, region: Optional[str] = None, details: Optional[str] = Non """ super().__init__(**kwargs) self.region = region - self.state = None + self.state: Optional[Union[str, "_models.SharingState"]] = None self.details = details @@ -2967,8 +2967,8 @@ class ReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.aggregated_state = None - self.summary = None + self.aggregated_state: Optional[Union[str, "_models.AggregatedReplicationState"]] = None + self.summary: Optional[List["_models.RegionalReplicationStatus"]] = None class ResourceRange(_serialization.Model): @@ -3043,9 +3043,9 @@ def __init__(self, *, location: Optional[str] = None, tags: Optional[Dict[str, s """ super().__init__(**kwargs) self.location = location - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -3093,7 +3093,7 @@ def __init__( :paramtype host_caching: str or ~azure.mgmt.compute.v2022_01_03.models.SharedGalleryHostCaching """ super().__init__(**kwargs) - self.disk_size_gb = None + self.disk_size_gb: Optional[int] = None self.host_caching = host_caching @@ -3543,7 +3543,7 @@ def __init__( """ super().__init__(**kwargs) self.permissions = permissions - self.groups = None + self.groups: Optional[List["_models.SharingProfileGroup"]] = None self.community_gallery_info = community_gallery_info @@ -3610,7 +3610,7 @@ def __init__(self, *, summary: Optional[List["_models.RegionalSharingStatus"]] = :paramtype summary: list[~azure.mgmt.compute.v2022_01_03.models.RegionalSharingStatus] """ super().__init__(**kwargs) - self.aggregated_state = None + self.aggregated_state: Optional[Union[str, "_models.SharingState"]] = None self.summary = summary @@ -3722,7 +3722,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class TargetRegion(_serialization.Model): @@ -3930,5 +3930,5 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/operations/_operations.py index 8160171ba037..c9ac5162f57c 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_01_03/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -58,7 +56,7 @@ def build_galleries_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -92,7 +90,7 @@ def build_galleries_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -131,7 +129,7 @@ def build_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -166,7 +164,7 @@ def build_galleries_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -197,7 +195,7 @@ def build_galleries_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -252,7 +250,7 @@ def build_gallery_images_create_or_update_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -287,7 +285,7 @@ def build_gallery_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -321,7 +319,7 @@ def build_gallery_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -353,7 +351,7 @@ def build_gallery_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -385,7 +383,7 @@ def build_gallery_images_list_by_gallery_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -422,7 +420,7 @@ def build_gallery_image_versions_create_or_update_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -463,7 +461,7 @@ def build_gallery_image_versions_update_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -505,7 +503,7 @@ def build_gallery_image_versions_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -545,7 +543,7 @@ def build_gallery_image_versions_delete_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -578,7 +576,7 @@ def build_gallery_image_versions_list_by_gallery_image_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -611,7 +609,7 @@ def build_gallery_applications_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -646,7 +644,7 @@ def build_gallery_applications_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -680,7 +678,7 @@ def build_gallery_applications_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -712,7 +710,7 @@ def build_gallery_applications_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -744,7 +742,7 @@ def build_gallery_applications_list_by_gallery_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -781,7 +779,7 @@ def build_gallery_application_versions_create_or_update_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -824,7 +822,7 @@ def build_gallery_application_versions_update_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -868,7 +866,7 @@ def build_gallery_application_versions_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -910,7 +908,7 @@ def build_gallery_application_versions_delete_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -945,7 +943,7 @@ def build_gallery_application_versions_list_by_gallery_application_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -978,7 +976,7 @@ def build_gallery_sharing_profile_update_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/share", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1015,7 +1013,7 @@ def build_shared_galleries_list_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1047,7 +1045,7 @@ def build_shared_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1083,7 +1081,7 @@ def build_shared_gallery_images_list_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1116,7 +1114,7 @@ def build_shared_gallery_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1154,7 +1152,7 @@ def build_shared_gallery_image_versions_list_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1193,7 +1191,7 @@ def build_shared_gallery_image_versions_get_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1226,7 +1224,7 @@ def build_community_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1257,7 +1255,7 @@ def build_community_gallery_images_get_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1289,7 +1287,7 @@ def build_community_gallery_images_list_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1325,7 +1323,7 @@ def build_community_gallery_image_versions_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1358,7 +1356,7 @@ def build_community_gallery_image_versions_list_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1391,10 +1389,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -2111,10 +2109,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -2806,10 +2804,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3584,10 +3582,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -4291,10 +4289,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -5074,10 +5072,10 @@ class GallerySharingProfileOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _update_initial( @@ -5284,10 +5282,10 @@ class SharedGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5442,10 +5440,10 @@ class SharedGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5614,10 +5612,10 @@ class SharedGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5804,10 +5802,10 @@ class CommunityGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5879,10 +5877,10 @@ class CommunityGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6041,10 +6039,10 @@ class CommunityGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_compute_management_client.py index d54fccd8a8fb..05d0eecf6cc1 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( DiskAccessesOperations, DiskEncryptionSetsOperations, @@ -50,7 +52,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2022-03-02". Note that overriding this default value may result in unsupported behavior. @@ -60,15 +62,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -87,7 +91,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_metadata.json index 612ed3bf68ef..2c7936cee861 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/aio/_compute_management_client.py index e8a9a9110f79..acdb9b9576c3 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( DiskAccessesOperations, @@ -50,7 +52,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2022-03-02". Note that overriding this default value may result in unsupported behavior. @@ -60,15 +62,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -87,7 +91,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/aio/operations/_operations.py index 6300a0a711a9..160d911dd3c4 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/aio/operations/_operations.py @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_disk_accesses_create_or_update_request, build_disk_accesses_delete_a_private_endpoint_connection_request, @@ -72,11 +74,8 @@ build_snapshots_revoke_access_request, build_snapshots_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -95,10 +94,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1100,10 +1099,10 @@ class DiskAccessesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2363,10 +2362,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -3190,10 +3189,10 @@ class DiskRestorePointOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3717,10 +3716,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/models/_models_py3.py index 4fa2d9bfa49c..e4fa7f46b495 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -9,7 +9,7 @@ from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union -from ... import _serialization +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models @@ -39,8 +39,8 @@ class AccessUri(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.access_sas = None - self.security_data_access_sas = None + self.access_sas: Optional[str] = None + self.security_data_access_sas: Optional[str] = None class ApiError(_serialization.Model): @@ -281,7 +281,7 @@ def __init__( self.gallery_image_reference = gallery_image_reference self.source_uri = source_uri self.source_resource_id = source_resource_id - self.source_unique_id = None + self.source_unique_id: Optional[str] = None self.upload_size_bytes = upload_size_bytes self.logical_sector_size = logical_sector_size self.security_data_uri = security_data_uri @@ -329,9 +329,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -642,35 +642,35 @@ def __init__( # pylint: disable=too-many-locals ~azure.mgmt.compute.v2022_03_02.models.DataAccessAuthMode """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None - self.managed_by_extended = None + self.managed_by: Optional[str] = None + self.managed_by_extended: Optional[List[str]] = None self.sku = sku self.zones = zones self.extended_location = extended_location - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.disk_iops_read_write = disk_iops_read_write self.disk_m_bps_read_write = disk_m_bps_read_write self.disk_iops_read_only = disk_iops_read_only self.disk_m_bps_read_only = disk_m_bps_read_only - self.disk_state = None + self.disk_state: Optional[Union[str, "_models.DiskState"]] = None self.encryption = encryption self.max_shares = max_shares - self.share_info = None + self.share_info: Optional[List["_models.ShareInfoElement"]] = None self.network_access_policy = network_access_policy self.disk_access_id = disk_access_id self.tier = tier self.bursting_enabled = bursting_enabled - self.property_updates_in_progress = None + self.property_updates_in_progress: Optional["_models.PropertyUpdatesInProgress"] = None self.supports_hibernation = supports_hibernation self.security_profile = security_profile self.completion_percent = completion_percent @@ -752,9 +752,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.extended_location = extended_location - self.private_endpoint_connections = None - self.provisioning_state = None - self.time_created = None + self.private_endpoint_connections: Optional[List["_models.PrivateEndpointConnection"]] = None + self.provisioning_state: Optional[str] = None + self.time_created: Optional[datetime.datetime] = None class DiskAccessList(_serialization.Model): @@ -926,11 +926,11 @@ def __init__( self.identity = identity self.encryption_type = encryption_type self.active_key = active_key - self.previous_keys = None - self.provisioning_state = None + self.previous_keys: Optional[List["_models.KeyForDiskEncryptionSet"]] = None + self.provisioning_state: Optional[str] = None self.rotation_to_latest_key_version_enabled = rotation_to_latest_key_version_enabled - self.last_key_rotation_timestamp = None - self.auto_key_rotation_error = None + self.last_key_rotation_timestamp: Optional[datetime.datetime] = None + self.auto_key_rotation_error: Optional["_models.ApiError"] = None self.federated_client_id = federated_client_id @@ -1107,9 +1107,9 @@ class ProxyOnlyResource(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None class DiskRestorePoint(ProxyOnlyResource): @@ -1251,22 +1251,22 @@ def __init__( :paramtype security_profile: ~azure.mgmt.compute.v2022_03_02.models.DiskSecurityProfile """ super().__init__(**kwargs) - self.time_created = None - self.source_resource_id = None - self.os_type = None + self.time_created: Optional[datetime.datetime] = None + self.source_resource_id: Optional[str] = None + self.os_type: Optional[Union[str, "_models.OperatingSystemTypes"]] = None self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities - self.family_id = None - self.source_unique_id = None - self.encryption = None + self.family_id: Optional[str] = None + self.source_unique_id: Optional[str] = None + self.encryption: Optional["_models.Encryption"] = None self.supports_hibernation = supports_hibernation self.network_access_policy = network_access_policy self.public_network_access = public_network_access self.disk_access_id = disk_access_id self.completion_percent = completion_percent - self.replication_state = None - self.source_resource_location = None + self.replication_state: Optional[str] = None + self.source_resource_location: Optional[str] = None self.security_profile = security_profile @@ -1376,7 +1376,7 @@ def __init__(self, *, name: Optional[Union[str, "_models.DiskStorageAccountTypes """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class DiskUpdate(_serialization.Model): @@ -1595,7 +1595,7 @@ def __init__( self.bursting_enabled = bursting_enabled self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities - self.property_updates_in_progress = None + self.property_updates_in_progress: Optional["_models.PropertyUpdatesInProgress"] = None self.supports_hibernation = supports_hibernation self.public_network_access = public_network_access self.data_access_auth_mode = data_access_auth_mode @@ -1661,7 +1661,7 @@ class EncryptionSetIdentity(_serialization.Model): :vartype tenant_id: str :ivar user_assigned_identities: The list of user identities associated with the disk encryption set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2022_03_02.models.UserAssignedIdentitiesValue] """ @@ -1695,14 +1695,14 @@ def __init__( :keyword user_assigned_identities: The list of user identities associated with the disk encryption set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2022_03_02.models.UserAssignedIdentitiesValue] """ super().__init__(**kwargs) self.type = type - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.user_assigned_identities = user_assigned_identities @@ -2085,7 +2085,7 @@ class PrivateEndpoint(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class PrivateEndpointConnection(_serialization.Model): @@ -2144,12 +2144,12 @@ def __init__( ~azure.mgmt.compute.v2022_03_02.models.PrivateLinkServiceConnectionState """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.private_endpoint = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.private_endpoint: Optional["_models.PrivateEndpoint"] = None self.private_link_service_connection_state = private_link_service_connection_state - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.PrivateEndpointConnectionProvisioningState"]] = None class PrivateEndpointConnectionListResult(_serialization.Model): @@ -2228,11 +2228,11 @@ def __init__(self, *, required_zone_names: Optional[List[str]] = None, **kwargs: :paramtype required_zone_names: list[str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.group_id = None - self.required_members = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.group_id: Optional[str] = None + self.required_members: Optional[List[str]] = None self.required_zone_names = required_zone_names @@ -2450,9 +2450,9 @@ def __init__(self, *, location: Optional[str] = None, tags: Optional[Dict[str, s """ super().__init__(**kwargs) self.location = location - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -2476,7 +2476,7 @@ class ShareInfoElement(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.vm_uri = None + self.vm_uri: Optional[str] = None class Snapshot(Resource): @@ -2714,21 +2714,21 @@ def __init__( # pylint: disable=too-many-locals ~azure.mgmt.compute.v2022_03_02.models.DataAccessAuthMode """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None + self.managed_by: Optional[str] = None self.sku = sku self.extended_location = extended_location - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.disk_state = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.disk_state: Optional[Union[str, "_models.DiskState"]] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.incremental = incremental self.encryption = encryption self.network_access_policy = network_access_policy @@ -2807,7 +2807,7 @@ def __init__( """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class SnapshotUpdate(_serialization.Model): @@ -3007,7 +3007,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SupportedCapabilities(_serialization.Model): @@ -3070,5 +3070,5 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/operations/_operations.py index 232570f84572..2ffc91c53dcb 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_03_02/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -58,7 +56,7 @@ def build_disks_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -92,7 +90,7 @@ def build_disks_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -125,7 +123,7 @@ def build_disks_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -153,7 +151,7 @@ def build_disks_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -181,7 +179,7 @@ def build_disks_list_by_resource_group_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -236,7 +234,7 @@ def build_disks_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -266,7 +264,7 @@ def build_disks_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -295,7 +293,7 @@ def build_disk_accesses_create_or_update_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -329,7 +327,7 @@ def build_disk_accesses_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -362,7 +360,7 @@ def build_disk_accesses_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -393,7 +391,7 @@ def build_disk_accesses_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -424,7 +422,7 @@ def build_disk_accesses_list_by_resource_group_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -478,7 +476,7 @@ def build_disk_accesses_get_private_link_resources_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateLinkResources", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -514,7 +512,7 @@ def build_disk_accesses_update_a_private_endpoint_connection_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -554,7 +552,7 @@ def build_disk_accesses_get_a_private_endpoint_connection_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -592,7 +590,7 @@ def build_disk_accesses_delete_a_private_endpoint_connection_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -626,7 +624,7 @@ def build_disk_accesses_list_private_endpoint_connections_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -658,7 +656,7 @@ def build_disk_encryption_sets_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -692,7 +690,7 @@ def build_disk_encryption_sets_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -725,7 +723,7 @@ def build_disk_encryption_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -756,7 +754,7 @@ def build_disk_encryption_sets_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -787,7 +785,7 @@ def build_disk_encryption_sets_list_by_resource_group_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -841,7 +839,7 @@ def build_disk_encryption_sets_list_associated_resources_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}/associatedResources", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -877,7 +875,7 @@ def build_disk_restore_point_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -916,7 +914,7 @@ def build_disk_restore_point_list_by_restore_point_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -956,7 +954,7 @@ def build_disk_restore_point_grant_access_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -998,7 +996,7 @@ def build_disk_restore_point_revoke_access_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1034,7 +1032,7 @@ def build_snapshots_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1068,7 +1066,7 @@ def build_snapshots_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1101,7 +1099,7 @@ def build_snapshots_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1129,7 +1127,7 @@ def build_snapshots_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1157,7 +1155,7 @@ def build_snapshots_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1212,7 +1210,7 @@ def build_snapshots_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1242,7 +1240,7 @@ def build_snapshots_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1271,10 +1269,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -2269,10 +2267,10 @@ class DiskAccessesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3520,10 +3518,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -4333,10 +4331,10 @@ class DiskRestorePointOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4856,10 +4854,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_compute_management_client.py index 42a094bf786e..4ac089c2a611 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( CloudServiceOperatingSystemsOperations, CloudServiceRoleInstancesOperations, @@ -52,7 +54,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2022-09-04". Note that overriding this default value may result in unsupported behavior. @@ -62,15 +64,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -89,7 +93,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_metadata.json index 10ccc380c3b3..0f1f6e0845b4 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/aio/_compute_management_client.py index c0ea383988d9..1747db955644 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( CloudServiceOperatingSystemsOperations, @@ -52,7 +54,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2022-09-04". Note that overriding this default value may result in unsupported behavior. @@ -62,15 +64,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -89,7 +93,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/aio/operations/_operations.py index e26b77076b8f..6083634ce3fa 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/aio/operations/_operations.py @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_cloud_service_operating_systems_get_os_family_request, build_cloud_service_operating_systems_get_os_version_request, @@ -64,11 +66,8 @@ build_cloud_services_update_domain_walk_update_domain_request, build_cloud_services_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -87,10 +86,10 @@ class CloudServiceRoleInstancesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _delete_initial( @@ -830,10 +829,10 @@ class CloudServiceRolesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -994,10 +993,10 @@ class CloudServicesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2731,10 +2730,10 @@ class CloudServicesUpdateDomainOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _walk_update_domain_initial( @@ -3101,10 +3100,10 @@ class CloudServiceOperatingSystemsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/models/_models_py3.py index ccd90f904ab9..000cb95997df 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/models/_models_py3.py @@ -7,19 +7,14 @@ # 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, 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 +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] class ApiError(_serialization.Model): @@ -177,9 +172,9 @@ def __init__( :paramtype zones: list[str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags self.properties = properties @@ -337,7 +332,7 @@ def __init__( self.protected_settings = protected_settings self.protected_settings_from_key_vault = protected_settings_from_key_vault self.force_update_tag = force_update_tag - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.roles_applied_to = roles_applied_to @@ -379,9 +374,9 @@ def __init__(self, *, role_instance: Optional["_models.InstanceViewStatusesSumma """ super().__init__(**kwargs) self.role_instance = role_instance - self.sdk_version = None - self.private_ids = None - self.statuses = None + self.sdk_version: Optional[str] = None + self.private_ids: Optional[List[str]] = None + self.statuses: Optional[List["_models.ResourceInstanceViewStatus"]] = None class CloudServiceListResult(_serialization.Model): @@ -642,8 +637,8 @@ def __init__( self.os_profile = os_profile self.network_profile = network_profile self.extension_profile = extension_profile - self.provisioning_state = None - self.unique_id = None + self.provisioning_state: Optional[str] = None + self.unique_id: Optional[str] = None class CloudServiceRole(_serialization.Model): @@ -695,10 +690,10 @@ def __init__( :paramtype properties: ~azure.mgmt.compute.v2022_09_04.models.CloudServiceRoleProperties """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.location: Optional[str] = None self.sku = sku self.properties = properties @@ -810,7 +805,7 @@ class CloudServiceRoleProperties(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.unique_id = None + self.unique_id: Optional[str] = None class CloudServiceRoleSku(_serialization.Model): @@ -1079,8 +1074,8 @@ class InstanceSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.tier = None + self.name: Optional[str] = None + self.tier: Optional[str] = None class InstanceViewStatusesSummary(_serialization.Model): @@ -1103,7 +1098,7 @@ class InstanceViewStatusesSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.statuses_summary = None + self.statuses_summary: Optional[List["_models.StatusCodeCount"]] = None class LoadBalancerConfiguration(_serialization.Model): @@ -1309,10 +1304,10 @@ def __init__(self, *, properties: Optional["_models.OSFamilyProperties"] = None, :paramtype properties: ~azure.mgmt.compute.v2022_09_04.models.OSFamilyProperties """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.location: Optional[str] = None self.properties = properties @@ -1378,9 +1373,9 @@ class OSFamilyProperties(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.label = None - self.versions = None + self.name: Optional[str] = None + self.label: Optional[str] = None + self.versions: Optional[List["_models.OSVersionPropertiesBase"]] = None class OSVersion(_serialization.Model): @@ -1421,10 +1416,10 @@ def __init__(self, *, properties: Optional["_models.OSVersionProperties"] = None :paramtype properties: ~azure.mgmt.compute.v2022_09_04.models.OSVersionProperties """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.location: Optional[str] = None self.properties = properties @@ -1502,12 +1497,12 @@ class OSVersionProperties(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.family = None - self.family_label = None - self.version = None - self.label = None - self.is_default = None - self.is_active = None + self.family: Optional[str] = None + self.family_label: Optional[str] = None + self.version: Optional[str] = None + self.label: Optional[str] = None + self.is_default: Optional[bool] = None + self.is_active: Optional[bool] = None class OSVersionPropertiesBase(_serialization.Model): @@ -1542,10 +1537,10 @@ class OSVersionPropertiesBase(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.version = None - self.label = None - self.is_default = None - self.is_active = None + self.version: Optional[str] = None + self.label: Optional[str] = None + self.is_default: Optional[bool] = None + self.is_active: Optional[bool] = None class Resource(_serialization.Model): @@ -1590,9 +1585,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -1635,10 +1630,10 @@ def __init__(self, *, level: Optional[Union[str, "_models.StatusLevelTypes"]] = :paramtype level: str or ~azure.mgmt.compute.v2022_09_04.models.StatusLevelTypes """ super().__init__(**kwargs) - self.code = None - self.display_status = None - self.message = None - self.time = None + self.code: Optional[str] = None + self.display_status: Optional[str] = None + self.message: Optional[str] = None + self.time: Optional[datetime.datetime] = None self.level = level @@ -1682,9 +1677,9 @@ def __init__(self, *, location: Optional[str] = None, tags: Optional[Dict[str, s """ super().__init__(**kwargs) self.location = location - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -1741,11 +1736,11 @@ def __init__( :paramtype properties: ~azure.mgmt.compute.v2022_09_04.models.RoleInstanceProperties """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None - self.tags = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.location: Optional[str] = None + self.tags: Optional[Dict[str, str]] = None self.sku = sku self.properties = properties @@ -1805,7 +1800,7 @@ class RoleInstanceNetworkProfile(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.network_interfaces = None + self.network_interfaces: Optional[List["_models.SubResource"]] = None class RoleInstanceProperties(_serialization.Model): @@ -1902,10 +1897,10 @@ class RoleInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.platform_update_domain = None - self.platform_fault_domain = None - self.private_id = None - self.statuses = None + self.platform_update_domain: Optional[int] = None + self.platform_fault_domain: Optional[int] = None + self.private_id: Optional[str] = None + self.statuses: Optional[List["_models.ResourceInstanceViewStatus"]] = None class StatusCodeCount(_serialization.Model): @@ -1932,8 +1927,8 @@ class StatusCodeCount(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.count = None + self.code: Optional[str] = None + self.count: Optional[int] = None class SubResource(_serialization.Model): @@ -1976,7 +1971,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SystemData(_serialization.Model): @@ -2005,8 +2000,8 @@ class SystemData(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.created_at = None - self.last_modified_at = None + self.created_at: Optional[datetime.datetime] = None + self.last_modified_at: Optional[datetime.datetime] = None class UpdateDomain(_serialization.Model): @@ -2033,8 +2028,8 @@ class UpdateDomain(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None - self.name = None + self.id: Optional[str] = None + self.name: Optional[str] = None class UpdateDomainListResult(_serialization.Model): @@ -2095,5 +2090,5 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/operations/_operations.py index d7547dfd53cc..6f018a9316aa 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2022_09_04/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -57,7 +55,7 @@ def build_cloud_service_role_instances_delete_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -95,7 +93,7 @@ def build_cloud_service_role_instances_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -129,7 +127,7 @@ def build_cloud_service_role_instances_get_instance_view_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -166,7 +164,7 @@ def build_cloud_service_role_instances_list_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -199,7 +197,7 @@ def build_cloud_service_role_instances_restart_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -231,7 +229,7 @@ def build_cloud_service_role_instances_reimage_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -263,7 +261,7 @@ def build_cloud_service_role_instances_rebuild_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/rebuild", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -295,7 +293,7 @@ def build_cloud_service_role_instances_get_remote_desktop_file_request( # pylin _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/remoteDesktopFile", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -327,7 +325,7 @@ def build_cloud_service_roles_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roles/{roleName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleName": _SERIALIZER.url("role_name", role_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -359,7 +357,7 @@ def build_cloud_service_roles_list_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roles", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -391,7 +389,7 @@ def build_cloud_services_create_or_update_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -425,7 +423,7 @@ def build_cloud_services_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -458,7 +456,7 @@ def build_cloud_services_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -489,7 +487,7 @@ def build_cloud_services_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -520,7 +518,7 @@ def build_cloud_services_get_instance_view_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -573,7 +571,7 @@ def build_cloud_services_list_request(resource_group_name: str, subscription_id: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -603,7 +601,7 @@ def build_cloud_services_start_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -634,7 +632,7 @@ def build_cloud_services_power_off_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -666,7 +664,7 @@ def build_cloud_services_restart_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -700,7 +698,7 @@ def build_cloud_services_reimage_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -734,7 +732,7 @@ def build_cloud_services_rebuild_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/rebuild", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -768,7 +766,7 @@ def build_cloud_services_delete_instances_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/delete", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -802,7 +800,7 @@ def build_cloud_services_update_domain_walk_update_domain_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains/{updateDomain}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -836,7 +834,7 @@ def build_cloud_services_update_domain_get_update_domain_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains/{updateDomain}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -868,7 +866,7 @@ def build_cloud_services_update_domain_list_update_domains_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -899,7 +897,7 @@ def build_cloud_service_operating_systems_get_os_version_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsVersions/{osVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "osVersionName": _SERIALIZER.url("os_version_name", os_version_name, "str"), @@ -930,7 +928,7 @@ def build_cloud_service_operating_systems_list_os_versions_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsVersions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -960,7 +958,7 @@ def build_cloud_service_operating_systems_get_os_family_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsFamilies/{osFamilyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "osFamilyName": _SERIALIZER.url("os_family_name", os_family_name, "str"), @@ -991,7 +989,7 @@ def build_cloud_service_operating_systems_list_os_families_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsFamilies", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1022,10 +1020,10 @@ class CloudServiceRoleInstancesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _delete_initial( @@ -1764,10 +1762,10 @@ class CloudServiceRolesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -1927,10 +1925,10 @@ class CloudServicesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3650,10 +3648,10 @@ class CloudServicesUpdateDomainOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _walk_update_domain_initial( @@ -4019,10 +4017,10 @@ class CloudServiceOperatingSystemsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_compute_management_client.py index 97c19fdb7351..1905c56abfb3 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( DiskAccessesOperations, DiskEncryptionSetsOperations, @@ -50,7 +52,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2023-04-02". Note that overriding this default value may result in unsupported behavior. @@ -60,15 +62,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -87,7 +91,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_metadata.json index 4776fb19f2c0..87a3b96fdb70 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/aio/_compute_management_client.py index e5da64091524..c988657a4974 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( DiskAccessesOperations, @@ -50,7 +52,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2023-04-02". Note that overriding this default value may result in unsupported behavior. @@ -60,15 +62,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -87,7 +91,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/aio/operations/_operations.py index b81daa235b68..c83883d61668 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/aio/operations/_operations.py @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_disk_accesses_create_or_update_request, build_disk_accesses_delete_a_private_endpoint_connection_request, @@ -72,11 +74,8 @@ build_snapshots_revoke_access_request, build_snapshots_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -95,10 +94,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1100,10 +1099,10 @@ class DiskAccessesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2363,10 +2362,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -3190,10 +3189,10 @@ class DiskRestorePointOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3717,10 +3716,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/models/_models_py3.py index fd53eafe1ec6..2ced228156e5 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -9,7 +9,7 @@ from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union -from ... import _serialization +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models @@ -39,8 +39,8 @@ class AccessUri(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.access_sas = None - self.security_data_access_sas = None + self.access_sas: Optional[str] = None + self.security_data_access_sas: Optional[str] = None class ApiError(_serialization.Model): @@ -299,7 +299,7 @@ def __init__( self.gallery_image_reference = gallery_image_reference self.source_uri = source_uri self.source_resource_id = source_resource_id - self.source_unique_id = None + self.source_unique_id: Optional[str] = None self.upload_size_bytes = upload_size_bytes self.logical_sector_size = logical_sector_size self.security_data_uri = security_data_uri @@ -349,9 +349,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -686,43 +686,43 @@ def __init__( # pylint: disable=too-many-locals :paramtype optimized_for_frequent_attach: bool """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None - self.managed_by_extended = None + self.managed_by: Optional[str] = None + self.managed_by_extended: Optional[List[str]] = None self.sku = sku self.zones = zones self.extended_location = extended_location - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.disk_iops_read_write = disk_iops_read_write self.disk_m_bps_read_write = disk_m_bps_read_write self.disk_iops_read_only = disk_iops_read_only self.disk_m_bps_read_only = disk_m_bps_read_only - self.disk_state = None + self.disk_state: Optional[Union[str, "_models.DiskState"]] = None self.encryption = encryption self.max_shares = max_shares - self.share_info = None + self.share_info: Optional[List["_models.ShareInfoElement"]] = None self.network_access_policy = network_access_policy self.disk_access_id = disk_access_id - self.bursting_enabled_time = None + self.bursting_enabled_time: Optional[datetime.datetime] = None self.tier = tier self.bursting_enabled = bursting_enabled - self.property_updates_in_progress = None + self.property_updates_in_progress: Optional["_models.PropertyUpdatesInProgress"] = None self.supports_hibernation = supports_hibernation self.security_profile = security_profile self.completion_percent = completion_percent self.public_network_access = public_network_access self.data_access_auth_mode = data_access_auth_mode self.optimized_for_frequent_attach = optimized_for_frequent_attach - self.last_ownership_update_time = None + self.last_ownership_update_time: Optional[datetime.datetime] = None class DiskAccess(Resource): @@ -799,9 +799,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.extended_location = extended_location - self.private_endpoint_connections = None - self.provisioning_state = None - self.time_created = None + self.private_endpoint_connections: Optional[List["_models.PrivateEndpointConnection"]] = None + self.provisioning_state: Optional[str] = None + self.time_created: Optional[datetime.datetime] = None class DiskAccessList(_serialization.Model): @@ -973,11 +973,11 @@ def __init__( self.identity = identity self.encryption_type = encryption_type self.active_key = active_key - self.previous_keys = None - self.provisioning_state = None + self.previous_keys: Optional[List["_models.KeyForDiskEncryptionSet"]] = None + self.provisioning_state: Optional[str] = None self.rotation_to_latest_key_version_enabled = rotation_to_latest_key_version_enabled - self.last_key_rotation_timestamp = None - self.auto_key_rotation_error = None + self.last_key_rotation_timestamp: Optional[datetime.datetime] = None + self.auto_key_rotation_error: Optional["_models.ApiError"] = None self.federated_client_id = federated_client_id @@ -1154,9 +1154,9 @@ class ProxyOnlyResource(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None class DiskRestorePoint(ProxyOnlyResource): @@ -1298,22 +1298,22 @@ def __init__( :paramtype security_profile: ~azure.mgmt.compute.v2023_04_02.models.DiskSecurityProfile """ super().__init__(**kwargs) - self.time_created = None - self.source_resource_id = None - self.os_type = None + self.time_created: Optional[datetime.datetime] = None + self.source_resource_id: Optional[str] = None + self.os_type: Optional[Union[str, "_models.OperatingSystemTypes"]] = None self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities - self.family_id = None - self.source_unique_id = None - self.encryption = None + self.family_id: Optional[str] = None + self.source_unique_id: Optional[str] = None + self.encryption: Optional["_models.Encryption"] = None self.supports_hibernation = supports_hibernation self.network_access_policy = network_access_policy self.public_network_access = public_network_access self.disk_access_id = disk_access_id self.completion_percent = completion_percent - self.replication_state = None - self.source_resource_location = None + self.replication_state: Optional[str] = None + self.source_resource_location: Optional[str] = None self.security_profile = security_profile @@ -1423,7 +1423,7 @@ def __init__(self, *, name: Optional[Union[str, "_models.DiskStorageAccountTypes """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class DiskUpdate(_serialization.Model): @@ -1656,7 +1656,7 @@ def __init__( self.bursting_enabled = bursting_enabled self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities - self.property_updates_in_progress = None + self.property_updates_in_progress: Optional["_models.PropertyUpdatesInProgress"] = None self.supports_hibernation = supports_hibernation self.public_network_access = public_network_access self.data_access_auth_mode = data_access_auth_mode @@ -1723,7 +1723,7 @@ class EncryptionSetIdentity(_serialization.Model): :vartype tenant_id: str :ivar user_assigned_identities: The list of user identities associated with the disk encryption set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2023_04_02.models.UserAssignedIdentitiesValue] """ @@ -1757,14 +1757,14 @@ def __init__( :keyword user_assigned_identities: The list of user identities associated with the disk encryption set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2023_04_02.models.UserAssignedIdentitiesValue] """ super().__init__(**kwargs) self.type = type - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.user_assigned_identities = user_assigned_identities @@ -2156,7 +2156,7 @@ class PrivateEndpoint(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class PrivateEndpointConnection(_serialization.Model): @@ -2215,12 +2215,12 @@ def __init__( ~azure.mgmt.compute.v2023_04_02.models.PrivateLinkServiceConnectionState """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.private_endpoint = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.private_endpoint: Optional["_models.PrivateEndpoint"] = None self.private_link_service_connection_state = private_link_service_connection_state - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.PrivateEndpointConnectionProvisioningState"]] = None class PrivateEndpointConnectionListResult(_serialization.Model): @@ -2299,11 +2299,11 @@ def __init__(self, *, required_zone_names: Optional[List[str]] = None, **kwargs: :paramtype required_zone_names: list[str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.group_id = None - self.required_members = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.group_id: Optional[str] = None + self.required_members: Optional[List[str]] = None self.required_zone_names = required_zone_names @@ -2521,9 +2521,9 @@ def __init__(self, *, location: Optional[str] = None, tags: Optional[Dict[str, s """ super().__init__(**kwargs) self.location = location - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -2547,7 +2547,7 @@ class ShareInfoElement(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.vm_uri = None + self.vm_uri: Optional[str] = None class Snapshot(Resource): @@ -2791,23 +2791,23 @@ def __init__( # pylint: disable=too-many-locals ~azure.mgmt.compute.v2023_04_02.models.DataAccessAuthMode """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None + self.managed_by: Optional[str] = None self.sku = sku self.extended_location = extended_location - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.disk_state = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.disk_state: Optional[Union[str, "_models.DiskState"]] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.incremental = incremental - self.incremental_snapshot_family_id = None + self.incremental_snapshot_family_id: Optional[str] = None self.encryption = encryption self.network_access_policy = network_access_policy self.disk_access_id = disk_access_id @@ -2885,7 +2885,7 @@ def __init__( """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class SnapshotUpdate(_serialization.Model): @@ -3085,7 +3085,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SupportedCapabilities(_serialization.Model): @@ -3159,8 +3159,8 @@ class SystemData(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.created_at = None - self.last_modified_at = None + self.created_at: Optional[datetime.datetime] = None + self.last_modified_at: Optional[datetime.datetime] = None class UserAssignedIdentitiesValue(_serialization.Model): @@ -3187,5 +3187,5 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/operations/_operations.py index eb8c1b2d4631..f7bea547ebc5 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_04_02/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -58,7 +56,7 @@ def build_disks_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -92,7 +90,7 @@ def build_disks_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -125,7 +123,7 @@ def build_disks_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -153,7 +151,7 @@ def build_disks_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -181,7 +179,7 @@ def build_disks_list_by_resource_group_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -236,7 +234,7 @@ def build_disks_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -266,7 +264,7 @@ def build_disks_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -295,7 +293,7 @@ def build_disk_accesses_create_or_update_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -329,7 +327,7 @@ def build_disk_accesses_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -362,7 +360,7 @@ def build_disk_accesses_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -393,7 +391,7 @@ def build_disk_accesses_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -424,7 +422,7 @@ def build_disk_accesses_list_by_resource_group_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -478,7 +476,7 @@ def build_disk_accesses_get_private_link_resources_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateLinkResources", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -514,7 +512,7 @@ def build_disk_accesses_update_a_private_endpoint_connection_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -554,7 +552,7 @@ def build_disk_accesses_get_a_private_endpoint_connection_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -592,7 +590,7 @@ def build_disk_accesses_delete_a_private_endpoint_connection_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -626,7 +624,7 @@ def build_disk_accesses_list_private_endpoint_connections_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -658,7 +656,7 @@ def build_disk_encryption_sets_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -692,7 +690,7 @@ def build_disk_encryption_sets_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -725,7 +723,7 @@ def build_disk_encryption_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -756,7 +754,7 @@ def build_disk_encryption_sets_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -787,7 +785,7 @@ def build_disk_encryption_sets_list_by_resource_group_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -841,7 +839,7 @@ def build_disk_encryption_sets_list_associated_resources_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}/associatedResources", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -877,7 +875,7 @@ def build_disk_restore_point_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -916,7 +914,7 @@ def build_disk_restore_point_list_by_restore_point_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -956,7 +954,7 @@ def build_disk_restore_point_grant_access_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -998,7 +996,7 @@ def build_disk_restore_point_revoke_access_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1034,7 +1032,7 @@ def build_snapshots_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1068,7 +1066,7 @@ def build_snapshots_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1101,7 +1099,7 @@ def build_snapshots_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1129,7 +1127,7 @@ def build_snapshots_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1157,7 +1155,7 @@ def build_snapshots_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1212,7 +1210,7 @@ def build_snapshots_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1242,7 +1240,7 @@ def build_snapshots_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1271,10 +1269,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -2269,10 +2267,10 @@ class DiskAccessesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3520,10 +3518,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -4333,10 +4331,10 @@ class DiskRestorePointOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4856,10 +4854,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_compute_management_client.py index 719ce120eb3f..f8f44d1a266c 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( CommunityGalleriesOperations, CommunityGalleryImageVersionsOperations, @@ -78,7 +80,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2023-07-03". Note that overriding this default value may result in unsupported behavior. @@ -88,15 +90,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -115,7 +119,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_metadata.json index f6fbea438a5d..c34db13db3ac 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/aio/_compute_management_client.py index 4e35f9b73058..49e1d242fdbb 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( CommunityGalleriesOperations, @@ -79,7 +81,7 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2023-07-03". Note that overriding this default value may result in unsupported behavior. @@ -89,15 +91,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -116,7 +120,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/aio/operations/_operations.py index e0720ea80b01..3bf81ee83e3c 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/aio/operations/_operations.py @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_community_galleries_get_request, build_community_gallery_image_versions_get_request, @@ -72,11 +74,8 @@ build_shared_gallery_images_get_request, build_shared_gallery_images_list_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -95,10 +94,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -821,10 +820,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1517,10 +1516,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2295,10 +2294,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -3003,10 +3002,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -3786,10 +3785,10 @@ class GallerySharingProfileOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _update_initial( @@ -3999,10 +3998,10 @@ class SharedGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4158,10 +4157,10 @@ class SharedGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4331,10 +4330,10 @@ class SharedGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4521,10 +4520,10 @@ class CommunityGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -4596,10 +4595,10 @@ class CommunityGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -4760,10 +4759,10 @@ class CommunityGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/models/_models_py3.py index aea884089634..b792030c1ae3 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/models/_models_py3.py @@ -10,7 +10,7 @@ import datetime from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union -from ... import _serialization +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models @@ -137,9 +137,9 @@ def __init__(self, *, unique_id: Optional[str] = None, **kwargs: Any) -> None: :paramtype unique_id: str """ super().__init__(**kwargs) - self.name = None - self.location = None - self.type = None + self.name: Optional[str] = None + self.location: Optional[str] = None + self.type: Optional[str] = None self.unique_id = unique_id @@ -621,8 +621,8 @@ def __init__( self.publisher_contact = publisher_contact self.eula = eula self.public_name_prefix = public_name_prefix - self.community_gallery_enabled = None - self.public_names = None + self.community_gallery_enabled: Optional[bool] = None + self.public_names: Optional[List[str]] = None class CommunityGalleryMetadata(_serialization.Model): @@ -874,9 +874,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -968,10 +968,10 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.sharing_profile = sharing_profile self.soft_delete_policy = soft_delete_policy - self.sharing_status = None + self.sharing_status: Optional["_models.SharingStatus"] = None class GalleryApplication(Resource): @@ -1284,9 +1284,9 @@ def __init__(self, *, tags: Optional[Dict[str, str]] = None, **kwargs: Any) -> N :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -1472,8 +1472,8 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile self.safety_profile = safety_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryApplicationVersionList(_serialization.Model): @@ -1603,7 +1603,7 @@ def __init__( self.target_regions = target_regions self.replica_count = replica_count self.exclude_from_latest = exclude_from_latest - self.published_date = None + self.published_date: Optional[datetime.datetime] = None self.end_of_life_date = end_of_life_date self.storage_account_type = storage_account_type self.replication_mode = replication_mode @@ -1864,8 +1864,8 @@ def __init__( super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile self.safety_profile = safety_profile - self.provisioning_state = None - self.replication_status = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None + self.replication_status: Optional["_models.ReplicationStatus"] = None class GalleryArtifactSource(_serialization.Model): @@ -1995,7 +1995,7 @@ def __init__( :paramtype source: ~azure.mgmt.compute.v2023_07_03.models.GalleryDiskImageSource """ super().__init__(**kwargs) - self.size_in_gb = None + self.size_in_gb: Optional[int] = None self.host_caching = host_caching self.source = source @@ -2150,7 +2150,7 @@ class GalleryIdentifier(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.unique_name = None + self.unique_name: Optional[str] = None class GalleryImage(Resource): @@ -2323,7 +2323,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.features = features self.architecture = architecture @@ -2589,7 +2589,7 @@ def __init__( self.recommended = recommended self.disallowed = disallowed self.purchase_plan = purchase_plan - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.features = features self.architecture = architecture @@ -2683,10 +2683,10 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.storage_profile = storage_profile self.safety_profile = safety_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None self.security_profile = security_profile @@ -2794,8 +2794,8 @@ def __init__(self, *, allow_deletion_of_replicated_locations: Optional[bool] = N :paramtype allow_deletion_of_replicated_locations: bool """ super().__init__(allow_deletion_of_replicated_locations=allow_deletion_of_replicated_locations, **kwargs) - self.reported_for_policy_violation = None - self.policy_violations = None + self.reported_for_policy_violation: Optional[bool] = None + self.policy_violations: Optional[List["_models.PolicyViolation"]] = None class GalleryImageVersionStorageProfile(_serialization.Model): @@ -2955,10 +2955,10 @@ def __init__( """ super().__init__(tags=tags, **kwargs) self.publishing_profile = publishing_profile - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.storage_profile = storage_profile self.safety_profile = safety_profile - self.replication_status = None + self.replication_status: Optional["_models.ReplicationStatus"] = None self.security_profile = security_profile @@ -3152,10 +3152,10 @@ def __init__( super().__init__(tags=tags, **kwargs) self.description = description self.identifier = identifier - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.GalleryProvisioningState"]] = None self.sharing_profile = sharing_profile self.soft_delete_policy = soft_delete_policy - self.sharing_status = None + self.sharing_status: Optional["_models.SharingStatus"] = None class ImagePurchasePlan(_serialization.Model): @@ -3397,8 +3397,8 @@ class PirResource(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.location = None + self.name: Optional[str] = None + self.location: Optional[str] = None class PirSharedGalleryResource(PirResource): @@ -3534,10 +3534,10 @@ class RegionalReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.region = None - self.state = None - self.details = None - self.progress = None + self.region: Optional[str] = None + self.state: Optional[Union[str, "_models.ReplicationState"]] = None + self.details: Optional[str] = None + self.progress: Optional[int] = None class RegionalSharingStatus(_serialization.Model): @@ -3573,7 +3573,7 @@ def __init__(self, *, region: Optional[str] = None, details: Optional[str] = Non """ super().__init__(**kwargs) self.region = region - self.state = None + self.state: Optional[Union[str, "_models.SharingState"]] = None self.details = details @@ -3603,8 +3603,8 @@ class ReplicationStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.aggregated_state = None - self.summary = None + self.aggregated_state: Optional[Union[str, "_models.AggregatedReplicationState"]] = None + self.summary: Optional[List["_models.RegionalReplicationStatus"]] = None class ResourceRange(_serialization.Model): @@ -3679,9 +3679,9 @@ def __init__(self, *, location: Optional[str] = None, tags: Optional[Dict[str, s """ super().__init__(**kwargs) self.location = location - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -3719,7 +3719,7 @@ def __init__(self, *, unique_id: Optional[str] = None, **kwargs: Any) -> None: :paramtype unique_id: str """ super().__init__(unique_id=unique_id, **kwargs) - self.artifact_tags = None + self.artifact_tags: Optional[Dict[str, str]] = None class SharedGalleryDiskImage(_serialization.Model): @@ -3752,7 +3752,7 @@ def __init__( :paramtype host_caching: str or ~azure.mgmt.compute.v2023_07_03.models.SharedGalleryHostCaching """ super().__init__(**kwargs) - self.disk_size_gb = None + self.disk_size_gb: Optional[int] = None self.host_caching = host_caching @@ -4226,7 +4226,7 @@ def __init__( """ super().__init__(**kwargs) self.permissions = permissions - self.groups = None + self.groups: Optional[List["_models.SharingProfileGroup"]] = None self.community_gallery_info = community_gallery_info @@ -4291,7 +4291,7 @@ def __init__(self, *, summary: Optional[List["_models.RegionalSharingStatus"]] = :paramtype summary: list[~azure.mgmt.compute.v2023_07_03.models.RegionalSharingStatus] """ super().__init__(**kwargs) - self.aggregated_state = None + self.aggregated_state: Optional[Union[str, "_models.SharingState"]] = None self.summary = summary @@ -4401,7 +4401,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SystemData(_serialization.Model): @@ -4430,8 +4430,8 @@ class SystemData(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.created_at = None - self.last_modified_at = None + self.created_at: Optional[datetime.datetime] = None + self.last_modified_at: Optional[datetime.datetime] = None class TargetRegion(_serialization.Model): @@ -4727,5 +4727,5 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/operations/_operations.py index b614a48c80d5..d5fbb893ab6e 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_07_03/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -58,7 +56,7 @@ def build_galleries_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -92,7 +90,7 @@ def build_galleries_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -131,7 +129,7 @@ def build_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -166,7 +164,7 @@ def build_galleries_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -197,7 +195,7 @@ def build_galleries_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -252,7 +250,7 @@ def build_gallery_images_create_or_update_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -287,7 +285,7 @@ def build_gallery_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -321,7 +319,7 @@ def build_gallery_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -353,7 +351,7 @@ def build_gallery_images_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -385,7 +383,7 @@ def build_gallery_images_list_by_gallery_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -422,7 +420,7 @@ def build_gallery_image_versions_create_or_update_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -463,7 +461,7 @@ def build_gallery_image_versions_update_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -505,7 +503,7 @@ def build_gallery_image_versions_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -545,7 +543,7 @@ def build_gallery_image_versions_delete_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -578,7 +576,7 @@ def build_gallery_image_versions_list_by_gallery_image_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -611,7 +609,7 @@ def build_gallery_applications_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -646,7 +644,7 @@ def build_gallery_applications_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -680,7 +678,7 @@ def build_gallery_applications_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -712,7 +710,7 @@ def build_gallery_applications_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -744,7 +742,7 @@ def build_gallery_applications_list_by_gallery_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -781,7 +779,7 @@ def build_gallery_application_versions_create_or_update_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -824,7 +822,7 @@ def build_gallery_application_versions_update_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -868,7 +866,7 @@ def build_gallery_application_versions_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -910,7 +908,7 @@ def build_gallery_application_versions_delete_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -945,7 +943,7 @@ def build_gallery_application_versions_list_by_gallery_application_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -978,7 +976,7 @@ def build_gallery_sharing_profile_update_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/share", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1015,7 +1013,7 @@ def build_shared_galleries_list_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1047,7 +1045,7 @@ def build_shared_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1083,7 +1081,7 @@ def build_shared_gallery_images_list_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1116,7 +1114,7 @@ def build_shared_gallery_images_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1154,7 +1152,7 @@ def build_shared_gallery_image_versions_list_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1193,7 +1191,7 @@ def build_shared_gallery_image_versions_get_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1226,7 +1224,7 @@ def build_community_galleries_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1257,7 +1255,7 @@ def build_community_gallery_images_get_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1289,7 +1287,7 @@ def build_community_gallery_images_list_request( # pylint: disable=name-too-lon _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1325,7 +1323,7 @@ def build_community_gallery_image_versions_get_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1358,7 +1356,7 @@ def build_community_gallery_image_versions_list_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "location": _SERIALIZER.url("location", location, "str"), @@ -1391,10 +1389,10 @@ class GalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -2111,10 +2109,10 @@ class GalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -2806,10 +2804,10 @@ class GalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3584,10 +3582,10 @@ class GalleryApplicationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -4291,10 +4289,10 @@ class GalleryApplicationVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -5074,10 +5072,10 @@ class GallerySharingProfileOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _update_initial( @@ -5284,10 +5282,10 @@ class SharedGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5442,10 +5440,10 @@ class SharedGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5614,10 +5612,10 @@ class SharedGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5804,10 +5802,10 @@ class CommunityGalleriesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -5879,10 +5877,10 @@ class CommunityGalleryImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6041,10 +6039,10 @@ class CommunityGalleryImageVersionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_compute_management_client.py index 47d2935c9ecc..f4067e561989 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( DiskAccessesOperations, DiskEncryptionSetsOperations, @@ -50,7 +52,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2023-10-02". Note that overriding this default value may result in unsupported behavior. @@ -60,15 +62,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -87,7 +91,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_metadata.json index d15485ab1886..4b70f0035826 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/aio/_compute_management_client.py index 54a43c67a6bd..4850f56a1b40 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( DiskAccessesOperations, @@ -50,7 +52,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2023-10-02". Note that overriding this default value may result in unsupported behavior. @@ -60,15 +62,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -87,7 +91,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/aio/operations/_operations.py index 764e0e5df4ac..7275a3bf636a 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/aio/operations/_operations.py @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_disk_accesses_create_or_update_request, build_disk_accesses_delete_a_private_endpoint_connection_request, @@ -72,11 +74,8 @@ build_snapshots_revoke_access_request, build_snapshots_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -95,10 +94,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1100,10 +1099,10 @@ class DiskAccessesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2363,10 +2362,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -3190,10 +3189,10 @@ class DiskRestorePointOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3717,10 +3716,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/models/_models_py3.py index 878aebb20037..a6c3a2cb0fdc 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -9,7 +9,7 @@ from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union -from ... import _serialization +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models @@ -39,8 +39,8 @@ class AccessUri(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.access_sas = None - self.security_data_access_sas = None + self.access_sas: Optional[str] = None + self.security_data_access_sas: Optional[str] = None class ApiError(_serialization.Model): @@ -311,7 +311,7 @@ def __init__( self.gallery_image_reference = gallery_image_reference self.source_uri = source_uri self.source_resource_id = source_resource_id - self.source_unique_id = None + self.source_unique_id: Optional[str] = None self.upload_size_bytes = upload_size_bytes self.logical_sector_size = logical_sector_size self.security_data_uri = security_data_uri @@ -362,9 +362,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -699,43 +699,43 @@ def __init__( # pylint: disable=too-many-locals :paramtype optimized_for_frequent_attach: bool """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None - self.managed_by_extended = None + self.managed_by: Optional[str] = None + self.managed_by_extended: Optional[List[str]] = None self.sku = sku self.zones = zones self.extended_location = extended_location - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.disk_iops_read_write = disk_iops_read_write self.disk_m_bps_read_write = disk_m_bps_read_write self.disk_iops_read_only = disk_iops_read_only self.disk_m_bps_read_only = disk_m_bps_read_only - self.disk_state = None + self.disk_state: Optional[Union[str, "_models.DiskState"]] = None self.encryption = encryption self.max_shares = max_shares - self.share_info = None + self.share_info: Optional[List["_models.ShareInfoElement"]] = None self.network_access_policy = network_access_policy self.disk_access_id = disk_access_id - self.bursting_enabled_time = None + self.bursting_enabled_time: Optional[datetime.datetime] = None self.tier = tier self.bursting_enabled = bursting_enabled - self.property_updates_in_progress = None + self.property_updates_in_progress: Optional["_models.PropertyUpdatesInProgress"] = None self.supports_hibernation = supports_hibernation self.security_profile = security_profile self.completion_percent = completion_percent self.public_network_access = public_network_access self.data_access_auth_mode = data_access_auth_mode self.optimized_for_frequent_attach = optimized_for_frequent_attach - self.last_ownership_update_time = None + self.last_ownership_update_time: Optional[datetime.datetime] = None class DiskAccess(Resource): @@ -812,9 +812,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.extended_location = extended_location - self.private_endpoint_connections = None - self.provisioning_state = None - self.time_created = None + self.private_endpoint_connections: Optional[List["_models.PrivateEndpointConnection"]] = None + self.provisioning_state: Optional[str] = None + self.time_created: Optional[datetime.datetime] = None class DiskAccessList(_serialization.Model): @@ -986,11 +986,11 @@ def __init__( self.identity = identity self.encryption_type = encryption_type self.active_key = active_key - self.previous_keys = None - self.provisioning_state = None + self.previous_keys: Optional[List["_models.KeyForDiskEncryptionSet"]] = None + self.provisioning_state: Optional[str] = None self.rotation_to_latest_key_version_enabled = rotation_to_latest_key_version_enabled - self.last_key_rotation_timestamp = None - self.auto_key_rotation_error = None + self.last_key_rotation_timestamp: Optional[datetime.datetime] = None + self.auto_key_rotation_error: Optional["_models.ApiError"] = None self.federated_client_id = federated_client_id @@ -1167,9 +1167,9 @@ class ProxyOnlyResource(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None class DiskRestorePoint(ProxyOnlyResource): @@ -1311,22 +1311,22 @@ def __init__( :paramtype security_profile: ~azure.mgmt.compute.v2023_10_02.models.DiskSecurityProfile """ super().__init__(**kwargs) - self.time_created = None - self.source_resource_id = None - self.os_type = None + self.time_created: Optional[datetime.datetime] = None + self.source_resource_id: Optional[str] = None + self.os_type: Optional[Union[str, "_models.OperatingSystemTypes"]] = None self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities - self.family_id = None - self.source_unique_id = None - self.encryption = None + self.family_id: Optional[str] = None + self.source_unique_id: Optional[str] = None + self.encryption: Optional["_models.Encryption"] = None self.supports_hibernation = supports_hibernation self.network_access_policy = network_access_policy self.public_network_access = public_network_access self.disk_access_id = disk_access_id self.completion_percent = completion_percent - self.replication_state = None - self.source_resource_location = None + self.replication_state: Optional[str] = None + self.source_resource_location: Optional[str] = None self.security_profile = security_profile @@ -1436,7 +1436,7 @@ def __init__(self, *, name: Optional[Union[str, "_models.DiskStorageAccountTypes """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class DiskUpdate(_serialization.Model): @@ -1669,7 +1669,7 @@ def __init__( self.bursting_enabled = bursting_enabled self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities - self.property_updates_in_progress = None + self.property_updates_in_progress: Optional["_models.PropertyUpdatesInProgress"] = None self.supports_hibernation = supports_hibernation self.public_network_access = public_network_access self.data_access_auth_mode = data_access_auth_mode @@ -1736,7 +1736,7 @@ class EncryptionSetIdentity(_serialization.Model): :vartype tenant_id: str :ivar user_assigned_identities: The list of user identities associated with the disk encryption set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2023_10_02.models.UserAssignedIdentitiesValue] """ @@ -1770,14 +1770,14 @@ def __init__( :keyword user_assigned_identities: The list of user identities associated with the disk encryption set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2023_10_02.models.UserAssignedIdentitiesValue] """ super().__init__(**kwargs) self.type = type - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.user_assigned_identities = user_assigned_identities @@ -2169,7 +2169,7 @@ class PrivateEndpoint(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class PrivateEndpointConnection(_serialization.Model): @@ -2228,12 +2228,12 @@ def __init__( ~azure.mgmt.compute.v2023_10_02.models.PrivateLinkServiceConnectionState """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.private_endpoint = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.private_endpoint: Optional["_models.PrivateEndpoint"] = None self.private_link_service_connection_state = private_link_service_connection_state - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.PrivateEndpointConnectionProvisioningState"]] = None class PrivateEndpointConnectionListResult(_serialization.Model): @@ -2312,11 +2312,11 @@ def __init__(self, *, required_zone_names: Optional[List[str]] = None, **kwargs: :paramtype required_zone_names: list[str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.group_id = None - self.required_members = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.group_id: Optional[str] = None + self.required_members: Optional[List[str]] = None self.required_zone_names = required_zone_names @@ -2534,9 +2534,9 @@ def __init__(self, *, location: Optional[str] = None, tags: Optional[Dict[str, s """ super().__init__(**kwargs) self.location = location - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -2560,7 +2560,7 @@ class ShareInfoElement(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.vm_uri = None + self.vm_uri: Optional[str] = None class Snapshot(Resource): @@ -2804,23 +2804,23 @@ def __init__( # pylint: disable=too-many-locals ~azure.mgmt.compute.v2023_10_02.models.DataAccessAuthMode """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None + self.managed_by: Optional[str] = None self.sku = sku self.extended_location = extended_location - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.disk_state = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.disk_state: Optional[Union[str, "_models.DiskState"]] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.incremental = incremental - self.incremental_snapshot_family_id = None + self.incremental_snapshot_family_id: Optional[str] = None self.encryption = encryption self.network_access_policy = network_access_policy self.disk_access_id = disk_access_id @@ -2898,7 +2898,7 @@ def __init__( """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class SnapshotUpdate(_serialization.Model): @@ -3098,7 +3098,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SupportedCapabilities(_serialization.Model): @@ -3172,8 +3172,8 @@ class SystemData(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.created_at = None - self.last_modified_at = None + self.created_at: Optional[datetime.datetime] = None + self.last_modified_at: Optional[datetime.datetime] = None class UserAssignedIdentitiesValue(_serialization.Model): @@ -3200,5 +3200,5 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/operations/_operations.py index 48c5a01a727f..f880f2271478 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2023_10_02/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -58,7 +56,7 @@ def build_disks_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -92,7 +90,7 @@ def build_disks_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -125,7 +123,7 @@ def build_disks_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -153,7 +151,7 @@ def build_disks_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -181,7 +179,7 @@ def build_disks_list_by_resource_group_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -236,7 +234,7 @@ def build_disks_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -266,7 +264,7 @@ def build_disks_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -295,7 +293,7 @@ def build_disk_accesses_create_or_update_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -329,7 +327,7 @@ def build_disk_accesses_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -362,7 +360,7 @@ def build_disk_accesses_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -393,7 +391,7 @@ def build_disk_accesses_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -424,7 +422,7 @@ def build_disk_accesses_list_by_resource_group_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -478,7 +476,7 @@ def build_disk_accesses_get_private_link_resources_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateLinkResources", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -514,7 +512,7 @@ def build_disk_accesses_update_a_private_endpoint_connection_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -554,7 +552,7 @@ def build_disk_accesses_get_a_private_endpoint_connection_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -592,7 +590,7 @@ def build_disk_accesses_delete_a_private_endpoint_connection_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -626,7 +624,7 @@ def build_disk_accesses_list_private_endpoint_connections_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -658,7 +656,7 @@ def build_disk_encryption_sets_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -692,7 +690,7 @@ def build_disk_encryption_sets_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -725,7 +723,7 @@ def build_disk_encryption_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -756,7 +754,7 @@ def build_disk_encryption_sets_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -787,7 +785,7 @@ def build_disk_encryption_sets_list_by_resource_group_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -841,7 +839,7 @@ def build_disk_encryption_sets_list_associated_resources_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}/associatedResources", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -877,7 +875,7 @@ def build_disk_restore_point_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -916,7 +914,7 @@ def build_disk_restore_point_list_by_restore_point_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -956,7 +954,7 @@ def build_disk_restore_point_grant_access_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -998,7 +996,7 @@ def build_disk_restore_point_revoke_access_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1034,7 +1032,7 @@ def build_snapshots_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1068,7 +1066,7 @@ def build_snapshots_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1101,7 +1099,7 @@ def build_snapshots_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1129,7 +1127,7 @@ def build_snapshots_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1157,7 +1155,7 @@ def build_snapshots_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1212,7 +1210,7 @@ def build_snapshots_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1242,7 +1240,7 @@ def build_snapshots_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1271,10 +1269,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -2269,10 +2267,10 @@ class DiskAccessesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3520,10 +3518,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -4333,10 +4331,10 @@ class DiskRestorePointOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4856,10 +4854,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_compute_management_client.py index 488bc07e9289..6f6ee77110cf 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( DiskAccessesOperations, DiskEncryptionSetsOperations, @@ -50,7 +52,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2024-03-02". Note that overriding this default value may result in unsupported behavior. @@ -60,15 +62,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -87,7 +91,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_metadata.json index 56f50a2f6fb4..7340c8b1a075 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/aio/_compute_management_client.py index 64416721f0be..050fa4bfcba7 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( DiskAccessesOperations, @@ -50,7 +52,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2024-03-02". Note that overriding this default value may result in unsupported behavior. @@ -60,15 +62,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -87,7 +91,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/aio/operations/_operations.py index 7bc85f6a15f7..7041efaf5bc2 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/aio/operations/_operations.py @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_disk_accesses_create_or_update_request, build_disk_accesses_delete_a_private_endpoint_connection_request, @@ -72,11 +74,8 @@ build_snapshots_revoke_access_request, build_snapshots_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -95,10 +94,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -1100,10 +1099,10 @@ class DiskAccessesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2363,10 +2362,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -3190,10 +3189,10 @@ class DiskRestorePointOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -3717,10 +3716,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/models/_models_py3.py index 22fde77e943d..971f8dc8f060 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -9,7 +9,7 @@ from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union -from ... import _serialization +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models @@ -39,8 +39,8 @@ class AccessUri(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.access_sas = None - self.security_data_access_sas = None + self.access_sas: Optional[str] = None + self.security_data_access_sas: Optional[str] = None class ApiError(_serialization.Model): @@ -311,7 +311,7 @@ def __init__( self.gallery_image_reference = gallery_image_reference self.source_uri = source_uri self.source_resource_id = source_resource_id - self.source_unique_id = None + self.source_unique_id: Optional[str] = None self.upload_size_bytes = upload_size_bytes self.logical_sector_size = logical_sector_size self.security_data_uri = security_data_uri @@ -362,9 +362,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -699,43 +699,43 @@ def __init__( # pylint: disable=too-many-locals :paramtype optimized_for_frequent_attach: bool """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None - self.managed_by_extended = None + self.managed_by: Optional[str] = None + self.managed_by_extended: Optional[List[str]] = None self.sku = sku self.zones = zones self.extended_location = extended_location - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.disk_iops_read_write = disk_iops_read_write self.disk_m_bps_read_write = disk_m_bps_read_write self.disk_iops_read_only = disk_iops_read_only self.disk_m_bps_read_only = disk_m_bps_read_only - self.disk_state = None + self.disk_state: Optional[Union[str, "_models.DiskState"]] = None self.encryption = encryption self.max_shares = max_shares - self.share_info = None + self.share_info: Optional[List["_models.ShareInfoElement"]] = None self.network_access_policy = network_access_policy self.disk_access_id = disk_access_id - self.bursting_enabled_time = None + self.bursting_enabled_time: Optional[datetime.datetime] = None self.tier = tier self.bursting_enabled = bursting_enabled - self.property_updates_in_progress = None + self.property_updates_in_progress: Optional["_models.PropertyUpdatesInProgress"] = None self.supports_hibernation = supports_hibernation self.security_profile = security_profile self.completion_percent = completion_percent self.public_network_access = public_network_access self.data_access_auth_mode = data_access_auth_mode self.optimized_for_frequent_attach = optimized_for_frequent_attach - self.last_ownership_update_time = None + self.last_ownership_update_time: Optional[datetime.datetime] = None class DiskAccess(Resource): @@ -812,9 +812,9 @@ def __init__( """ super().__init__(location=location, tags=tags, **kwargs) self.extended_location = extended_location - self.private_endpoint_connections = None - self.provisioning_state = None - self.time_created = None + self.private_endpoint_connections: Optional[List["_models.PrivateEndpointConnection"]] = None + self.provisioning_state: Optional[str] = None + self.time_created: Optional[datetime.datetime] = None class DiskAccessList(_serialization.Model): @@ -986,11 +986,11 @@ def __init__( self.identity = identity self.encryption_type = encryption_type self.active_key = active_key - self.previous_keys = None - self.provisioning_state = None + self.previous_keys: Optional[List["_models.KeyForDiskEncryptionSet"]] = None + self.provisioning_state: Optional[str] = None self.rotation_to_latest_key_version_enabled = rotation_to_latest_key_version_enabled - self.last_key_rotation_timestamp = None - self.auto_key_rotation_error = None + self.last_key_rotation_timestamp: Optional[datetime.datetime] = None + self.auto_key_rotation_error: Optional["_models.ApiError"] = None self.federated_client_id = federated_client_id @@ -1167,9 +1167,9 @@ class ProxyOnlyResource(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None class DiskRestorePoint(ProxyOnlyResource): @@ -1316,24 +1316,24 @@ def __init__( :paramtype security_profile: ~azure.mgmt.compute.v2024_03_02.models.DiskSecurityProfile """ super().__init__(**kwargs) - self.time_created = None - self.source_resource_id = None - self.os_type = None + self.time_created: Optional[datetime.datetime] = None + self.source_resource_id: Optional[str] = None + self.os_type: Optional[Union[str, "_models.OperatingSystemTypes"]] = None self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities - self.family_id = None - self.source_unique_id = None - self.encryption = None + self.family_id: Optional[str] = None + self.source_unique_id: Optional[str] = None + self.encryption: Optional["_models.Encryption"] = None self.supports_hibernation = supports_hibernation self.network_access_policy = network_access_policy self.public_network_access = public_network_access self.disk_access_id = disk_access_id self.completion_percent = completion_percent - self.replication_state = None - self.source_resource_location = None + self.replication_state: Optional[str] = None + self.source_resource_location: Optional[str] = None self.security_profile = security_profile - self.logical_sector_size = None + self.logical_sector_size: Optional[int] = None class DiskRestorePointList(_serialization.Model): @@ -1442,7 +1442,7 @@ def __init__(self, *, name: Optional[Union[str, "_models.DiskStorageAccountTypes """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class DiskUpdate(_serialization.Model): @@ -1675,7 +1675,7 @@ def __init__( self.bursting_enabled = bursting_enabled self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities - self.property_updates_in_progress = None + self.property_updates_in_progress: Optional["_models.PropertyUpdatesInProgress"] = None self.supports_hibernation = supports_hibernation self.public_network_access = public_network_access self.data_access_auth_mode = data_access_auth_mode @@ -1742,7 +1742,7 @@ class EncryptionSetIdentity(_serialization.Model): :vartype tenant_id: str :ivar user_assigned_identities: The list of user identities associated with the disk encryption set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2024_03_02.models.UserAssignedIdentitiesValue] """ @@ -1776,14 +1776,14 @@ def __init__( :keyword user_assigned_identities: The list of user identities associated with the disk encryption set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, ~azure.mgmt.compute.v2024_03_02.models.UserAssignedIdentitiesValue] """ super().__init__(**kwargs) self.type = type - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.user_assigned_identities = user_assigned_identities @@ -2175,7 +2175,7 @@ class PrivateEndpoint(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class PrivateEndpointConnection(_serialization.Model): @@ -2234,12 +2234,12 @@ def __init__( ~azure.mgmt.compute.v2024_03_02.models.PrivateLinkServiceConnectionState """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.private_endpoint = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.private_endpoint: Optional["_models.PrivateEndpoint"] = None self.private_link_service_connection_state = private_link_service_connection_state - self.provisioning_state = None + self.provisioning_state: Optional[Union[str, "_models.PrivateEndpointConnectionProvisioningState"]] = None class PrivateEndpointConnectionListResult(_serialization.Model): @@ -2318,11 +2318,11 @@ def __init__(self, *, required_zone_names: Optional[List[str]] = None, **kwargs: :paramtype required_zone_names: list[str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.group_id = None - self.required_members = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.group_id: Optional[str] = None + self.required_members: Optional[List[str]] = None self.required_zone_names = required_zone_names @@ -2540,9 +2540,9 @@ def __init__(self, *, location: Optional[str] = None, tags: Optional[Dict[str, s """ super().__init__(**kwargs) self.location = location - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -2566,7 +2566,7 @@ class ShareInfoElement(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.vm_uri = None + self.vm_uri: Optional[str] = None class Snapshot(Resource): @@ -2810,23 +2810,23 @@ def __init__( # pylint: disable=too-many-locals ~azure.mgmt.compute.v2024_03_02.models.DataAccessAuthMode """ super().__init__(location=location, tags=tags, **kwargs) - self.managed_by = None + self.managed_by: Optional[str] = None self.sku = sku self.extended_location = extended_location - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.os_type = os_type self.hyper_v_generation = hyper_v_generation self.purchase_plan = purchase_plan self.supported_capabilities = supported_capabilities self.creation_data = creation_data self.disk_size_gb = disk_size_gb - self.disk_size_bytes = None - self.disk_state = None - self.unique_id = None + self.disk_size_bytes: Optional[int] = None + self.disk_state: Optional[Union[str, "_models.DiskState"]] = None + self.unique_id: Optional[str] = None self.encryption_settings_collection = encryption_settings_collection - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.incremental = incremental - self.incremental_snapshot_family_id = None + self.incremental_snapshot_family_id: Optional[str] = None self.encryption = encryption self.network_access_policy = network_access_policy self.disk_access_id = disk_access_id @@ -2904,7 +2904,7 @@ def __init__( """ super().__init__(**kwargs) self.name = name - self.tier = None + self.tier: Optional[str] = None class SnapshotUpdate(_serialization.Model): @@ -3104,7 +3104,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SupportedCapabilities(_serialization.Model): @@ -3178,8 +3178,8 @@ class SystemData(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.created_at = None - self.last_modified_at = None + self.created_at: Optional[datetime.datetime] = None + self.last_modified_at: Optional[datetime.datetime] = None class UserAssignedIdentitiesValue(_serialization.Model): @@ -3206,5 +3206,5 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/operations/_operations.py index edb0607d7879..d7ec5bc37c04 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_03_02/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -58,7 +56,7 @@ def build_disks_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -92,7 +90,7 @@ def build_disks_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -125,7 +123,7 @@ def build_disks_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -153,7 +151,7 @@ def build_disks_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -181,7 +179,7 @@ def build_disks_list_by_resource_group_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -236,7 +234,7 @@ def build_disks_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -266,7 +264,7 @@ def build_disks_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -295,7 +293,7 @@ def build_disk_accesses_create_or_update_request( # pylint: disable=name-too-lo _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -329,7 +327,7 @@ def build_disk_accesses_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -362,7 +360,7 @@ def build_disk_accesses_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -393,7 +391,7 @@ def build_disk_accesses_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -424,7 +422,7 @@ def build_disk_accesses_list_by_resource_group_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -478,7 +476,7 @@ def build_disk_accesses_get_private_link_resources_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateLinkResources", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -514,7 +512,7 @@ def build_disk_accesses_update_a_private_endpoint_connection_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -554,7 +552,7 @@ def build_disk_accesses_get_a_private_endpoint_connection_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -592,7 +590,7 @@ def build_disk_accesses_delete_a_private_endpoint_connection_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -626,7 +624,7 @@ def build_disk_accesses_list_private_endpoint_connections_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -658,7 +656,7 @@ def build_disk_encryption_sets_create_or_update_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -692,7 +690,7 @@ def build_disk_encryption_sets_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -725,7 +723,7 @@ def build_disk_encryption_sets_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -756,7 +754,7 @@ def build_disk_encryption_sets_delete_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -787,7 +785,7 @@ def build_disk_encryption_sets_list_by_resource_group_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -841,7 +839,7 @@ def build_disk_encryption_sets_list_associated_resources_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}/associatedResources", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -877,7 +875,7 @@ def build_disk_restore_point_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -916,7 +914,7 @@ def build_disk_restore_point_list_by_restore_point_request( # pylint: disable=n _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -956,7 +954,7 @@ def build_disk_restore_point_grant_access_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -998,7 +996,7 @@ def build_disk_restore_point_revoke_access_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1034,7 +1032,7 @@ def build_snapshots_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1068,7 +1066,7 @@ def build_snapshots_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1101,7 +1099,7 @@ def build_snapshots_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1129,7 +1127,7 @@ def build_snapshots_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1157,7 +1155,7 @@ def build_snapshots_list_by_resource_group_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1212,7 +1210,7 @@ def build_snapshots_grant_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1242,7 +1240,7 @@ def build_snapshots_revoke_access_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1271,10 +1269,10 @@ class DisksOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -2269,10 +2267,10 @@ class DiskAccessesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3520,10 +3518,10 @@ class DiskEncryptionSetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -4333,10 +4331,10 @@ class DiskRestorePointOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -4856,10 +4854,10 @@ class SnapshotsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/__init__.py similarity index 100% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/__init__.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/__init__.py diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_compute_management_client.py similarity index 79% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_compute_management_client.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_compute_management_client.py index 5c780f4bc783..75151e626615 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( AvailabilitySetsOperations, CapacityReservationGroupsOperations, @@ -55,87 +57,87 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """Compute Client. :ivar operations: Operations operations - :vartype operations: azure.mgmt.compute.v2024_11_01.operations.Operations + :vartype operations: azure.mgmt.compute.v2024_07_01.operations.Operations :ivar usage: UsageOperations operations - :vartype usage: azure.mgmt.compute.v2024_11_01.operations.UsageOperations + :vartype usage: azure.mgmt.compute.v2024_07_01.operations.UsageOperations :ivar virtual_machine_sizes: VirtualMachineSizesOperations operations :vartype virtual_machine_sizes: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineSizesOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineSizesOperations :ivar virtual_machine_scale_sets: VirtualMachineScaleSetsOperations operations :vartype virtual_machine_scale_sets: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineScaleSetsOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineScaleSetsOperations :ivar virtual_machine_scale_set_extensions: VirtualMachineScaleSetExtensionsOperations operations :vartype virtual_machine_scale_set_extensions: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineScaleSetExtensionsOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineScaleSetExtensionsOperations :ivar virtual_machine_scale_set_rolling_upgrades: VirtualMachineScaleSetRollingUpgradesOperations operations :vartype virtual_machine_scale_set_rolling_upgrades: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineScaleSetRollingUpgradesOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineScaleSetRollingUpgradesOperations :ivar virtual_machine_scale_set_vm_extensions: VirtualMachineScaleSetVMExtensionsOperations operations :vartype virtual_machine_scale_set_vm_extensions: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineScaleSetVMExtensionsOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineScaleSetVMExtensionsOperations :ivar virtual_machine_scale_set_vms: VirtualMachineScaleSetVMsOperations operations :vartype virtual_machine_scale_set_vms: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineScaleSetVMsOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineScaleSetVMsOperations :ivar virtual_machine_extensions: VirtualMachineExtensionsOperations operations :vartype virtual_machine_extensions: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineExtensionsOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineExtensionsOperations :ivar virtual_machines: VirtualMachinesOperations operations - :vartype virtual_machines: azure.mgmt.compute.v2024_11_01.operations.VirtualMachinesOperations + :vartype virtual_machines: azure.mgmt.compute.v2024_07_01.operations.VirtualMachinesOperations :ivar virtual_machine_images: VirtualMachineImagesOperations operations :vartype virtual_machine_images: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineImagesOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineImagesOperations :ivar virtual_machine_images_edge_zone: VirtualMachineImagesEdgeZoneOperations operations :vartype virtual_machine_images_edge_zone: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineImagesEdgeZoneOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineImagesEdgeZoneOperations :ivar virtual_machine_extension_images: VirtualMachineExtensionImagesOperations operations :vartype virtual_machine_extension_images: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineExtensionImagesOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineExtensionImagesOperations :ivar availability_sets: AvailabilitySetsOperations operations :vartype availability_sets: - azure.mgmt.compute.v2024_11_01.operations.AvailabilitySetsOperations + azure.mgmt.compute.v2024_07_01.operations.AvailabilitySetsOperations :ivar proximity_placement_groups: ProximityPlacementGroupsOperations operations :vartype proximity_placement_groups: - azure.mgmt.compute.v2024_11_01.operations.ProximityPlacementGroupsOperations + azure.mgmt.compute.v2024_07_01.operations.ProximityPlacementGroupsOperations :ivar dedicated_host_groups: DedicatedHostGroupsOperations operations :vartype dedicated_host_groups: - azure.mgmt.compute.v2024_11_01.operations.DedicatedHostGroupsOperations + azure.mgmt.compute.v2024_07_01.operations.DedicatedHostGroupsOperations :ivar dedicated_hosts: DedicatedHostsOperations operations - :vartype dedicated_hosts: azure.mgmt.compute.v2024_11_01.operations.DedicatedHostsOperations + :vartype dedicated_hosts: azure.mgmt.compute.v2024_07_01.operations.DedicatedHostsOperations :ivar ssh_public_keys: SshPublicKeysOperations operations - :vartype ssh_public_keys: azure.mgmt.compute.v2024_11_01.operations.SshPublicKeysOperations + :vartype ssh_public_keys: azure.mgmt.compute.v2024_07_01.operations.SshPublicKeysOperations :ivar images: ImagesOperations operations - :vartype images: azure.mgmt.compute.v2024_11_01.operations.ImagesOperations + :vartype images: azure.mgmt.compute.v2024_07_01.operations.ImagesOperations :ivar restore_point_collections: RestorePointCollectionsOperations operations :vartype restore_point_collections: - azure.mgmt.compute.v2024_11_01.operations.RestorePointCollectionsOperations + azure.mgmt.compute.v2024_07_01.operations.RestorePointCollectionsOperations :ivar restore_points: RestorePointsOperations operations - :vartype restore_points: azure.mgmt.compute.v2024_11_01.operations.RestorePointsOperations + :vartype restore_points: azure.mgmt.compute.v2024_07_01.operations.RestorePointsOperations :ivar capacity_reservation_groups: CapacityReservationGroupsOperations operations :vartype capacity_reservation_groups: - azure.mgmt.compute.v2024_11_01.operations.CapacityReservationGroupsOperations + azure.mgmt.compute.v2024_07_01.operations.CapacityReservationGroupsOperations :ivar capacity_reservations: CapacityReservationsOperations operations :vartype capacity_reservations: - azure.mgmt.compute.v2024_11_01.operations.CapacityReservationsOperations + azure.mgmt.compute.v2024_07_01.operations.CapacityReservationsOperations :ivar log_analytics: LogAnalyticsOperations operations - :vartype log_analytics: azure.mgmt.compute.v2024_11_01.operations.LogAnalyticsOperations + :vartype log_analytics: azure.mgmt.compute.v2024_07_01.operations.LogAnalyticsOperations :ivar virtual_machine_run_commands: VirtualMachineRunCommandsOperations operations :vartype virtual_machine_run_commands: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineRunCommandsOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineRunCommandsOperations :ivar virtual_machine_scale_set_vm_run_commands: VirtualMachineScaleSetVMRunCommandsOperations operations :vartype virtual_machine_scale_set_vm_run_commands: - azure.mgmt.compute.v2024_11_01.operations.VirtualMachineScaleSetVMRunCommandsOperations + azure.mgmt.compute.v2024_07_01.operations.VirtualMachineScaleSetVMRunCommandsOperations :param credential: Credential needed for the client to connect to Azure. Required. :type credential: ~azure.core.credentials.TokenCredential :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2024-11-01". Note that overriding this + :keyword api_version: Api Version. Default value is "2024-07-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str :keyword int polling_interval: Default waiting time between two polls for LRO operations if no @@ -143,15 +145,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -170,83 +174,83 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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 - self.operations = Operations(self._client, self._config, self._serialize, self._deserialize, "2024-11-01") - self.usage = UsageOperations(self._client, self._config, self._serialize, self._deserialize, "2024-11-01") + self.operations = Operations(self._client, self._config, self._serialize, self._deserialize, "2024-07-01") + self.usage = UsageOperations(self._client, self._config, self._serialize, self._deserialize, "2024-07-01") self.virtual_machine_sizes = VirtualMachineSizesOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_sets = VirtualMachineScaleSetsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_set_extensions = VirtualMachineScaleSetExtensionsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_set_rolling_upgrades = VirtualMachineScaleSetRollingUpgradesOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_set_vm_extensions = VirtualMachineScaleSetVMExtensionsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_set_vms = VirtualMachineScaleSetVMsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_extensions = VirtualMachineExtensionsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machines = VirtualMachinesOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_images = VirtualMachineImagesOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_images_edge_zone = VirtualMachineImagesEdgeZoneOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_extension_images = VirtualMachineExtensionImagesOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.availability_sets = AvailabilitySetsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.proximity_placement_groups = ProximityPlacementGroupsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.dedicated_host_groups = DedicatedHostGroupsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.dedicated_hosts = DedicatedHostsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.ssh_public_keys = SshPublicKeysOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) - self.images = ImagesOperations(self._client, self._config, self._serialize, self._deserialize, "2024-11-01") + self.images = ImagesOperations(self._client, self._config, self._serialize, self._deserialize, "2024-07-01") self.restore_point_collections = RestorePointCollectionsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.restore_points = RestorePointsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.capacity_reservation_groups = CapacityReservationGroupsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.capacity_reservations = CapacityReservationsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.log_analytics = LogAnalyticsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_run_commands = VirtualMachineRunCommandsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_set_vm_run_commands = VirtualMachineScaleSetVMRunCommandsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) def _send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_configuration.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_configuration.py similarity index 96% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_configuration.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_configuration.py index da0ddc20eae1..22f72f6c2113 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_configuration.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_configuration.py @@ -28,13 +28,13 @@ class ComputeManagementClientConfiguration: # pylint: disable=too-many-instance :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. Required. :type subscription_id: str - :keyword api_version: Api Version. Default value is "2024-11-01". Note that overriding this + :keyword api_version: Api Version. Default value is "2024-07-01". 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: - api_version: str = kwargs.pop("api_version", "2024-11-01") + api_version: str = kwargs.pop("api_version", "2024-07-01") if credential is None: raise ValueError("Parameter 'credential' must not be None.") diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_metadata.json similarity index 84% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_metadata.json rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_metadata.json index 373d6f1356a8..da37c61c1aaa 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_metadata.json @@ -1,17 +1,17 @@ { - "chosen_version": "2024-11-01", - "total_api_version_list": ["2024-11-01"], + "chosen_version": "2024-07-01", + "total_api_version_list": ["2024-07-01"], "client": { "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/_patch.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_patch.py similarity index 61% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/_patch.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_patch.py index f7dd32510333..8bcb627aa475 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/_patch.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_patch.py @@ -1,7 +1,8 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# 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. +# -------------------------------------------------------------------------- """Customize generated code here. Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_version.py similarity index 96% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_version.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/__init__.py similarity index 100% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/__init__.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/__init__.py diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/_compute_management_client.py similarity index 79% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/_compute_management_client.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/_compute_management_client.py index b0d2e626c38c..089a60327592 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( AvailabilitySetsOperations, @@ -55,89 +57,89 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """Compute Client. :ivar operations: Operations operations - :vartype operations: azure.mgmt.compute.v2024_11_01.aio.operations.Operations + :vartype operations: azure.mgmt.compute.v2024_07_01.aio.operations.Operations :ivar usage: UsageOperations operations - :vartype usage: azure.mgmt.compute.v2024_11_01.aio.operations.UsageOperations + :vartype usage: azure.mgmt.compute.v2024_07_01.aio.operations.UsageOperations :ivar virtual_machine_sizes: VirtualMachineSizesOperations operations :vartype virtual_machine_sizes: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineSizesOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineSizesOperations :ivar virtual_machine_scale_sets: VirtualMachineScaleSetsOperations operations :vartype virtual_machine_scale_sets: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineScaleSetsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineScaleSetsOperations :ivar virtual_machine_scale_set_extensions: VirtualMachineScaleSetExtensionsOperations operations :vartype virtual_machine_scale_set_extensions: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineScaleSetExtensionsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineScaleSetExtensionsOperations :ivar virtual_machine_scale_set_rolling_upgrades: VirtualMachineScaleSetRollingUpgradesOperations operations :vartype virtual_machine_scale_set_rolling_upgrades: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineScaleSetRollingUpgradesOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineScaleSetRollingUpgradesOperations :ivar virtual_machine_scale_set_vm_extensions: VirtualMachineScaleSetVMExtensionsOperations operations :vartype virtual_machine_scale_set_vm_extensions: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineScaleSetVMExtensionsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineScaleSetVMExtensionsOperations :ivar virtual_machine_scale_set_vms: VirtualMachineScaleSetVMsOperations operations :vartype virtual_machine_scale_set_vms: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineScaleSetVMsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineScaleSetVMsOperations :ivar virtual_machine_extensions: VirtualMachineExtensionsOperations operations :vartype virtual_machine_extensions: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineExtensionsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineExtensionsOperations :ivar virtual_machines: VirtualMachinesOperations operations :vartype virtual_machines: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachinesOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachinesOperations :ivar virtual_machine_images: VirtualMachineImagesOperations operations :vartype virtual_machine_images: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineImagesOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineImagesOperations :ivar virtual_machine_images_edge_zone: VirtualMachineImagesEdgeZoneOperations operations :vartype virtual_machine_images_edge_zone: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineImagesEdgeZoneOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineImagesEdgeZoneOperations :ivar virtual_machine_extension_images: VirtualMachineExtensionImagesOperations operations :vartype virtual_machine_extension_images: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineExtensionImagesOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineExtensionImagesOperations :ivar availability_sets: AvailabilitySetsOperations operations :vartype availability_sets: - azure.mgmt.compute.v2024_11_01.aio.operations.AvailabilitySetsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.AvailabilitySetsOperations :ivar proximity_placement_groups: ProximityPlacementGroupsOperations operations :vartype proximity_placement_groups: - azure.mgmt.compute.v2024_11_01.aio.operations.ProximityPlacementGroupsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.ProximityPlacementGroupsOperations :ivar dedicated_host_groups: DedicatedHostGroupsOperations operations :vartype dedicated_host_groups: - azure.mgmt.compute.v2024_11_01.aio.operations.DedicatedHostGroupsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.DedicatedHostGroupsOperations :ivar dedicated_hosts: DedicatedHostsOperations operations :vartype dedicated_hosts: - azure.mgmt.compute.v2024_11_01.aio.operations.DedicatedHostsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.DedicatedHostsOperations :ivar ssh_public_keys: SshPublicKeysOperations operations - :vartype ssh_public_keys: azure.mgmt.compute.v2024_11_01.aio.operations.SshPublicKeysOperations + :vartype ssh_public_keys: azure.mgmt.compute.v2024_07_01.aio.operations.SshPublicKeysOperations :ivar images: ImagesOperations operations - :vartype images: azure.mgmt.compute.v2024_11_01.aio.operations.ImagesOperations + :vartype images: azure.mgmt.compute.v2024_07_01.aio.operations.ImagesOperations :ivar restore_point_collections: RestorePointCollectionsOperations operations :vartype restore_point_collections: - azure.mgmt.compute.v2024_11_01.aio.operations.RestorePointCollectionsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.RestorePointCollectionsOperations :ivar restore_points: RestorePointsOperations operations - :vartype restore_points: azure.mgmt.compute.v2024_11_01.aio.operations.RestorePointsOperations + :vartype restore_points: azure.mgmt.compute.v2024_07_01.aio.operations.RestorePointsOperations :ivar capacity_reservation_groups: CapacityReservationGroupsOperations operations :vartype capacity_reservation_groups: - azure.mgmt.compute.v2024_11_01.aio.operations.CapacityReservationGroupsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.CapacityReservationGroupsOperations :ivar capacity_reservations: CapacityReservationsOperations operations :vartype capacity_reservations: - azure.mgmt.compute.v2024_11_01.aio.operations.CapacityReservationsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.CapacityReservationsOperations :ivar log_analytics: LogAnalyticsOperations operations - :vartype log_analytics: azure.mgmt.compute.v2024_11_01.aio.operations.LogAnalyticsOperations + :vartype log_analytics: azure.mgmt.compute.v2024_07_01.aio.operations.LogAnalyticsOperations :ivar virtual_machine_run_commands: VirtualMachineRunCommandsOperations operations :vartype virtual_machine_run_commands: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineRunCommandsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineRunCommandsOperations :ivar virtual_machine_scale_set_vm_run_commands: VirtualMachineScaleSetVMRunCommandsOperations operations :vartype virtual_machine_scale_set_vm_run_commands: - azure.mgmt.compute.v2024_11_01.aio.operations.VirtualMachineScaleSetVMRunCommandsOperations + azure.mgmt.compute.v2024_07_01.aio.operations.VirtualMachineScaleSetVMRunCommandsOperations :param credential: Credential needed for the client to connect to Azure. Required. :type credential: ~azure.core.credentials_async.AsyncTokenCredential :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2024-11-01". Note that overriding this + :keyword api_version: Api Version. Default value is "2024-07-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str :keyword int polling_interval: Default waiting time between two polls for LRO operations if no @@ -145,15 +147,17 @@ class ComputeManagementClient: # pylint: disable=too-many-instance-attributes """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -172,83 +176,85 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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 - self.operations = Operations(self._client, self._config, self._serialize, self._deserialize, "2024-11-01") - self.usage = UsageOperations(self._client, self._config, self._serialize, self._deserialize, "2024-11-01") + self.operations = Operations(self._client, self._config, self._serialize, self._deserialize, "2024-07-01") + self.usage = UsageOperations(self._client, self._config, self._serialize, self._deserialize, "2024-07-01") self.virtual_machine_sizes = VirtualMachineSizesOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_sets = VirtualMachineScaleSetsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_set_extensions = VirtualMachineScaleSetExtensionsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_set_rolling_upgrades = VirtualMachineScaleSetRollingUpgradesOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_set_vm_extensions = VirtualMachineScaleSetVMExtensionsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_set_vms = VirtualMachineScaleSetVMsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_extensions = VirtualMachineExtensionsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machines = VirtualMachinesOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_images = VirtualMachineImagesOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_images_edge_zone = VirtualMachineImagesEdgeZoneOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_extension_images = VirtualMachineExtensionImagesOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.availability_sets = AvailabilitySetsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.proximity_placement_groups = ProximityPlacementGroupsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.dedicated_host_groups = DedicatedHostGroupsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.dedicated_hosts = DedicatedHostsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.ssh_public_keys = SshPublicKeysOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) - self.images = ImagesOperations(self._client, self._config, self._serialize, self._deserialize, "2024-11-01") + self.images = ImagesOperations(self._client, self._config, self._serialize, self._deserialize, "2024-07-01") self.restore_point_collections = RestorePointCollectionsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.restore_points = RestorePointsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.capacity_reservation_groups = CapacityReservationGroupsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.capacity_reservations = CapacityReservationsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.log_analytics = LogAnalyticsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_run_commands = VirtualMachineRunCommandsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) self.virtual_machine_scale_set_vm_run_commands = VirtualMachineScaleSetVMRunCommandsOperations( - self._client, self._config, self._serialize, self._deserialize, "2024-11-01" + self._client, self._config, self._serialize, self._deserialize, "2024-07-01" ) def _send_request( diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/_configuration.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/_configuration.py similarity index 96% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/_configuration.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/_configuration.py index 5452cdff0995..c8d72d0b6036 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/_configuration.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/_configuration.py @@ -28,13 +28,13 @@ class ComputeManagementClientConfiguration: # pylint: disable=too-many-instance :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. Required. :type subscription_id: str - :keyword api_version: Api Version. Default value is "2024-11-01". Note that overriding this + :keyword api_version: Api Version. Default value is "2024-07-01". 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: - api_version: str = kwargs.pop("api_version", "2024-11-01") + api_version: str = kwargs.pop("api_version", "2024-07-01") if credential is None: raise ValueError("Parameter 'credential' must not be None.") diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/operations/_patch.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/_patch.py similarity index 61% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/operations/_patch.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/_patch.py index f7dd32510333..8bcb627aa475 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/operations/_patch.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/_patch.py @@ -1,7 +1,8 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# 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. +# -------------------------------------------------------------------------- """Customize generated code here. Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/operations/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/operations/__init__.py similarity index 100% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/operations/__init__.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/operations/__init__.py diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/operations/_operations.py similarity index 92% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/operations/_operations.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/operations/_operations.py index c803b24faa74..716c7acf09c7 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, List, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,18 +33,15 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( - build_availability_sets_cancel_migration_to_virtual_machine_scale_set_request, - build_availability_sets_convert_to_virtual_machine_scale_set_request, build_availability_sets_create_or_update_request, build_availability_sets_delete_request, build_availability_sets_get_request, build_availability_sets_list_available_sizes_request, build_availability_sets_list_by_subscription_request, build_availability_sets_list_request, - build_availability_sets_start_migration_to_virtual_machine_scale_set_request, build_availability_sets_update_request, - build_availability_sets_validate_migration_to_virtual_machine_scale_set_request, build_capacity_reservation_groups_create_or_update_request, build_capacity_reservation_groups_delete_request, build_capacity_reservation_groups_get_request, @@ -120,7 +118,6 @@ build_virtual_machine_images_list_publishers_request, build_virtual_machine_images_list_request, build_virtual_machine_images_list_skus_request, - build_virtual_machine_images_list_with_properties_request, build_virtual_machine_run_commands_create_or_update_request, build_virtual_machine_run_commands_delete_request, build_virtual_machine_run_commands_get_by_virtual_machine_request, @@ -206,7 +203,6 @@ build_virtual_machines_list_available_sizes_request, build_virtual_machines_list_by_location_request, build_virtual_machines_list_request, - build_virtual_machines_migrate_to_vm_scale_set_request, build_virtual_machines_perform_maintenance_request, build_virtual_machines_power_off_request, build_virtual_machines_reapply_request, @@ -219,11 +215,8 @@ build_virtual_machines_start_request, build_virtual_machines_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -234,7 +227,7 @@ class Operations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`operations` attribute. """ @@ -242,10 +235,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -255,13 +248,13 @@ def list(self, **kwargs: Any) -> AsyncIterable["_models.ComputeOperationValue"]: :return: An iterator like instance of either ComputeOperationValue or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.ComputeOperationValue] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.ComputeOperationValue] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ComputeOperationListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -330,7 +323,7 @@ class UsageOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`usage` attribute. """ @@ -338,10 +331,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -352,13 +345,13 @@ def list(self, location: str, **kwargs: Any) -> AsyncIterable["_models.Usage"]: :param location: The location for which resource usage is queried. Required. :type location: str :return: An iterator like instance of either Usage or the result of cls(response) - :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.Usage] + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.Usage] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ListUsagesResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -429,7 +422,7 @@ class VirtualMachineSizesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_sizes` attribute. """ @@ -437,10 +430,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -452,13 +445,13 @@ def list(self, location: str, **kwargs: Any) -> AsyncIterable["_models.VirtualMa :type location: str :return: An iterator like instance of either VirtualMachineSize or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSize] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSize] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineSizeListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -529,7 +522,7 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_scale_sets` attribute. """ @@ -537,10 +530,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -553,13 +546,13 @@ def list_by_location(self, location: str, **kwargs: Any) -> AsyncIterable["_mode :return: An iterator like instance of either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -644,7 +637,7 @@ async def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -713,7 +706,7 @@ async def begin_create_or_update( :param vm_scale_set_name: The name of the VM scale set to create or update. Required. :type vm_scale_set_name: str :param parameters: The scale set object. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -728,7 +721,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -766,7 +759,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -789,7 +782,7 @@ async def begin_create_or_update( :type vm_scale_set_name: str :param parameters: The scale set object. Is either a VirtualMachineScaleSet type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet or IO[bytes] :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -801,13 +794,13 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSet] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -874,7 +867,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -943,7 +936,7 @@ async def begin_update( :param vm_scale_set_name: The name of the VM scale set to create or update. Required. :type vm_scale_set_name: str :param parameters: The scale set object. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdate :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -958,7 +951,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -996,7 +989,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1019,7 +1012,7 @@ async def begin_update( :type vm_scale_set_name: str :param parameters: The scale set object. Is either a VirtualMachineScaleSetUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdate or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdate or IO[bytes] :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting @@ -1032,13 +1025,13 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSet] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -1098,7 +1091,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_sets_delete_request( @@ -1155,7 +1148,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -1211,9 +1204,9 @@ async def get( :keyword expand: The expand expression to apply on the operation. 'UserData' retrieves the UserData property of the VM scale set that was provided by the user during the VM scale set Create/Update operation. "userData" Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.ExpandTypesForGetVMScaleSets + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.ExpandTypesForGetVMScaleSets :return: VirtualMachineScaleSet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1227,7 +1220,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSet] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_sets_get_request( @@ -1279,7 +1272,7 @@ async def _deallocate_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -1353,7 +1346,7 @@ async def begin_deallocate( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword hibernate: Optional parameter to hibernate a virtual machine from the VM scale set. (This feature is available for VMSS with Flexible OrchestrationMode only). Default value is None. @@ -1421,7 +1414,7 @@ async def begin_deallocate( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :keyword hibernate: Optional parameter to hibernate a virtual machine from the VM scale set. (This feature is available for VMSS with Flexible OrchestrationMode only). Default value is None. @@ -1433,7 +1426,7 @@ async def begin_deallocate( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -1494,7 +1487,7 @@ async def _delete_instances_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -1563,7 +1556,7 @@ async def begin_delete_instances( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Required. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs :keyword force_deletion: Optional parameter to force delete virtual machines from the VM scale set. (Feature in Preview). Default value is None. :paramtype force_deletion: bool @@ -1625,7 +1618,7 @@ async def begin_delete_instances( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceRequiredIDs type or a IO[bytes] type. Required. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs or IO[bytes] :keyword force_deletion: Optional parameter to force delete virtual machines from the VM scale set. (Feature in Preview). Default value is None. :paramtype force_deletion: bool @@ -1636,7 +1629,7 @@ async def begin_delete_instances( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -1688,7 +1681,7 @@ async def get_instance_view( :param vm_scale_set_name: The name of the VM scale set. Required. :type vm_scale_set_name: str :return: VirtualMachineScaleSetInstanceView or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetInstanceView + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetInstanceView :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1702,7 +1695,7 @@ async def get_instance_view( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetInstanceView] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_sets_get_instance_view_request( @@ -1742,13 +1735,13 @@ def list(self, resource_group_name: str, **kwargs: Any) -> AsyncIterable["_model :return: An iterator like instance of either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -1821,13 +1814,13 @@ def list_all(self, **kwargs: Any) -> AsyncIterable["_models.VirtualMachineScaleS :return: An iterator like instance of either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetListWithLinkResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -1904,13 +1897,13 @@ def list_skus( :return: An iterator like instance of either VirtualMachineScaleSetSku or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetSku] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetSku] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetListSkusResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -1979,7 +1972,6 @@ async def get_next(next_link=None): def get_os_upgrade_history( self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any ) -> AsyncIterable["_models.UpgradeOperationHistoricalStatusInfo"]: - # pylint: disable=line-too-long """Gets list of OS upgrades on a VM scale set instance. :param resource_group_name: The name of the resource group. Required. @@ -1989,13 +1981,13 @@ def get_os_upgrade_history( :return: An iterator like instance of either UpgradeOperationHistoricalStatusInfo or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.UpgradeOperationHistoricalStatusInfo] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.UpgradeOperationHistoricalStatusInfo] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetListOSUpgradeHistory] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -2080,7 +2072,7 @@ async def _power_off_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -2155,7 +2147,7 @@ async def begin_power_off( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword skip_shutdown: The parameter to request non-graceful VM shutdown. True value for this flag indicates non-graceful shutdown whereas false indicates otherwise. Default value for this flag is false if not specified. Default value is False. @@ -2225,7 +2217,7 @@ async def begin_power_off( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :keyword skip_shutdown: The parameter to request non-graceful VM shutdown. True value for this flag indicates non-graceful shutdown whereas false indicates otherwise. Default value for this flag is false if not specified. Default value is False. @@ -2237,7 +2229,7 @@ async def begin_power_off( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -2296,7 +2288,7 @@ async def _restart_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -2366,7 +2358,7 @@ async def begin_restart( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -2419,7 +2411,7 @@ async def begin_restart( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -2427,7 +2419,7 @@ async def begin_restart( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -2485,7 +2477,7 @@ async def _start_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -2555,7 +2547,7 @@ async def begin_start( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -2608,7 +2600,7 @@ async def begin_start( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -2616,7 +2608,7 @@ async def begin_start( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -2670,7 +2662,7 @@ async def _reapply_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_sets_reapply_request( @@ -2728,7 +2720,7 @@ async def begin_reapply( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -2785,7 +2777,7 @@ async def _redeploy_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -2856,7 +2848,7 @@ async def begin_redeploy( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -2911,7 +2903,7 @@ async def begin_redeploy( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -2919,7 +2911,7 @@ async def begin_redeploy( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -2977,7 +2969,7 @@ async def _perform_maintenance_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -3050,7 +3042,7 @@ async def begin_perform_maintenance( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -3109,7 +3101,7 @@ async def begin_perform_maintenance( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -3117,7 +3109,7 @@ async def begin_perform_maintenance( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -3175,7 +3167,7 @@ async def _update_instances_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -3242,7 +3234,7 @@ async def begin_update_instances( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Required. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -3295,7 +3287,7 @@ async def begin_update_instances( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceRequiredIDs type or a IO[bytes] type. Required. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -3303,7 +3295,7 @@ async def begin_update_instances( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -3361,7 +3353,7 @@ async def _reimage_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -3432,7 +3424,7 @@ async def begin_reimage( :type vm_scale_set_name: str :param vm_scale_set_reimage_input: Parameters for Reimaging VM ScaleSet. Default value is None. :type vm_scale_set_reimage_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetReimageParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetReimageParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -3488,7 +3480,7 @@ async def begin_reimage( :param vm_scale_set_reimage_input: Parameters for Reimaging VM ScaleSet. Is either a VirtualMachineScaleSetReimageParameters type or a IO[bytes] type. Default value is None. :type vm_scale_set_reimage_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetReimageParameters or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetReimageParameters or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -3496,7 +3488,7 @@ async def begin_reimage( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -3554,7 +3546,7 @@ async def _reimage_all_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -3625,7 +3617,7 @@ async def begin_reimage_all( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -3680,7 +3672,7 @@ async def begin_reimage_all( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -3688,7 +3680,7 @@ async def begin_reimage_all( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -3746,7 +3738,7 @@ async def _approve_rolling_upgrade_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -3820,7 +3812,7 @@ async def begin_approve_rolling_upgrade( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -3875,7 +3867,7 @@ async def begin_approve_rolling_upgrade( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -3883,7 +3875,7 @@ async def begin_approve_rolling_upgrade( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -3951,7 +3943,7 @@ async def force_recovery_service_fabric_platform_update_domain_walk( # pylint: requested. Default value is None. :paramtype placement_group_id: str :return: RecoveryWalkResponse or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RecoveryWalkResponse + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RecoveryWalkResponse :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -3965,7 +3957,7 @@ async def force_recovery_service_fabric_platform_update_domain_walk( # pylint: _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RecoveryWalkResponse] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_sets_force_recovery_service_fabric_platform_update_domain_walk_request( @@ -4018,7 +4010,7 @@ async def convert_to_single_placement_group( :type vm_scale_set_name: str :param parameters: The input object for ConvertToSinglePlacementGroup API. Required. :type parameters: - ~azure.mgmt.compute.v2024_11_01.models.VMScaleSetConvertToSinglePlacementGroupInput + ~azure.mgmt.compute.v2024_07_01.models.VMScaleSetConvertToSinglePlacementGroupInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -4072,7 +4064,7 @@ async def convert_to_single_placement_group( :param parameters: The input object for ConvertToSinglePlacementGroup API. Is either a VMScaleSetConvertToSinglePlacementGroupInput type or a IO[bytes] type. Required. :type parameters: - ~azure.mgmt.compute.v2024_11_01.models.VMScaleSetConvertToSinglePlacementGroupInput or + ~azure.mgmt.compute.v2024_07_01.models.VMScaleSetConvertToSinglePlacementGroupInput or IO[bytes] :return: None or the result of cls(response) :rtype: None @@ -4089,7 +4081,7 @@ async def convert_to_single_placement_group( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) @@ -4146,7 +4138,7 @@ async def _set_orchestration_service_state_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -4212,7 +4204,7 @@ async def begin_set_orchestration_service_state( Required. :type vm_scale_set_name: str :param parameters: The input object for SetOrchestrationServiceState API. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceStateInput + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceStateInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -4265,7 +4257,7 @@ async def begin_set_orchestration_service_state( :type vm_scale_set_name: str :param parameters: The input object for SetOrchestrationServiceState API. Is either a OrchestrationServiceStateInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceStateInput or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceStateInput or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] @@ -4274,7 +4266,7 @@ async def begin_set_orchestration_service_state( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -4321,7 +4313,7 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_scale_set_extensions` attribute. """ @@ -4329,10 +4321,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -4354,7 +4346,7 @@ async def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -4426,14 +4418,14 @@ async def begin_create_or_update( :param extension_parameters: Parameters supplied to the Create VM scale set Extension operation. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -4466,7 +4458,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -4491,17 +4483,17 @@ async def begin_create_or_update( :param extension_parameters: Parameters supplied to the Create VM scale set Extension operation. Is either a VirtualMachineScaleSetExtension type or a IO[bytes] type. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSetExtension] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -4565,7 +4557,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -4637,14 +4629,14 @@ async def begin_update( :param extension_parameters: Parameters supplied to the Update VM scale set Extension operation. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtensionUpdate + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtensionUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -4677,7 +4669,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -4703,17 +4695,17 @@ async def begin_update( operation. Is either a VirtualMachineScaleSetExtensionUpdate type or a IO[bytes] type. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtensionUpdate or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtensionUpdate or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSetExtension] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -4772,7 +4764,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_extensions_delete_request( @@ -4829,7 +4821,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -4888,7 +4880,7 @@ async def get( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineScaleSetExtension or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -4902,7 +4894,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetExtension] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_extensions_get_request( @@ -4948,13 +4940,13 @@ def list( :return: An iterator like instance of either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetExtensionListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -5026,7 +5018,7 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_scale_set_rolling_upgrades` attribute. """ @@ -5034,10 +5026,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _cancel_initial( @@ -5054,7 +5046,7 @@ async def _cancel_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_rolling_upgrades_cancel_request( @@ -5107,7 +5099,7 @@ async def begin_cancel( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -5158,7 +5150,7 @@ async def _start_os_upgrade_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_rolling_upgrades_start_os_upgrade_request( @@ -5213,7 +5205,7 @@ async def begin_start_os_upgrade( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -5264,7 +5256,7 @@ async def _start_extension_upgrade_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_rolling_upgrades_start_extension_upgrade_request( @@ -5319,7 +5311,7 @@ async def begin_start_extension_upgrade( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -5367,7 +5359,7 @@ async def get_latest( :param vm_scale_set_name: The name of the VM scale set. Required. :type vm_scale_set_name: str :return: RollingUpgradeStatusInfo or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RollingUpgradeStatusInfo + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RollingUpgradeStatusInfo :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -5381,7 +5373,7 @@ async def get_latest( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RollingUpgradeStatusInfo] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_rolling_upgrades_get_latest_request( @@ -5419,7 +5411,7 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_scale_set_vm_extensions` attribute. """ @@ -5427,10 +5419,10 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -5453,7 +5445,7 @@ async def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -5528,14 +5520,14 @@ async def begin_create_or_update( :param extension_parameters: Parameters supplied to the Create Virtual Machine Extension operation. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -5570,7 +5562,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -5597,17 +5589,17 @@ async def begin_create_or_update( :param extension_parameters: Parameters supplied to the Create Virtual Machine Extension operation. Is either a VirtualMachineScaleSetVMExtension type or a IO[bytes] type. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSetVMExtension] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -5673,7 +5665,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -5748,14 +5740,14 @@ async def begin_update( :param extension_parameters: Parameters supplied to the Update Virtual Machine Extension operation. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtensionUpdate + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtensionUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -5790,7 +5782,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -5818,17 +5810,17 @@ async def begin_update( operation. Is either a VirtualMachineScaleSetVMExtensionUpdate type or a IO[bytes] type. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtensionUpdate or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtensionUpdate or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSetVMExtension] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -5888,7 +5880,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vm_extensions_delete_request( @@ -5947,7 +5939,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -6010,7 +6002,7 @@ async def get( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineScaleSetVMExtension or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -6024,7 +6016,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetVMExtension] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vm_extensions_get_request( @@ -6079,7 +6071,7 @@ async def list( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineScaleSetVMExtensionsListResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtensionsListResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtensionsListResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -6093,7 +6085,7 @@ async def list( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetVMExtensionsListResult] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vm_extensions_list_request( @@ -6135,7 +6127,7 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_scale_set_vms` attribute. """ @@ -6143,10 +6135,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _reimage_initial( @@ -6170,7 +6162,7 @@ async def _reimage_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -6244,7 +6236,7 @@ async def begin_reimage( :param vm_scale_set_vm_reimage_input: Parameters for the Reimaging Virtual machine in ScaleSet. Default value is None. :type vm_scale_set_vm_reimage_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMReimageParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMReimageParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -6306,7 +6298,7 @@ async def begin_reimage( Is either a VirtualMachineScaleSetVMReimageParameters type or a IO[bytes] type. Default value is None. :type vm_scale_set_vm_reimage_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMReimageParameters or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMReimageParameters or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -6314,7 +6306,7 @@ async def begin_reimage( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -6369,7 +6361,7 @@ async def _reimage_all_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_reimage_all_request( @@ -6426,7 +6418,7 @@ async def begin_reimage_all( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -6478,7 +6470,7 @@ async def _approve_rolling_upgrade_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_approve_rolling_upgrade_request( @@ -6537,7 +6529,7 @@ async def begin_approve_rolling_upgrade( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -6589,7 +6581,7 @@ async def _deallocate_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_deallocate_request( @@ -6647,7 +6639,7 @@ async def begin_deallocate( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -6707,7 +6699,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -6782,7 +6774,7 @@ async def begin_update( :type instance_id: str :param parameters: Parameters supplied to the Update Virtual Machine Scale Sets VM operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -6797,7 +6789,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetVM or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -6840,7 +6832,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetVM or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -6867,7 +6859,7 @@ async def begin_update( :type instance_id: str :param parameters: Parameters supplied to the Update Virtual Machine Scale Sets VM operation. Is either a VirtualMachineScaleSetVM type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM or IO[bytes] :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -6879,13 +6871,13 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineScaleSetVM or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSetVM] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -6952,7 +6944,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_delete_request( @@ -7018,7 +7010,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -7077,12 +7069,10 @@ async def get( :type instance_id: str :keyword expand: The expand expression to apply on the operation. 'InstanceView' will retrieve the instance view of the virtual machine. 'UserData' will retrieve the UserData of the virtual - machine. 'resiliencyView' will retrieve the instance view of the Virtual machine (if - applicable) and include 'resilientVMDeletionStatus' as part of it. Known values are: - "instanceView", "userData", and "resiliencyView". Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.InstanceViewTypes + machine. Known values are: "instanceView" and "userData". Default value is None. + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.InstanceViewTypes :return: VirtualMachineScaleSetVM or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -7096,7 +7086,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetVM] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_get_request( @@ -7142,7 +7132,7 @@ async def get_instance_view( :param instance_id: The instance ID of the virtual machine. Required. :type instance_id: str :return: VirtualMachineScaleSetVMInstanceView or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceView + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceView :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -7156,7 +7146,7 @@ async def get_instance_view( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetVMInstanceView] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_get_instance_view_request( @@ -7218,13 +7208,13 @@ def list( :return: An iterator like instance of either VirtualMachineScaleSetVM or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetVMListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -7312,7 +7302,7 @@ async def _power_off_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_power_off_request( @@ -7382,7 +7372,7 @@ async def begin_power_off( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -7435,7 +7425,7 @@ async def _restart_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_restart_request( @@ -7491,7 +7481,7 @@ async def begin_restart( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -7543,7 +7533,7 @@ async def _start_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_start_request( @@ -7599,7 +7589,7 @@ async def begin_start( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -7651,7 +7641,7 @@ async def _redeploy_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_redeploy_request( @@ -7708,7 +7698,7 @@ async def begin_redeploy( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -7770,7 +7760,7 @@ async def retrieve_boot_diagnostics_data( with a default expiration duration of 120 minutes. Default value is None. :paramtype sas_uri_expiration_time_in_minutes: int :return: RetrieveBootDiagnosticsDataResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RetrieveBootDiagnosticsDataResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RetrieveBootDiagnosticsDataResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -7784,7 +7774,7 @@ async def retrieve_boot_diagnostics_data( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RetrieveBootDiagnosticsDataResult] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_retrieve_boot_diagnostics_data_request( @@ -7831,7 +7821,7 @@ async def _perform_maintenance_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_perform_maintenance_request( @@ -7887,7 +7877,7 @@ async def begin_perform_maintenance( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -7952,7 +7942,7 @@ async def simulate_eviction( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_simulate_eviction_request( @@ -7999,7 +7989,7 @@ async def _attach_detach_data_disks_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -8073,14 +8063,14 @@ async def begin_attach_detach_data_disks( :type instance_id: str :param parameters: Parameters supplied to the attach and detach data disks operation on a Virtual Machine Scale Sets VM. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AttachDetachDataDisksRequest + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AttachDetachDataDisksRequest :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either StorageProfile or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -8112,7 +8102,7 @@ async def begin_attach_detach_data_disks( :return: An instance of AsyncLROPoller that returns either StorageProfile or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -8136,18 +8126,18 @@ async def begin_attach_detach_data_disks( :param parameters: Parameters supplied to the attach and detach data disks operation on a Virtual Machine Scale Sets VM. Is either a AttachDetachDataDisksRequest type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AttachDetachDataDisksRequest or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AttachDetachDataDisksRequest or IO[bytes] :return: An instance of AsyncLROPoller that returns either StorageProfile or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.StorageProfile] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -8213,7 +8203,7 @@ async def _run_command_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -8282,14 +8272,14 @@ async def begin_run_command( :param instance_id: The instance ID of the virtual machine. Required. :type instance_id: str :param parameters: Parameters supplied to the Run command operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RunCommandInput + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RunCommandInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either RunCommandResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -8320,7 +8310,7 @@ async def begin_run_command( :return: An instance of AsyncLROPoller that returns either RunCommandResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -8343,17 +8333,17 @@ async def begin_run_command( :type instance_id: str :param parameters: Parameters supplied to the Run command operation. Is either a RunCommandInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RunCommandInput or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RunCommandInput or IO[bytes] :return: An instance of AsyncLROPoller that returns either RunCommandResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.RunCommandResult] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -8407,7 +8397,7 @@ class VirtualMachineExtensionsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_extensions` attribute. """ @@ -8415,10 +8405,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -8440,7 +8430,7 @@ async def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -8511,14 +8501,14 @@ async def begin_create_or_update( :type vm_extension_name: str :param extension_parameters: Parameters supplied to the Create Virtual Machine Extension operation. Required. - :type extension_parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension + :type extension_parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -8551,7 +8541,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -8575,18 +8565,18 @@ async def begin_create_or_update( :type vm_extension_name: str :param extension_parameters: Parameters supplied to the Create Virtual Machine Extension operation. Is either a VirtualMachineExtension type or a IO[bytes] type. Required. - :type extension_parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension or + :type extension_parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineExtension] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -8650,7 +8640,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -8722,14 +8712,14 @@ async def begin_update( :param extension_parameters: Parameters supplied to the Update Virtual Machine Extension operation. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionUpdate + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -8762,7 +8752,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -8787,17 +8777,17 @@ async def begin_update( :param extension_parameters: Parameters supplied to the Update Virtual Machine Extension operation. Is either a VirtualMachineExtensionUpdate type or a IO[bytes] type. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionUpdate or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionUpdate or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineExtension] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -8856,7 +8846,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_extensions_delete_request( @@ -8913,7 +8903,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -8972,7 +8962,7 @@ async def get( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineExtension or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -8986,7 +8976,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineExtension] = kwargs.pop("cls", None) _request = build_virtual_machine_extensions_get_request( @@ -9032,7 +9022,7 @@ async def list( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineExtensionsListResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionsListResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionsListResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -9046,7 +9036,7 @@ async def list( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineExtensionsListResult] = kwargs.pop("cls", None) _request = build_virtual_machine_extensions_list_request( @@ -9085,7 +9075,7 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machines` attribute. """ @@ -9093,10 +9083,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -9108,13 +9098,13 @@ def list_by_location(self, location: str, **kwargs: Any) -> AsyncIterable["_mode :type location: str :return: An iterator like instance of either VirtualMachine or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -9196,7 +9186,7 @@ async def _capture_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -9262,14 +9252,14 @@ async def begin_capture( :param vm_name: The name of the virtual machine. Required. :type vm_name: str :param parameters: Parameters supplied to the Capture Virtual Machine operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineCaptureParameters + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineCaptureParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineCaptureResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineCaptureResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineCaptureResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -9298,7 +9288,7 @@ async def begin_capture( :return: An instance of AsyncLROPoller that returns either VirtualMachineCaptureResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineCaptureResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineCaptureResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -9319,18 +9309,18 @@ async def begin_capture( :type vm_name: str :param parameters: Parameters supplied to the Capture Virtual Machine operation. Is either a VirtualMachineCaptureParameters type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineCaptureParameters or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineCaptureParameters or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineCaptureResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineCaptureResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineCaptureResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineCaptureResult] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -9397,7 +9387,7 @@ async def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -9467,7 +9457,7 @@ async def begin_create_or_update( :param vm_name: The name of the virtual machine. Required. :type vm_name: str :param parameters: Parameters supplied to the Create Virtual Machine operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachine + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachine :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -9482,7 +9472,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachine or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -9521,7 +9511,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachine or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -9545,7 +9535,7 @@ async def begin_create_or_update( :type vm_name: str :param parameters: Parameters supplied to the Create Virtual Machine operation. Is either a VirtualMachine type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachine or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachine or IO[bytes] :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -9557,13 +9547,13 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachine or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachine] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -9630,7 +9620,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -9699,7 +9689,7 @@ async def begin_update( :param vm_name: The name of the virtual machine. Required. :type vm_name: str :param parameters: Parameters supplied to the Update Virtual Machine operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineUpdate :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -9714,7 +9704,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachine or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -9752,7 +9742,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachine or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -9775,7 +9765,7 @@ async def begin_update( :type vm_name: str :param parameters: Parameters supplied to the Update Virtual Machine operation. Is either a VirtualMachineUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineUpdate or IO[bytes] :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -9787,13 +9777,13 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachine or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachine] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -9853,7 +9843,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_delete_request( @@ -9900,14 +9890,8 @@ async def begin_delete( :type resource_group_name: str :param vm_name: The name of the virtual machine. Required. :type vm_name: str - :keyword force_deletion: Optional parameter to force delete virtual machines. - NOTE: As of api-version 2024-11-01, we are rolling out a feature where if the forceDeletion - parameter is unspecified OR not explicitly set to false, AND all of the VM's attached disks - including the OS disk are marked with the delete option, then the VM will be force deleted. For - more details on how to configure delete options for a VM's resources, see `Delete a VM and - attached resources `_. To - avoid defaulting to force delete, ensure that the forceDeletion parameter is explicitly set to - false. This feature is expected to rollout by end of March 2025. Default value is None. + :keyword force_deletion: Optional parameter to force delete virtual machines. Default value is + None. :paramtype force_deletion: bool :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] @@ -9916,7 +9900,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -9973,10 +9957,10 @@ async def get( snapshot of the runtime properties of the virtual machine that is managed by the platform and can change outside of control plane operations. 'UserData' retrieves the UserData property as part of the VM model view that was provided by the user during the VM Create/Update operation. - Known values are: "instanceView", "userData", and "resiliencyView". Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.InstanceViewTypes + Known values are: "instanceView" and "userData". Default value is None. + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.InstanceViewTypes :return: VirtualMachine or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachine + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachine :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -9990,7 +9974,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachine] = kwargs.pop("cls", None) _request = build_virtual_machines_get_request( @@ -10033,7 +10017,7 @@ async def instance_view( :param vm_name: The name of the virtual machine. Required. :type vm_name: str :return: VirtualMachineInstanceView or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstanceView + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstanceView :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -10047,7 +10031,7 @@ async def instance_view( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineInstanceView] = kwargs.pop("cls", None) _request = build_virtual_machines_instance_view_request( @@ -10092,7 +10076,7 @@ async def _convert_to_managed_disks_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_convert_to_managed_disks_request( @@ -10146,7 +10130,7 @@ async def begin_convert_to_managed_disks( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -10197,7 +10181,7 @@ async def _deallocate_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_deallocate_request( @@ -10254,7 +10238,7 @@ async def begin_deallocate( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -10320,7 +10304,7 @@ async def generalize(self, resource_group_name: str, vm_name: str, **kwargs: Any _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_virtual_machines_generalize_request( @@ -10356,7 +10340,6 @@ def list( expand: Optional[Union[str, _models.ExpandTypeForListVMs]] = None, **kwargs: Any ) -> AsyncIterable["_models.VirtualMachine"]: - # pylint: disable=line-too-long """Lists all of the virtual machines in the specified resource group. Use the nextLink property in the response to get the next page of virtual machines. @@ -10370,16 +10353,16 @@ def list( :keyword expand: The expand expression to apply on operation. 'instanceView' enables fetching run time status of all Virtual Machines, this can only be specified if a valid $filter option is specified. "instanceView" Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.ExpandTypeForListVMs + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.ExpandTypeForListVMs :return: An iterator like instance of either VirtualMachine or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -10454,7 +10437,6 @@ def list_all( expand: Optional[Union[str, _models.ExpandTypesForListVMs]] = None, **kwargs: Any ) -> AsyncIterable["_models.VirtualMachine"]: - # pylint: disable=line-too-long """Lists all of the virtual machines in the specified subscription. Use the nextLink property in the response to get the next page of virtual machines. @@ -10469,16 +10451,16 @@ def list_all( :keyword expand: The expand expression to apply on operation. 'instanceView' enables fetching run time status of all Virtual Machines, this can only be specified if a valid $filter option is specified. "instanceView" Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.ExpandTypesForListVMs + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.ExpandTypesForListVMs :return: An iterator like instance of either VirtualMachine or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -10557,13 +10539,13 @@ def list_available_sizes( :type vm_name: str :return: An iterator like instance of either VirtualMachineSize or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSize] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSize] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineSizeListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -10642,7 +10624,7 @@ async def _power_off_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_power_off_request( @@ -10703,7 +10685,7 @@ async def begin_power_off( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -10753,7 +10735,7 @@ async def _reapply_initial(self, resource_group_name: str, vm_name: str, **kwarg _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_reapply_request( @@ -10804,7 +10786,7 @@ async def begin_reapply(self, resource_group_name: str, vm_name: str, **kwargs: _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -10853,7 +10835,7 @@ async def _restart_initial(self, resource_group_name: str, vm_name: str, **kwarg _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_restart_request( @@ -10904,7 +10886,7 @@ async def begin_restart(self, resource_group_name: str, vm_name: str, **kwargs: _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -10953,7 +10935,7 @@ async def _start_initial(self, resource_group_name: str, vm_name: str, **kwargs: _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_start_request( @@ -11004,7 +10986,7 @@ async def begin_start(self, resource_group_name: str, vm_name: str, **kwargs: An _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -11053,7 +11035,7 @@ async def _redeploy_initial(self, resource_group_name: str, vm_name: str, **kwar _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_redeploy_request( @@ -11104,7 +11086,7 @@ async def begin_redeploy(self, resource_group_name: str, vm_name: str, **kwargs: _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -11159,7 +11141,7 @@ async def _reimage_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -11233,7 +11215,7 @@ async def begin_reimage( :type vm_name: str :param parameters: Parameters supplied to the Reimage Virtual Machine operation. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineReimageParameters + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineReimageParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -11295,7 +11277,7 @@ async def begin_reimage( :type vm_name: str :param parameters: Parameters supplied to the Reimage Virtual Machine operation. Is either a VirtualMachineReimageParameters type or a IO[bytes] type. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineReimageParameters or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineReimageParameters or IO[bytes] :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] @@ -11304,7 +11286,7 @@ async def begin_reimage( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -11364,7 +11346,7 @@ async def retrieve_boot_diagnostics_data( with a default expiration duration of 120 minutes. Default value is None. :paramtype sas_uri_expiration_time_in_minutes: int :return: RetrieveBootDiagnosticsDataResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RetrieveBootDiagnosticsDataResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RetrieveBootDiagnosticsDataResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -11378,7 +11360,7 @@ async def retrieve_boot_diagnostics_data( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RetrieveBootDiagnosticsDataResult] = kwargs.pop("cls", None) _request = build_virtual_machines_retrieve_boot_diagnostics_data_request( @@ -11424,7 +11406,7 @@ async def _perform_maintenance_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_perform_maintenance_request( @@ -11477,7 +11459,7 @@ async def begin_perform_maintenance( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -11537,7 +11519,7 @@ async def simulate_eviction(self, resource_group_name: str, vm_name: str, **kwar _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_virtual_machines_simulate_eviction_request( @@ -11578,7 +11560,7 @@ async def _assess_patches_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_assess_patches_request( @@ -11627,13 +11609,13 @@ async def begin_assess_patches( :return: An instance of AsyncLROPoller that returns either VirtualMachineAssessPatchesResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineAssessPatchesResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineAssessPatchesResult] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineAssessPatchesResult] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -11694,7 +11676,7 @@ async def _install_patches_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -11761,14 +11743,14 @@ async def begin_install_patches( :param install_patches_input: Input for InstallPatches as directly received by the API. Required. :type install_patches_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstallPatchesParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstallPatchesParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineInstallPatchesResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstallPatchesResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstallPatchesResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -11797,7 +11779,7 @@ async def begin_install_patches( :return: An instance of AsyncLROPoller that returns either VirtualMachineInstallPatchesResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstallPatchesResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstallPatchesResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -11818,17 +11800,17 @@ async def begin_install_patches( :param install_patches_input: Input for InstallPatches as directly received by the API. Is either a VirtualMachineInstallPatchesParameters type or a IO[bytes] type. Required. :type install_patches_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstallPatchesParameters or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstallPatchesParameters or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineInstallPatchesResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstallPatchesResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstallPatchesResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineInstallPatchesResult] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -11892,7 +11874,7 @@ async def _attach_detach_data_disks_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -11962,14 +11944,14 @@ async def begin_attach_detach_data_disks( :type vm_name: str :param parameters: Parameters supplied to the attach and detach data disks operation on the virtual machine. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AttachDetachDataDisksRequest + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AttachDetachDataDisksRequest :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either StorageProfile or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -11998,7 +11980,7 @@ async def begin_attach_detach_data_disks( :return: An instance of AsyncLROPoller that returns either StorageProfile or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -12018,18 +12000,18 @@ async def begin_attach_detach_data_disks( :type vm_name: str :param parameters: Parameters supplied to the attach and detach data disks operation on the virtual machine. Is either a AttachDetachDataDisksRequest type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AttachDetachDataDisksRequest or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AttachDetachDataDisksRequest or IO[bytes] :return: An instance of AsyncLROPoller that returns either StorageProfile or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.StorageProfile] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -12075,194 +12057,6 @@ def get_long_running_output(pipeline_response): self._client, raw_result, get_long_running_output, polling_method # type: ignore ) - async def _migrate_to_vm_scale_set_initial( - self, - resource_group_name: str, - vm_name: str, - parameters: Optional[Union[_models.MigrateVMToVirtualMachineScaleSetInput, IO[bytes]]] = None, - **kwargs: Any - ) -> AsyncIterator[bytes]: - 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._api_version or "2024-11-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) - - content_type = content_type or "application/json" - _json = None - _content = None - if isinstance(parameters, (IOBase, bytes)): - _content = parameters - else: - if parameters is not None: - _json = self._serialize.body(parameters, "MigrateVMToVirtualMachineScaleSetInput") - else: - _json = None - - _request = build_virtual_machines_migrate_to_vm_scale_set_request( - resource_group_name=resource_group_name, - vm_name=vm_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) - - _decompress = kwargs.pop("decompress", True) - _stream = True - 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 [202]: - try: - await response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) - - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - - return deserialized # type: ignore - - @overload - async def begin_migrate_to_vm_scale_set( - self, - resource_group_name: str, - vm_name: str, - parameters: Optional[_models.MigrateVMToVirtualMachineScaleSetInput] = None, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> AsyncLROPoller[None]: - """Migrate a virtual machine from availability set to Flexible Virtual Machine Scale Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param vm_name: The name of the virtual machine. Required. - :type vm_name: str - :param parameters: Parameters supplied to the Migrate Virtual Machine operation. Default value - is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateVMToVirtualMachineScaleSetInput - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - async def begin_migrate_to_vm_scale_set( - self, - resource_group_name: str, - vm_name: str, - parameters: Optional[IO[bytes]] = None, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> AsyncLROPoller[None]: - """Migrate a virtual machine from availability set to Flexible Virtual Machine Scale Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param vm_name: The name of the virtual machine. Required. - :type vm_name: str - :param parameters: Parameters supplied to the Migrate Virtual Machine operation. Default value - is None. - :type parameters: 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: An instance of AsyncLROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @distributed_trace_async - async def begin_migrate_to_vm_scale_set( - self, - resource_group_name: str, - vm_name: str, - parameters: Optional[Union[_models.MigrateVMToVirtualMachineScaleSetInput, IO[bytes]]] = None, - **kwargs: Any - ) -> AsyncLROPoller[None]: - """Migrate a virtual machine from availability set to Flexible Virtual Machine Scale Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param vm_name: The name of the virtual machine. Required. - :type vm_name: str - :param parameters: Parameters supplied to the Migrate Virtual Machine operation. Is either a - MigrateVMToVirtualMachineScaleSetInput type or a IO[bytes] type. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateVMToVirtualMachineScaleSetInput - or IO[bytes] - :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _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._api_version or "2024-11-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[None] = kwargs.pop("cls", None) - polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) - lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) - cont_token: Optional[str] = kwargs.pop("continuation_token", None) - if cont_token is None: - raw_result = await self._migrate_to_vm_scale_set_initial( - resource_group_name=resource_group_name, - vm_name=vm_name, - parameters=parameters, - api_version=api_version, - content_type=content_type, - cls=lambda x, y, z: x, - headers=_headers, - params=_params, - **kwargs - ) - await raw_result.http_response.read() # type: ignore - kwargs.pop("error_map", None) - - def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements - if cls: - return cls(pipeline_response, None, {}) # type: ignore - - if polling is True: - polling_method: AsyncPollingMethod = cast(AsyncPollingMethod, AsyncARMPolling(lro_delay, **kwargs)) - elif polling is False: - polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) - else: - polling_method = polling - if cont_token: - return AsyncLROPoller[None].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return AsyncLROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore - async def _run_command_initial( self, resource_group_name: str, @@ -12281,7 +12075,7 @@ async def _run_command_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -12346,14 +12140,14 @@ async def begin_run_command( :param vm_name: The name of the virtual machine. Required. :type vm_name: str :param parameters: Parameters supplied to the Run command operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RunCommandInput + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RunCommandInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either RunCommandResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -12381,7 +12175,7 @@ async def begin_run_command( :return: An instance of AsyncLROPoller that returns either RunCommandResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -12401,17 +12195,17 @@ async def begin_run_command( :type vm_name: str :param parameters: Parameters supplied to the Run command operation. Is either a RunCommandInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RunCommandInput or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RunCommandInput or IO[bytes] :return: An instance of AsyncLROPoller that returns either RunCommandResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.RunCommandResult] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -12464,7 +12258,7 @@ class VirtualMachineImagesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_images` attribute. """ @@ -12472,10 +12266,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -12495,7 +12289,7 @@ async def get( :param version: A valid image SKU version. Required. :type version: str :return: VirtualMachineImage or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImage + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImage :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -12509,7 +12303,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineImage] = kwargs.pop("cls", None) _request = build_virtual_machine_images_get_request( @@ -12574,7 +12368,7 @@ async def list( :keyword orderby: Default value is None. :paramtype orderby: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -12588,7 +12382,7 @@ async def list( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_list_request( @@ -12635,7 +12429,7 @@ async def list_offers( :param publisher_name: A valid image publisher. Required. :type publisher_name: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -12649,7 +12443,7 @@ async def list_offers( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_list_offers_request( @@ -12687,7 +12481,7 @@ async def list_publishers(self, location: str, **kwargs: Any) -> List[_models.Vi :param location: The name of a supported Azure region. Required. :type location: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -12701,7 +12495,7 @@ async def list_publishers(self, location: str, **kwargs: Any) -> List[_models.Vi _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_list_publishers_request( @@ -12744,7 +12538,7 @@ async def list_skus( :param offer: A valid image publisher offer. Required. :type offer: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -12758,7 +12552,7 @@ async def list_skus( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_list_skus_request( @@ -12801,7 +12595,7 @@ async def list_by_edge_zone( :param edge_zone: The name of the edge zone. Required. :type edge_zone: str :return: VmImagesInEdgeZoneListResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VmImagesInEdgeZoneListResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VmImagesInEdgeZoneListResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -12815,7 +12609,7 @@ async def list_by_edge_zone( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VmImagesInEdgeZoneListResult] = kwargs.pop("cls", None) _request = build_virtual_machine_images_list_by_edge_zone_request( @@ -12846,46 +12640,49 @@ async def list_by_edge_zone( return deserialized # type: ignore - @distributed_trace - def list_with_properties( - self, - location: str, - publisher_name: str, - offer: str, - skus: str, - *, - expand: Union[str, _models.Expand], - top: Optional[int] = None, - orderby: Optional[str] = None, - **kwargs: Any - ) -> AsyncIterable["_models.VirtualMachineImage"]: - """list_with_properties. + +class VirtualMachineImagesEdgeZoneOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s + :attr:`virtual_machine_images_edge_zone` 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: ComputeManagementClientConfiguration = 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") + self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") + + @distributed_trace_async + async def get( + self, location: str, edge_zone: str, publisher_name: str, offer: str, skus: str, version: str, **kwargs: Any + ) -> _models.VirtualMachineImage: + """Gets a virtual machine image in an edge zone. :param location: The name of a supported Azure region. Required. :type location: str + :param edge_zone: The name of the edge zone. Required. + :type edge_zone: str :param publisher_name: A valid image publisher. Required. :type publisher_name: str :param offer: A valid image publisher offer. Required. :type offer: str :param skus: A valid image SKU. Required. :type skus: str - :keyword expand: The expand expression to apply on the operation. "Properties" Required. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.Expand - :keyword top: Default value is None. - :paramtype top: int - :keyword orderby: Default value is None. - :paramtype orderby: str - :return: An iterator like instance of either VirtualMachineImage or the result of cls(response) - :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImage] + :param version: A valid image SKU version. Required. + :type version: str + :return: VirtualMachineImage or the result of cls(response) + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImage :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._api_version or "2024-11-01")) - cls: ClsType[_models.VirtualMachineImagesWithPropertiesListResult] = kwargs.pop("cls", None) - error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -12894,135 +12691,25 @@ def list_with_properties( } error_map.update(kwargs.pop("error_map", {}) or {}) - def prepare_request(next_link=None): - if not next_link: + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - _request = build_virtual_machine_images_list_with_properties_request( - location=location, - publisher_name=publisher_name, - offer=offer, - skus=skus, - subscription_id=self._config.subscription_id, - expand=expand, - top=top, - orderby=orderby, - api_version=api_version, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) + cls: ClsType[_models.VirtualMachineImage] = kwargs.pop("cls", None) - 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._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("VirtualMachineImagesWithPropertiesListResult", 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) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - return pipeline_response - - return AsyncItemPaged(get_next, extract_data) - - -class VirtualMachineImagesEdgeZoneOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s - :attr:`virtual_machine_images_edge_zone` attribute. - """ - - models = _models - - 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._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") - - @distributed_trace_async - async def get( - self, location: str, edge_zone: str, publisher_name: str, offer: str, skus: str, version: str, **kwargs: Any - ) -> _models.VirtualMachineImage: - """Gets a virtual machine image in an edge zone. - - :param location: The name of a supported Azure region. Required. - :type location: str - :param edge_zone: The name of the edge zone. Required. - :type edge_zone: str - :param publisher_name: A valid image publisher. Required. - :type publisher_name: str - :param offer: A valid image publisher offer. Required. - :type offer: str - :param skus: A valid image SKU. Required. - :type skus: str - :param version: A valid image SKU version. Required. - :type version: str - :return: VirtualMachineImage or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImage - :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._api_version or "2024-11-01")) - cls: ClsType[_models.VirtualMachineImage] = kwargs.pop("cls", None) - - _request = build_virtual_machine_images_edge_zone_get_request( - location=location, - edge_zone=edge_zone, - publisher_name=publisher_name, - offer=offer, - skus=skus, - version=version, - subscription_id=self._config.subscription_id, - api_version=api_version, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) + _request = build_virtual_machine_images_edge_zone_get_request( + location=location, + edge_zone=edge_zone, + publisher_name=publisher_name, + offer=offer, + skus=skus, + version=version, + 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 @@ -13078,7 +12765,7 @@ async def list( Default value is None. :paramtype orderby: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13092,7 +12779,7 @@ async def list( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_edge_zone_list_request( @@ -13143,7 +12830,7 @@ async def list_offers( :param publisher_name: A valid image publisher. Required. :type publisher_name: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13157,7 +12844,7 @@ async def list_offers( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_edge_zone_list_offers_request( @@ -13200,7 +12887,7 @@ async def list_publishers( :param edge_zone: The name of the edge zone. Required. :type edge_zone: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13214,7 +12901,7 @@ async def list_publishers( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_edge_zone_list_publishers_request( @@ -13261,7 +12948,7 @@ async def list_skus( :param offer: A valid image publisher offer. Required. :type offer: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13275,7 +12962,7 @@ async def list_skus( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_edge_zone_list_skus_request( @@ -13315,7 +13002,7 @@ class VirtualMachineExtensionImagesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_extension_images` attribute. """ @@ -13323,10 +13010,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -13344,7 +13031,7 @@ async def get( :param version: Required. :type version: str :return: VirtualMachineExtensionImage or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionImage + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionImage :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13358,7 +13045,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineExtensionImage] = kwargs.pop("cls", None) _request = build_virtual_machine_extension_images_get_request( @@ -13402,7 +13089,7 @@ async def list_types( :param publisher_name: Required. :type publisher_name: str :return: list of VirtualMachineExtensionImage or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionImage] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionImage] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13416,7 +13103,7 @@ async def list_types( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineExtensionImage]] = kwargs.pop("cls", None) _request = build_virtual_machine_extension_images_list_types_request( @@ -13474,7 +13161,7 @@ async def list_versions( :keyword orderby: Default value is None. :paramtype orderby: str :return: list of VirtualMachineExtensionImage or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionImage] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionImage] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13488,7 +13175,7 @@ async def list_versions( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineExtensionImage]] = kwargs.pop("cls", None) _request = build_virtual_machine_extension_images_list_versions_request( @@ -13530,7 +13217,7 @@ class AvailabilitySetsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`availability_sets` attribute. """ @@ -13538,10 +13225,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -13561,12 +13248,12 @@ async def create_or_update( :param availability_set_name: The name of the availability set. Required. :type availability_set_name: str :param parameters: Parameters supplied to the Create Availability Set operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ @@ -13592,7 +13279,7 @@ async def create_or_update( Default value is "application/json". :paramtype content_type: str :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ @@ -13612,9 +13299,9 @@ async def create_or_update( :type availability_set_name: str :param parameters: Parameters supplied to the Create Availability Set operation. Is either a AvailabilitySet type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet or IO[bytes] :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13628,7 +13315,7 @@ async def create_or_update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.AvailabilitySet] = kwargs.pop("cls", None) @@ -13688,12 +13375,12 @@ async def update( :param availability_set_name: The name of the availability set. Required. :type availability_set_name: str :param parameters: Parameters supplied to the Update Availability Set operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySetUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySetUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ @@ -13719,7 +13406,7 @@ async def update( Default value is "application/json". :paramtype content_type: str :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ @@ -13739,9 +13426,9 @@ async def update( :type availability_set_name: str :param parameters: Parameters supplied to the Update Availability Set operation. Is either a AvailabilitySetUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySetUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySetUpdate or IO[bytes] :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13755,7 +13442,7 @@ async def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.AvailabilitySet] = kwargs.pop("cls", None) @@ -13821,7 +13508,7 @@ async def delete(self, resource_group_name: str, availability_set_name: str, **k _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_availability_sets_delete_request( @@ -13857,7 +13544,7 @@ async def get(self, resource_group_name: str, availability_set_name: str, **kwar :param availability_set_name: The name of the availability set. Required. :type availability_set_name: str :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13871,7 +13558,7 @@ async def get(self, resource_group_name: str, availability_set_name: str, **kwar _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.AvailabilitySet] = kwargs.pop("cls", None) _request = build_availability_sets_get_request( @@ -13913,13 +13600,13 @@ def list_by_subscription( :paramtype expand: str :return: An iterator like instance of either AvailabilitySet or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.AvailabilitySetListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -13984,487 +13671,22 @@ async def get_next(next_link=None): return AsyncItemPaged(get_next, extract_data) @distributed_trace - def list(self, resource_group_name: str, **kwargs: Any) -> AsyncIterable["_models.AvailabilitySet"]: - """Lists all availability sets in a resource group. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :return: An iterator like instance of either AvailabilitySet or the result of cls(response) - :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet] - :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._api_version or "2024-11-01")) - cls: ClsType[_models.AvailabilitySetListResult] = 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_availability_sets_list_request( - resource_group_name=resource_group_name, - 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._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("AvailabilitySetListResult", 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) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - return pipeline_response - - return AsyncItemPaged(get_next, extract_data) - - @distributed_trace - def list_available_sizes( - self, resource_group_name: str, availability_set_name: str, **kwargs: Any - ) -> AsyncIterable["_models.VirtualMachineSize"]: - """Lists all available virtual machine sizes that can be used to create a new virtual machine in - an existing availability set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :return: An iterator like instance of either VirtualMachineSize or the result of cls(response) - :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSize] - :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._api_version or "2024-11-01")) - cls: ClsType[_models.VirtualMachineSizeListResult] = 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_availability_sets_list_available_sizes_request( - resource_group_name=resource_group_name, - availability_set_name=availability_set_name, - 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._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("VirtualMachineSizeListResult", pipeline_response) - list_of_elem = deserialized.value - if cls: - 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) - - _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) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - return pipeline_response - - return AsyncItemPaged(get_next, extract_data) - - @overload - async def start_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: _models.MigrateToVirtualMachineScaleSetInput, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> None: - """Start migration operation on an Availability Set to move its Virtual Machines to a Virtual - Machine Scale Set. This should be followed by a migrate operation on each Virtual Machine that - triggers a downtime on the Virtual Machine. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateToVirtualMachineScaleSetInput - :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 start_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> None: - """Start migration operation on an Availability Set to move its Virtual Machines to a Virtual - Machine Scale Set. This should be followed by a migrate operation on each Virtual Machine that - triggers a downtime on the Virtual Machine. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Required. - :type parameters: 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 start_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Union[_models.MigrateToVirtualMachineScaleSetInput, IO[bytes]], - **kwargs: Any - ) -> None: - """Start migration operation on an Availability Set to move its Virtual Machines to a Virtual - Machine Scale Set. This should be followed by a migrate operation on each Virtual Machine that - triggers a downtime on the Virtual Machine. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. Is - either a MigrateToVirtualMachineScaleSetInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateToVirtualMachineScaleSetInput - 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._api_version or "2024-11-01")) - 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(parameters, (IOBase, bytes)): - _content = parameters - else: - _json = self._serialize.body(parameters, "MigrateToVirtualMachineScaleSetInput") - - _request = build_availability_sets_start_migration_to_virtual_machine_scale_set_request( - resource_group_name=resource_group_name, - availability_set_name=availability_set_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 [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - if cls: - return cls(pipeline_response, None, {}) # type: ignore - - @distributed_trace_async - async def cancel_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, resource_group_name: str, availability_set_name: str, **kwargs: Any - ) -> None: - """Cancel the migration operation on an Availability Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_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._api_version or "2024-11-01")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_availability_sets_cancel_migration_to_virtual_machine_scale_set_request( - resource_group_name=resource_group_name, - availability_set_name=availability_set_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 [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - if cls: - return cls(pipeline_response, None, {}) # type: ignore - - @overload - async def validate_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: _models.MigrateToVirtualMachineScaleSetInput, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> None: - """Validates that the Virtual Machines in the Availability Set can be migrated to the provided - Virtual Machine Scale Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateToVirtualMachineScaleSetInput - :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 validate_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> None: - """Validates that the Virtual Machines in the Availability Set can be migrated to the provided - Virtual Machine Scale Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Required. - :type parameters: 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 validate_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Union[_models.MigrateToVirtualMachineScaleSetInput, IO[bytes]], - **kwargs: Any - ) -> None: - """Validates that the Virtual Machines in the Availability Set can be migrated to the provided - Virtual Machine Scale Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. Is - either a MigrateToVirtualMachineScaleSetInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateToVirtualMachineScaleSetInput - 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._api_version or "2024-11-01")) - 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(parameters, (IOBase, bytes)): - _content = parameters - else: - _json = self._serialize.body(parameters, "MigrateToVirtualMachineScaleSetInput") - - _request = build_availability_sets_validate_migration_to_virtual_machine_scale_set_request( - resource_group_name=resource_group_name, - availability_set_name=availability_set_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 + def list(self, resource_group_name: str, **kwargs: Any) -> AsyncIterable["_models.AvailabilitySet"]: + """Lists all availability sets in a resource group. - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) + :param resource_group_name: The name of the resource group. Required. + :type resource_group_name: str + :return: An iterator like instance of either AvailabilitySet or the result of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - if cls: - return cls(pipeline_response, None, {}) # type: ignore + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) + cls: ClsType[_models.AvailabilitySetListResult] = kwargs.pop("cls", None) - async def _convert_to_virtual_machine_scale_set_initial( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Optional[Union[_models.ConvertToVirtualMachineScaleSetInput, IO[bytes]]] = None, - **kwargs: Any - ) -> AsyncIterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -14473,181 +13695,142 @@ async def _convert_to_virtual_machine_scale_set_initial( # pylint: disable=name } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + def prepare_request(next_link=None): + if not next_link: - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-11-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + _request = build_availability_sets_list_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) - content_type = content_type or "application/json" - _json = None - _content = None - if isinstance(parameters, (IOBase, bytes)): - _content = parameters - else: - if parameters is not None: - _json = self._serialize.body(parameters, "ConvertToVirtualMachineScaleSetInput") else: - _json = None - - _request = build_availability_sets_convert_to_virtual_machine_scale_set_request( - resource_group_name=resource_group_name, - availability_set_name=availability_set_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) + # 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._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 - _decompress = kwargs.pop("decompress", True) - _stream = True - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) + async def extract_data(pipeline_response): + deserialized = self._deserialize("AvailabilitySetListResult", 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) - response = pipeline_response.http_response + async def get_next(next_link=None): + _request = prepare_request(next_link) - if response.status_code not in [202]: - try: - await response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore + return pipeline_response - return deserialized # type: ignore + return AsyncItemPaged(get_next, extract_data) - @overload - async def begin_convert_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Optional[_models.ConvertToVirtualMachineScaleSetInput] = None, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> AsyncLROPoller[None]: - """Create a new Flexible Virtual Machine Scale Set and migrate all the Virtual Machines in the - Availability Set. This does not trigger a downtime on the Virtual Machines. + @distributed_trace + def list_available_sizes( + self, resource_group_name: str, availability_set_name: str, **kwargs: Any + ) -> AsyncIterable["_models.VirtualMachineSize"]: + """Lists all available virtual machine sizes that can be used to create a new virtual machine in + an existing availability set. :param resource_group_name: The name of the resource group. Required. :type resource_group_name: str :param availability_set_name: The name of the availability set. Required. :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ConvertToVirtualMachineScaleSetInput - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[None] + :return: An iterator like instance of either VirtualMachineSize or the result of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSize] :raises ~azure.core.exceptions.HttpResponseError: """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - @overload - async def begin_convert_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Optional[IO[bytes]] = None, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> AsyncLROPoller[None]: - """Create a new Flexible Virtual Machine Scale Set and migrate all the Virtual Machines in the - Availability Set. This does not trigger a downtime on the Virtual Machines. + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) + cls: ClsType[_models.VirtualMachineSizeListResult] = kwargs.pop("cls", None) - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Default value is None. - :type parameters: 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: An instance of AsyncLROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[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 {}) - @distributed_trace_async - async def begin_convert_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Optional[Union[_models.ConvertToVirtualMachineScaleSetInput, IO[bytes]]] = None, - **kwargs: Any - ) -> AsyncLROPoller[None]: - """Create a new Flexible Virtual Machine Scale Set and migrate all the Virtual Machines in the - Availability Set. This does not trigger a downtime on the Virtual Machines. + def prepare_request(next_link=None): + if not next_link: - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. Is - either a ConvertToVirtualMachineScaleSetInput type or a IO[bytes] type. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ConvertToVirtualMachineScaleSetInput - or IO[bytes] - :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _request = build_availability_sets_list_available_sizes_request( + resource_group_name=resource_group_name, + availability_set_name=availability_set_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-11-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[None] = kwargs.pop("cls", None) - polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) - lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) - cont_token: Optional[str] = kwargs.pop("continuation_token", None) - if cont_token is None: - raw_result = await self._convert_to_virtual_machine_scale_set_initial( - resource_group_name=resource_group_name, - availability_set_name=availability_set_name, - parameters=parameters, - api_version=api_version, - content_type=content_type, - cls=lambda x, y, z: x, - headers=_headers, - params=_params, - **kwargs - ) - await raw_result.http_response.read() # type: ignore - kwargs.pop("error_map", None) + 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._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 get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + async def extract_data(pipeline_response): + deserialized = self._deserialize("VirtualMachineSizeListResult", pipeline_response) + list_of_elem = deserialized.value if cls: - return cls(pipeline_response, None, {}) # type: ignore + list_of_elem = cls(list_of_elem) # type: ignore + return None, AsyncList(list_of_elem) - if polling is True: - polling_method: AsyncPollingMethod = cast(AsyncPollingMethod, AsyncARMPolling(lro_delay, **kwargs)) - elif polling is False: - polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) - else: - polling_method = polling - if cont_token: - return AsyncLROPoller[None].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, + 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 ) - return AsyncLROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + 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) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) class ProximityPlacementGroupsOperations: @@ -14656,7 +13839,7 @@ class ProximityPlacementGroupsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`proximity_placement_groups` attribute. """ @@ -14664,10 +13847,10 @@ class ProximityPlacementGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -14688,12 +13871,12 @@ async def create_or_update( :type proximity_placement_group_name: str :param parameters: Parameters supplied to the Create Proximity Placement Group operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14720,7 +13903,7 @@ async def create_or_update( Default value is "application/json". :paramtype content_type: str :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14740,9 +13923,9 @@ async def create_or_update( :type proximity_placement_group_name: str :param parameters: Parameters supplied to the Create Proximity Placement Group operation. Is either a ProximityPlacementGroup type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup or IO[bytes] :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -14756,7 +13939,7 @@ async def create_or_update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.ProximityPlacementGroup] = kwargs.pop("cls", None) @@ -14817,12 +14000,12 @@ async def update( :type proximity_placement_group_name: str :param parameters: Parameters supplied to the Update Proximity Placement Group operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroupUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroupUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14849,7 +14032,7 @@ async def update( Default value is "application/json". :paramtype content_type: str :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14869,10 +14052,10 @@ async def update( :type proximity_placement_group_name: str :param parameters: Parameters supplied to the Update Proximity Placement Group operation. Is either a ProximityPlacementGroupUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroupUpdate or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroupUpdate or IO[bytes] :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -14886,7 +14069,7 @@ async def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.ProximityPlacementGroup] = kwargs.pop("cls", None) @@ -14952,7 +14135,7 @@ async def delete(self, resource_group_name: str, proximity_placement_group_name: _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_proximity_placement_groups_delete_request( @@ -14998,7 +14181,7 @@ async def get( colocation status of all the resources in the proximity placement group. Default value is None. :paramtype include_colocation_status: str :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -15012,7 +14195,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ProximityPlacementGroup] = kwargs.pop("cls", None) _request = build_proximity_placement_groups_get_request( @@ -15051,13 +14234,13 @@ def list_by_subscription(self, **kwargs: Any) -> AsyncIterable["_models.Proximit :return: An iterator like instance of either ProximityPlacementGroup or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ProximityPlacementGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -15131,13 +14314,13 @@ def list_by_resource_group( :return: An iterator like instance of either ProximityPlacementGroup or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ProximityPlacementGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -15208,7 +14391,7 @@ class DedicatedHostGroupsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`dedicated_host_groups` attribute. """ @@ -15216,10 +14399,10 @@ class DedicatedHostGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -15241,12 +14424,12 @@ async def create_or_update( :param host_group_name: The name of the dedicated host group. Required. :type host_group_name: str :param parameters: Parameters supplied to the Create Dedicated Host Group. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15274,7 +14457,7 @@ async def create_or_update( Default value is "application/json". :paramtype content_type: str :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15296,9 +14479,9 @@ async def create_or_update( :type host_group_name: str :param parameters: Parameters supplied to the Create Dedicated Host Group. Is either a DedicatedHostGroup type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup or IO[bytes] :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -15312,7 +14495,7 @@ async def create_or_update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.DedicatedHostGroup] = kwargs.pop("cls", None) @@ -15372,12 +14555,12 @@ async def update( :param host_group_name: The name of the dedicated host group. Required. :type host_group_name: str :param parameters: Parameters supplied to the Update Dedicated Host Group operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroupUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroupUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15403,7 +14586,7 @@ async def update( Default value is "application/json". :paramtype content_type: str :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15423,9 +14606,9 @@ async def update( :type host_group_name: str :param parameters: Parameters supplied to the Update Dedicated Host Group operation. Is either a DedicatedHostGroupUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroupUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroupUpdate or IO[bytes] :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -15439,7 +14622,7 @@ async def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.DedicatedHostGroup] = kwargs.pop("cls", None) @@ -15505,7 +14688,7 @@ async def delete(self, resource_group_name: str, host_group_name: str, **kwargs: _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_dedicated_host_groups_delete_request( @@ -15549,11 +14732,11 @@ async def get( :type host_group_name: str :keyword expand: The expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance views of the dedicated hosts under the dedicated host group. 'UserData' is - not supported for dedicated host group. Known values are: "instanceView", "userData", and - "resiliencyView". Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.InstanceViewTypes + not supported for dedicated host group. Known values are: "instanceView" and "userData". + Default value is None. + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.InstanceViewTypes :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -15567,7 +14750,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHostGroup] = kwargs.pop("cls", None) _request = build_dedicated_host_groups_get_request( @@ -15610,13 +14793,13 @@ def list_by_resource_group( :type resource_group_name: str :return: An iterator like instance of either DedicatedHostGroup or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHostGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -15687,13 +14870,13 @@ def list_by_subscription(self, **kwargs: Any) -> AsyncIterable["_models.Dedicate :return: An iterator like instance of either DedicatedHostGroup or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHostGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -15763,7 +14946,7 @@ class DedicatedHostsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`dedicated_hosts` attribute. """ @@ -15771,10 +14954,10 @@ class DedicatedHostsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -15796,7 +14979,7 @@ async def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -15865,14 +15048,14 @@ async def begin_create_or_update( :param host_name: The name of the dedicated host . Required. :type host_name: str :param parameters: Parameters supplied to the Create Dedicated Host. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHost + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHost :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either DedicatedHost or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15903,7 +15086,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either DedicatedHost or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15926,17 +15109,17 @@ async def begin_create_or_update( :type host_name: str :param parameters: Parameters supplied to the Create Dedicated Host. Is either a DedicatedHost type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHost or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHost or IO[bytes] :return: An instance of AsyncLROPoller that returns either DedicatedHost or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.DedicatedHost] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -16000,7 +15183,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -16069,14 +15252,14 @@ async def begin_update( :param host_name: The name of the dedicated host . Required. :type host_name: str :param parameters: Parameters supplied to the Update Dedicated Host operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either DedicatedHost or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -16107,7 +15290,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either DedicatedHost or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -16130,17 +15313,17 @@ async def begin_update( :type host_name: str :param parameters: Parameters supplied to the Update Dedicated Host operation. Is either a DedicatedHostUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostUpdate or IO[bytes] :return: An instance of AsyncLROPoller that returns either DedicatedHost or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.DedicatedHost] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -16199,7 +15382,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_dedicated_hosts_delete_request( @@ -16255,7 +15438,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -16313,11 +15496,10 @@ async def get( :type host_name: str :keyword expand: The expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance views of the dedicated host. 'UserData' is not supported for dedicated - host. Known values are: "instanceView", "userData", and "resiliencyView". Default value is - None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.InstanceViewTypes + host. Known values are: "instanceView" and "userData". Default value is None. + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.InstanceViewTypes :return: DedicatedHost or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHost + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHost :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -16331,7 +15513,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHost] = kwargs.pop("cls", None) _request = build_dedicated_hosts_get_request( @@ -16377,13 +15559,13 @@ def list_by_host_group( :type host_group_name: str :return: An iterator like instance of either DedicatedHost or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHostListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -16462,7 +15644,7 @@ async def _restart_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_dedicated_hosts_restart_request( @@ -16521,7 +15703,7 @@ async def begin_restart( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -16573,7 +15755,7 @@ async def _redeploy_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_dedicated_hosts_redeploy_request( @@ -16636,7 +15818,7 @@ async def begin_redeploy( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -16695,7 +15877,7 @@ def list_available_sizes( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHostSizeListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -16768,7 +15950,7 @@ class SshPublicKeysOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`ssh_public_keys` attribute. """ @@ -16776,10 +15958,10 @@ class SshPublicKeysOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -16790,13 +15972,13 @@ def list_by_subscription(self, **kwargs: Any) -> AsyncIterable["_models.SshPubli :return: An iterator like instance of either SshPublicKeyResource or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.SshPublicKeysGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -16871,13 +16053,13 @@ def list_by_resource_group( :return: An iterator like instance of either SshPublicKeyResource or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.SshPublicKeysGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -16958,12 +16140,12 @@ async def create( :param ssh_public_key_name: The name of the SSH public key. Required. :type ssh_public_key_name: str :param parameters: Parameters supplied to create the SSH public key. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ @@ -16989,7 +16171,7 @@ async def create( Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ @@ -17009,9 +16191,9 @@ async def create( :type ssh_public_key_name: str :param parameters: Parameters supplied to create the SSH public key. Is either a SshPublicKeyResource type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource or IO[bytes] :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -17025,7 +16207,7 @@ async def create( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SshPublicKeyResource] = kwargs.pop("cls", None) @@ -17085,12 +16267,12 @@ async def update( :param ssh_public_key_name: The name of the SSH public key. Required. :type ssh_public_key_name: str :param parameters: Parameters supplied to update the SSH public key. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyUpdateResource + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyUpdateResource :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ @@ -17116,7 +16298,7 @@ async def update( Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ @@ -17136,10 +16318,10 @@ async def update( :type ssh_public_key_name: str :param parameters: Parameters supplied to update the SSH public key. Is either a SshPublicKeyUpdateResource type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyUpdateResource or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyUpdateResource or IO[bytes] :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -17153,7 +16335,7 @@ async def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SshPublicKeyResource] = kwargs.pop("cls", None) @@ -17219,7 +16401,7 @@ async def delete(self, resource_group_name: str, ssh_public_key_name: str, **kwa _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_ssh_public_keys_delete_request( @@ -17257,7 +16439,7 @@ async def get( :param ssh_public_key_name: The name of the SSH public key. Required. :type ssh_public_key_name: str :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -17271,7 +16453,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.SshPublicKeyResource] = kwargs.pop("cls", None) _request = build_ssh_public_keys_get_request( @@ -17321,12 +16503,12 @@ async def generate_key_pair( :param ssh_public_key_name: The name of the SSH public key. Required. :type ssh_public_key_name: str :param parameters: Parameters supplied to generate the SSH public key. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshGenerateKeyPairInputParameters + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshGenerateKeyPairInputParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyGenerateKeyPairResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyGenerateKeyPairResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyGenerateKeyPairResult :raises ~azure.core.exceptions.HttpResponseError: """ @@ -17354,7 +16536,7 @@ async def generate_key_pair( Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyGenerateKeyPairResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyGenerateKeyPairResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyGenerateKeyPairResult :raises ~azure.core.exceptions.HttpResponseError: """ @@ -17376,10 +16558,10 @@ async def generate_key_pair( :type ssh_public_key_name: str :param parameters: Parameters supplied to generate the SSH public key. Is either a SshGenerateKeyPairInputParameters type or a IO[bytes] type. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshGenerateKeyPairInputParameters or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshGenerateKeyPairInputParameters or IO[bytes] :return: SshPublicKeyGenerateKeyPairResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyGenerateKeyPairResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyGenerateKeyPairResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -17393,7 +16575,7 @@ async def generate_key_pair( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SshPublicKeyGenerateKeyPairResult] = kwargs.pop("cls", None) @@ -17446,7 +16628,7 @@ class ImagesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`images` attribute. """ @@ -17454,10 +16636,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -17474,7 +16656,7 @@ async def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -17539,12 +16721,12 @@ async def begin_create_or_update( :param image_name: The name of the image. Required. :type image_name: str :param parameters: Parameters supplied to the Create Image operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.Image + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.Image :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -17570,7 +16752,7 @@ async def begin_create_or_update( Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -17586,15 +16768,15 @@ async def begin_create_or_update( :type image_name: str :param parameters: Parameters supplied to the Create Image operation. Is either a Image type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.Image or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.Image or IO[bytes] :return: An instance of AsyncLROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.Image] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -17656,7 +16838,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -17721,12 +16903,12 @@ async def begin_update( :param image_name: The name of the image. Required. :type image_name: str :param parameters: Parameters supplied to the Update Image operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ImageUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ImageUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -17752,7 +16934,7 @@ async def begin_update( Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -17772,15 +16954,15 @@ async def begin_update( :type image_name: str :param parameters: Parameters supplied to the Update Image operation. Is either a ImageUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ImageUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ImageUpdate or IO[bytes] :return: An instance of AsyncLROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.Image] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -17836,7 +17018,7 @@ async def _delete_initial(self, resource_group_name: str, image_name: str, **kwa _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_images_delete_request( @@ -17887,7 +17069,7 @@ async def begin_delete(self, resource_group_name: str, image_name: str, **kwargs _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -17937,7 +17119,7 @@ async def get( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: Image or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.Image + :rtype: ~azure.mgmt.compute.v2024_07_01.models.Image :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -17951,7 +17133,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.Image] = kwargs.pop("cls", None) _request = build_images_get_request( @@ -17991,13 +17173,13 @@ def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> Asy :param resource_group_name: The name of the resource group. Required. :type resource_group_name: str :return: An iterator like instance of either Image or the result of cls(response) - :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.Image] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ImageListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -18067,13 +17249,13 @@ def list(self, **kwargs: Any) -> AsyncIterable["_models.Image"]: next page of Images. Do this till nextLink is null to fetch all the Images. :return: An iterator like instance of either Image or the result of cls(response) - :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.Image] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ImageListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -18143,7 +17325,7 @@ class RestorePointCollectionsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`restore_point_collections` attribute. """ @@ -18151,10 +17333,10 @@ class RestorePointCollectionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -18177,12 +17359,12 @@ async def create_or_update( :type restore_point_collection_name: str :param parameters: Parameters supplied to the Create or Update restore point collection operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ @@ -18211,7 +17393,7 @@ async def create_or_update( Default value is "application/json". :paramtype content_type: str :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ @@ -18233,9 +17415,9 @@ async def create_or_update( :type restore_point_collection_name: str :param parameters: Parameters supplied to the Create or Update restore point collection operation. Is either a RestorePointCollection type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection or IO[bytes] :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -18249,7 +17431,7 @@ async def create_or_update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.RestorePointCollection] = kwargs.pop("cls", None) @@ -18310,12 +17492,12 @@ async def update( :type restore_point_collection_name: str :param parameters: Parameters supplied to the Update restore point collection operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollectionUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollectionUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ @@ -18342,7 +17524,7 @@ async def update( Default value is "application/json". :paramtype content_type: str :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ @@ -18362,10 +17544,10 @@ async def update( :type restore_point_collection_name: str :param parameters: Parameters supplied to the Update restore point collection operation. Is either a RestorePointCollectionUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollectionUpdate or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollectionUpdate or IO[bytes] :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -18379,7 +17561,7 @@ async def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.RestorePointCollection] = kwargs.pop("cls", None) @@ -18436,7 +17618,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_restore_point_collections_delete_request( @@ -18490,7 +17672,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -18546,9 +17728,9 @@ async def get( server will return all contained restore points in the restorePointCollection. "restorePoints" Default value is None. :paramtype expand: str or - ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollectionExpandOptions + ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollectionExpandOptions :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -18562,7 +17744,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RestorePointCollection] = kwargs.pop("cls", None) _request = build_restore_point_collections_get_request( @@ -18603,13 +17785,13 @@ def list(self, resource_group_name: str, **kwargs: Any) -> AsyncIterable["_model :return: An iterator like instance of either RestorePointCollection or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RestorePointCollectionListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -18682,13 +17864,13 @@ def list_all(self, **kwargs: Any) -> AsyncIterable["_models.RestorePointCollecti :return: An iterator like instance of either RestorePointCollection or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RestorePointCollectionListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -18758,7 +17940,7 @@ class RestorePointsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`restore_points` attribute. """ @@ -18766,10 +17948,10 @@ class RestorePointsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_initial( @@ -18791,7 +17973,7 @@ async def _create_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -18861,13 +18043,13 @@ async def begin_create( :param restore_point_name: The name of the restore point. Required. :type restore_point_name: str :param parameters: Parameters supplied to the Create restore point operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePoint + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePoint :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either RestorePoint or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.RestorePoint] + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.RestorePoint] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -18898,7 +18080,7 @@ async def begin_create( :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either RestorePoint or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.RestorePoint] + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.RestorePoint] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -18922,16 +18104,16 @@ async def begin_create( :type restore_point_name: str :param parameters: Parameters supplied to the Create restore point operation. Is either a RestorePoint type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePoint or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePoint or IO[bytes] :return: An instance of AsyncLROPoller that returns either RestorePoint or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.RestorePoint] + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.RestorePoint] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.RestorePoint] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -18990,7 +18172,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_restore_points_delete_request( @@ -19046,7 +18228,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -19104,9 +18286,9 @@ async def get( :type restore_point_name: str :keyword expand: The expand expression to apply on the operation. 'InstanceView' retrieves information about the run-time state of a restore point. "instanceView" Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.RestorePointExpandOptions + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.RestorePointExpandOptions :return: RestorePoint or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePoint + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePoint :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19120,7 +18302,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RestorePoint] = kwargs.pop("cls", None) _request = build_restore_points_get_request( @@ -19160,7 +18342,7 @@ class CapacityReservationGroupsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`capacity_reservation_groups` attribute. """ @@ -19168,10 +18350,10 @@ class CapacityReservationGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -19193,12 +18375,12 @@ async def create_or_update( :param capacity_reservation_group_name: The name of the capacity reservation group. Required. :type capacity_reservation_group_name: str :param parameters: Parameters supplied to the Create capacity reservation Group. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -19226,7 +18408,7 @@ async def create_or_update( Default value is "application/json". :paramtype content_type: str :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -19248,9 +18430,9 @@ async def create_or_update( :type capacity_reservation_group_name: str :param parameters: Parameters supplied to the Create capacity reservation Group. Is either a CapacityReservationGroup type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup or IO[bytes] :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19264,7 +18446,7 @@ async def create_or_update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.CapacityReservationGroup] = kwargs.pop("cls", None) @@ -19326,12 +18508,12 @@ async def update( :type capacity_reservation_group_name: str :param parameters: Parameters supplied to the Update capacity reservation Group operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroupUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroupUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -19359,7 +18541,7 @@ async def update( Default value is "application/json". :paramtype content_type: str :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -19380,10 +18562,10 @@ async def update( :type capacity_reservation_group_name: str :param parameters: Parameters supplied to the Update capacity reservation Group operation. Is either a CapacityReservationGroupUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroupUpdate or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroupUpdate or IO[bytes] :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19397,7 +18579,7 @@ async def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.CapacityReservationGroup] = kwargs.pop("cls", None) @@ -19466,7 +18648,7 @@ async def delete(self, resource_group_name: str, capacity_reservation_group_name _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_capacity_reservation_groups_delete_request( @@ -19514,9 +18696,9 @@ async def get( platform and can change outside of control plane operations. "instanceView" Default value is None. :paramtype expand: str or - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroupInstanceViewTypes + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroupInstanceViewTypes :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19530,7 +18712,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.CapacityReservationGroup] = kwargs.pop("cls", None) _request = build_capacity_reservation_groups_get_request( @@ -19580,17 +18762,17 @@ def list_by_resource_group( associated to capacity reservation group in the response. Known values are: "virtualMachineScaleSetVMs/$ref" and "virtualMachines/$ref". Default value is None. :paramtype expand: str or - ~azure.mgmt.compute.v2024_11_01.models.ExpandTypesForGetCapacityReservationGroups + ~azure.mgmt.compute.v2024_07_01.models.ExpandTypesForGetCapacityReservationGroups :return: An iterator like instance of either CapacityReservationGroup or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.CapacityReservationGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -19671,7 +18853,7 @@ def list_by_subscription( associated to capacity reservation group in the response. Known values are: "virtualMachineScaleSetVMs/$ref" and "virtualMachines/$ref". Default value is None. :paramtype expand: str or - ~azure.mgmt.compute.v2024_11_01.models.ExpandTypesForGetCapacityReservationGroups + ~azure.mgmt.compute.v2024_07_01.models.ExpandTypesForGetCapacityReservationGroups :keyword resource_ids_only: The query option to fetch Capacity Reservation Group Resource Ids. :code:`
    ` 'CreatedInSubscription' enables fetching Resource Ids for all capacity reservation group resources created in the subscription. :code:`
    ` 'SharedWithSubscription' enables @@ -19680,17 +18862,17 @@ def list_by_subscription( group resources shared with the subscription and created in the subscription. Known values are: "CreatedInSubscription", "SharedWithSubscription", and "All". Default value is None. :paramtype resource_ids_only: str or - ~azure.mgmt.compute.v2024_11_01.models.ResourceIdOptionsForGetCapacityReservationGroups + ~azure.mgmt.compute.v2024_07_01.models.ResourceIdOptionsForGetCapacityReservationGroups :return: An iterator like instance of either CapacityReservationGroup or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.CapacityReservationGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -19762,7 +18944,7 @@ class CapacityReservationsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`capacity_reservations` attribute. """ @@ -19770,10 +18952,10 @@ class CapacityReservationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -19795,7 +18977,7 @@ async def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -19866,14 +19048,14 @@ async def begin_create_or_update( :param capacity_reservation_name: The name of the capacity reservation. Required. :type capacity_reservation_name: str :param parameters: Parameters supplied to the Create capacity reservation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservation + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservation :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -19906,7 +19088,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -19931,17 +19113,17 @@ async def begin_create_or_update( :type capacity_reservation_name: str :param parameters: Parameters supplied to the Create capacity reservation. Is either a CapacityReservation type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservation or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservation or IO[bytes] :return: An instance of AsyncLROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.CapacityReservation] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -20005,7 +19187,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -20074,14 +19256,14 @@ async def begin_update( :param capacity_reservation_name: The name of the capacity reservation. Required. :type capacity_reservation_name: str :param parameters: Parameters supplied to the Update capacity reservation operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -20112,7 +19294,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -20135,17 +19317,17 @@ async def begin_update( :type capacity_reservation_name: str :param parameters: Parameters supplied to the Update capacity reservation operation. Is either a CapacityReservationUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationUpdate or IO[bytes] :return: An instance of AsyncLROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.CapacityReservation] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -20208,7 +19390,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_capacity_reservations_delete_request( @@ -20270,7 +19452,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -20330,9 +19512,9 @@ async def get( snapshot of the runtime properties of the capacity reservation that is managed by the platform and can change outside of control plane operations. "instanceView" Default value is None. :paramtype expand: str or - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationInstanceViewTypes + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationInstanceViewTypes :return: CapacityReservation or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservation + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservation :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -20346,7 +19528,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.CapacityReservation] = kwargs.pop("cls", None) _request = build_capacity_reservations_get_request( @@ -20392,13 +19574,13 @@ def list_by_capacity_reservation_group( :type capacity_reservation_group_name: str :return: An iterator like instance of either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.CapacityReservationListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -20470,7 +19652,7 @@ class LogAnalyticsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`log_analytics` attribute. """ @@ -20478,10 +19660,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _export_request_rate_by_interval_initial( @@ -20498,7 +19680,7 @@ async def _export_request_rate_by_interval_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -20561,14 +19743,14 @@ async def begin_export_request_rate_by_interval( :type location: str :param parameters: Parameters supplied to the LogAnalytics getRequestRateByInterval Api. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RequestRateByIntervalInput + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RequestRateByIntervalInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -20590,7 +19772,7 @@ async def begin_export_request_rate_by_interval( :return: An instance of AsyncLROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -20605,18 +19787,18 @@ async def begin_export_request_rate_by_interval( :type location: str :param parameters: Parameters supplied to the LogAnalytics getRequestRateByInterval Api. Is either a RequestRateByIntervalInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RequestRateByIntervalInput or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RequestRateByIntervalInput or IO[bytes] :return: An instance of AsyncLROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.LogAnalyticsOperationResult] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -20676,7 +19858,7 @@ async def _export_throttled_requests_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -20738,14 +19920,14 @@ async def begin_export_throttled_requests( :param location: The location upon which virtual-machine-sizes is queried. Required. :type location: str :param parameters: Parameters supplied to the LogAnalytics getThrottledRequests Api. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ThrottledRequestsInput + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ThrottledRequestsInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -20766,7 +19948,7 @@ async def begin_export_throttled_requests( :return: An instance of AsyncLROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -20781,17 +19963,17 @@ async def begin_export_throttled_requests( :type location: str :param parameters: Parameters supplied to the LogAnalytics getThrottledRequests Api. Is either a ThrottledRequestsInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ThrottledRequestsInput or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ThrottledRequestsInput or IO[bytes] :return: An instance of AsyncLROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.LogAnalyticsOperationResult] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -20844,7 +20026,7 @@ class VirtualMachineRunCommandsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_run_commands` attribute. """ @@ -20852,10 +20034,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -20867,13 +20049,13 @@ def list(self, location: str, **kwargs: Any) -> AsyncIterable["_models.RunComman :return: An iterator like instance of either RunCommandDocumentBase or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.RunCommandDocumentBase] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.RunCommandDocumentBase] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RunCommandListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -20946,7 +20128,7 @@ async def get(self, location: str, command_id: str, **kwargs: Any) -> _models.Ru :param command_id: The command id. Required. :type command_id: str :return: RunCommandDocument or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RunCommandDocument + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RunCommandDocument :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -20960,7 +20142,7 @@ async def get(self, location: str, command_id: str, **kwargs: Any) -> _models.Ru _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RunCommandDocument] = kwargs.pop("cls", None) _request = build_virtual_machine_run_commands_get_request( @@ -21010,7 +20192,7 @@ async def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -21081,14 +20263,14 @@ async def begin_create_or_update( :type run_command_name: str :param run_command: Parameters supplied to the Create Virtual Machine RunCommand operation. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21121,7 +20303,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21145,17 +20327,17 @@ async def begin_create_or_update( :type run_command_name: str :param run_command: Parameters supplied to the Create Virtual Machine RunCommand operation. Is either a VirtualMachineRunCommand type or a IO[bytes] type. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand or IO[bytes] + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -21219,7 +20401,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -21290,14 +20472,14 @@ async def begin_update( :type run_command_name: str :param run_command: Parameters supplied to the Update Virtual Machine RunCommand operation. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandUpdate + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21330,7 +20512,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21354,18 +20536,18 @@ async def begin_update( :type run_command_name: str :param run_command: Parameters supplied to the Update Virtual Machine RunCommand operation. Is either a VirtualMachineRunCommandUpdate type or a IO[bytes] type. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandUpdate or + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandUpdate or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -21424,7 +20606,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_run_commands_delete_request( @@ -21481,7 +20663,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -21540,7 +20722,7 @@ async def get_by_virtual_machine( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineRunCommand or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -21554,7 +20736,7 @@ async def get_by_virtual_machine( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) _request = build_virtual_machine_run_commands_get_by_virtual_machine_request( @@ -21602,13 +20784,13 @@ def list_by_virtual_machine( :return: An iterator like instance of either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineRunCommandsListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -21681,7 +20863,7 @@ class VirtualMachineScaleSetVMRunCommandsOperations: # pylint: disable=name-too **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.aio.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.aio.ComputeManagementClient`'s :attr:`virtual_machine_scale_set_vm_run_commands` attribute. """ @@ -21689,10 +20871,10 @@ class VirtualMachineScaleSetVMRunCommandsOperations: # pylint: disable=name-too 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -21715,7 +20897,7 @@ async def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -21789,14 +20971,14 @@ async def begin_create_or_update( :type run_command_name: str :param run_command: Parameters supplied to the Create Virtual Machine RunCommand operation. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21831,7 +21013,7 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21857,17 +21039,17 @@ async def begin_create_or_update( :type run_command_name: str :param run_command: Parameters supplied to the Create Virtual Machine RunCommand operation. Is either a VirtualMachineRunCommand type or a IO[bytes] type. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand or IO[bytes] + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -21933,7 +21115,7 @@ async def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) @@ -22007,14 +21189,14 @@ async def begin_update( :type run_command_name: str :param run_command: Parameters supplied to the Update Virtual Machine RunCommand operation. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandUpdate + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -22049,7 +21231,7 @@ async def begin_update( :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -22075,18 +21257,18 @@ async def begin_update( :type run_command_name: str :param run_command: Parameters supplied to the Update Virtual Machine RunCommand operation. Is either a VirtualMachineRunCommandUpdate type or a IO[bytes] type. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandUpdate or + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandUpdate or IO[bytes] :return: An instance of AsyncLROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) @@ -22146,7 +21328,7 @@ async def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vm_run_commands_delete_request( @@ -22205,7 +21387,7 @@ async def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -22268,7 +21450,7 @@ async def get( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineRunCommand or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -22282,7 +21464,7 @@ async def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vm_run_commands_get_request( @@ -22339,13 +21521,13 @@ def list( :return: An iterator like instance of either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineRunCommandsListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/_patch.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/operations/_patch.py similarity index 61% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/_patch.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/operations/_patch.py index f7dd32510333..8bcb627aa475 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/_patch.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/aio/operations/_patch.py @@ -1,7 +1,8 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# 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. +# -------------------------------------------------------------------------- """Customize generated code here. Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/__init__.py similarity index 96% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/__init__.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/__init__.py index 3ca60bcc7b9a..671f80ca3ffc 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/__init__.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/__init__.py @@ -25,7 +25,6 @@ AutomaticOSUpgradePolicy, AutomaticOSUpgradeProperties, AutomaticRepairsPolicy, - AutomaticZoneRebalancingPolicy, AvailabilitySet, AvailabilitySetListResult, AvailabilitySetUpdate, @@ -46,7 +45,6 @@ CapacityReservationUtilization, ComputeOperationListResult, ComputeOperationValue, - ConvertToVirtualMachineScaleSetInput, DataDisk, DataDiskImage, DataDisksToAttach, @@ -64,7 +62,6 @@ DedicatedHostListResult, DedicatedHostSizeListResult, DedicatedHostUpdate, - DefaultVirtualMachineScaleSetInfo, DiagnosticsProfile, DiffDiskSettings, DisallowedConfiguration, @@ -78,7 +75,6 @@ EventGridAndResourceGraph, ExtendedLocation, HardwareProfile, - HostEndpointSettings, Image, ImageDataDisk, ImageDeprecationStatus, @@ -103,8 +99,6 @@ LogAnalyticsOutput, MaintenanceRedeployStatus, ManagedDiskParameters, - MigrateToVirtualMachineScaleSetInput, - MigrateVMToVirtualMachineScaleSetInput, NetworkInterfaceReference, NetworkProfile, OSDisk, @@ -116,7 +110,6 @@ OrchestrationServiceSummary, PatchInstallationDetail, PatchSettings, - Placement, Plan, PriorityMixPolicy, ProximityPlacementGroup, @@ -220,7 +213,6 @@ VirtualMachineImage, VirtualMachineImageFeature, VirtualMachineImageResource, - VirtualMachineImagesWithPropertiesListResult, VirtualMachineInstallPatchesParameters, VirtualMachineInstallPatchesResult, VirtualMachineInstanceView, @@ -255,7 +247,6 @@ VirtualMachineScaleSetListSkusResult, VirtualMachineScaleSetListWithLinkResult, VirtualMachineScaleSetManagedDiskParameters, - VirtualMachineScaleSetMigrationInfo, VirtualMachineScaleSetNetworkConfiguration, VirtualMachineScaleSetNetworkConfigurationDnsSettings, VirtualMachineScaleSetNetworkProfile, @@ -321,7 +312,6 @@ DiskDetachOptionTypes, DomainNameLabelScopeTypes, ExecutionState, - Expand, ExpandTypeForListVMs, ExpandTypesForGetCapacityReservationGroups, ExpandTypesForGetVMScaleSets, @@ -340,7 +330,6 @@ LinuxVMGuestPatchMode, MaintenanceOperationResultCodeTypes, Mode, - Modes, NetworkApiVersion, NetworkInterfaceAuxiliaryMode, NetworkInterfaceAuxiliarySku, @@ -359,10 +348,7 @@ PublicIPAddressSkuName, PublicIPAddressSkuTier, PublicIPAllocationMethod, - RebalanceBehavior, - RebalanceStrategy, RepairAction, - ResilientVMDeletionStatus, ResourceIdOptionsForGetCapacityReservationGroups, ResourceIdentityType, RestorePointCollectionExpandOptions, @@ -394,7 +380,6 @@ WindowsVMGuestPatchAutomaticByPlatformRebootSetting, WindowsVMGuestPatchMode, ZonalPlatformFaultDomainAlignMode, - ZonePlacementPolicyType, ) from ._patch import __all__ as _patch_all from ._patch import * @@ -412,7 +397,6 @@ "AutomaticOSUpgradePolicy", "AutomaticOSUpgradeProperties", "AutomaticRepairsPolicy", - "AutomaticZoneRebalancingPolicy", "AvailabilitySet", "AvailabilitySetListResult", "AvailabilitySetUpdate", @@ -433,7 +417,6 @@ "CapacityReservationUtilization", "ComputeOperationListResult", "ComputeOperationValue", - "ConvertToVirtualMachineScaleSetInput", "DataDisk", "DataDiskImage", "DataDisksToAttach", @@ -451,7 +434,6 @@ "DedicatedHostListResult", "DedicatedHostSizeListResult", "DedicatedHostUpdate", - "DefaultVirtualMachineScaleSetInfo", "DiagnosticsProfile", "DiffDiskSettings", "DisallowedConfiguration", @@ -465,7 +447,6 @@ "EventGridAndResourceGraph", "ExtendedLocation", "HardwareProfile", - "HostEndpointSettings", "Image", "ImageDataDisk", "ImageDeprecationStatus", @@ -490,8 +471,6 @@ "LogAnalyticsOutput", "MaintenanceRedeployStatus", "ManagedDiskParameters", - "MigrateToVirtualMachineScaleSetInput", - "MigrateVMToVirtualMachineScaleSetInput", "NetworkInterfaceReference", "NetworkProfile", "OSDisk", @@ -503,7 +482,6 @@ "OrchestrationServiceSummary", "PatchInstallationDetail", "PatchSettings", - "Placement", "Plan", "PriorityMixPolicy", "ProximityPlacementGroup", @@ -607,7 +585,6 @@ "VirtualMachineImage", "VirtualMachineImageFeature", "VirtualMachineImageResource", - "VirtualMachineImagesWithPropertiesListResult", "VirtualMachineInstallPatchesParameters", "VirtualMachineInstallPatchesResult", "VirtualMachineInstanceView", @@ -642,7 +619,6 @@ "VirtualMachineScaleSetListSkusResult", "VirtualMachineScaleSetListWithLinkResult", "VirtualMachineScaleSetManagedDiskParameters", - "VirtualMachineScaleSetMigrationInfo", "VirtualMachineScaleSetNetworkConfiguration", "VirtualMachineScaleSetNetworkConfigurationDnsSettings", "VirtualMachineScaleSetNetworkProfile", @@ -705,7 +681,6 @@ "DiskDetachOptionTypes", "DomainNameLabelScopeTypes", "ExecutionState", - "Expand", "ExpandTypeForListVMs", "ExpandTypesForGetCapacityReservationGroups", "ExpandTypesForGetVMScaleSets", @@ -724,7 +699,6 @@ "LinuxVMGuestPatchMode", "MaintenanceOperationResultCodeTypes", "Mode", - "Modes", "NetworkApiVersion", "NetworkInterfaceAuxiliaryMode", "NetworkInterfaceAuxiliarySku", @@ -743,10 +717,7 @@ "PublicIPAddressSkuName", "PublicIPAddressSkuTier", "PublicIPAllocationMethod", - "RebalanceBehavior", - "RebalanceStrategy", "RepairAction", - "ResilientVMDeletionStatus", "ResourceIdOptionsForGetCapacityReservationGroups", "ResourceIdentityType", "RestorePointCollectionExpandOptions", @@ -778,7 +749,6 @@ "WindowsVMGuestPatchAutomaticByPlatformRebootSetting", "WindowsVMGuestPatchMode", "ZonalPlatformFaultDomainAlignMode", - "ZonePlacementPolicyType", ] __all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/_compute_management_client_enums.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/_compute_management_client_enums.py similarity index 94% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/_compute_management_client_enums.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/_compute_management_client_enums.py index 3720d04833a5..eb5c4c5f024e 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/_compute_management_client_enums.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/_compute_management_client_enums.py @@ -1,4 +1,3 @@ -# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -18,7 +17,6 @@ class AllocationStrategy(str, Enum, metaclass=CaseInsensitiveEnumMeta): LOWEST_PRICE = "LowestPrice" CAPACITY_OPTIMIZED = "CapacityOptimized" - PRIORITIZED = "Prioritized" class AlternativeType(str, Enum, metaclass=CaseInsensitiveEnumMeta): @@ -199,12 +197,6 @@ class ExecutionState(str, Enum, metaclass=CaseInsensitiveEnumMeta): CANCELED = "Canceled" -class Expand(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Expand.""" - - PROPERTIES = "Properties" - - class ExpandTypeForListVMs(str, Enum, metaclass=CaseInsensitiveEnumMeta): """ExpandTypeForListVMs.""" @@ -270,7 +262,6 @@ class InstanceViewTypes(str, Enum, metaclass=CaseInsensitiveEnumMeta): INSTANCE_VIEW = "instanceView" USER_DATA = "userData" - RESILIENCY_VIEW = "resiliencyView" class IntervalInMins(str, Enum, metaclass=CaseInsensitiveEnumMeta): @@ -346,33 +337,22 @@ class MaintenanceOperationResultCodeTypes(str, Enum, metaclass=CaseInsensitiveEn class Mode(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Specifies the mode that ProxyAgent will execute on. Warning: this property has been deprecated, - please specify 'mode' under particular hostendpoint setting. + """Specifies the mode that ProxyAgent will execute on if the feature is enabled. ProxyAgent will + start to audit or monitor but not enforce access control over requests to host endpoints in + Audit mode, while in Enforce mode it will enforce access control. The default value is Enforce + mode. """ AUDIT = "Audit" ENFORCE = "Enforce" -class Modes(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Specifies the execution mode. In Audit mode, the system acts as if it is enforcing the access - control policy, including emitting access denial entries in the logs but it does not actually - deny any requests to host endpoints. In Enforce mode, the system will enforce the access - control and it is the recommended mode of operation. - """ - - AUDIT = "Audit" - ENFORCE = "Enforce" - DISABLED = "Disabled" - - class NetworkApiVersion(str, Enum, metaclass=CaseInsensitiveEnumMeta): """specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations. """ TWO_THOUSAND_TWENTY11_01 = "2020-11-01" - TWO_THOUSAND_TWENTY_TWO11_01 = "2022-11-01" class NetworkInterfaceAuxiliaryMode(str, Enum, metaclass=CaseInsensitiveEnumMeta): @@ -516,22 +496,6 @@ class PublicIPAllocationMethod(str, Enum, metaclass=CaseInsensitiveEnumMeta): STATIC = "Static" -class RebalanceBehavior(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Type of rebalance behavior that will be used for recreating virtual machines in the scale set - across availability zones. Default and only supported value for now is CreateBeforeDelete. - """ - - CREATE_BEFORE_DELETE = "CreateBeforeDelete" - - -class RebalanceStrategy(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Type of rebalance strategy that will be used for rebalancing virtual machines in the scale set - across availability zones. Default and only supported value for now is Recreate. - """ - - RECREATE = "Recreate" - - class RepairAction(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Type of repair action (replace, restart, reimage) that will be used for repairing unhealthy virtual machines in the scale set. Default value is replace. @@ -542,15 +506,6 @@ class RepairAction(str, Enum, metaclass=CaseInsensitiveEnumMeta): REIMAGE = "Reimage" -class ResilientVMDeletionStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Specifies the resilient VM deletion status for the virtual machine.""" - - ENABLED = "Enabled" - DISABLED = "Disabled" - IN_PROGRESS = "InProgress" - FAILED = "Failed" - - class ResourceIdentityType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """The type of identity used for the virtual machine scale set. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned @@ -1027,12 +982,3 @@ class ZonalPlatformFaultDomainAlignMode(str, Enum, metaclass=CaseInsensitiveEnum ALIGNED = "Aligned" UNALIGNED = "Unaligned" - - -class ZonePlacementPolicyType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Specifies the policy for virtual machine's placement in availability zone. Possible values are: - **Any** - An availability zone will be automatically picked by system as part of virtual - machine creation. - """ - - ANY = "Any" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/_models_py3.py similarity index 88% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/_models_py3.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/_models_py3.py index 912c010949ad..e5c9cf19f5eb 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/_models_py3.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -7,20 +7,15 @@ # 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, Literal, 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 +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] class AdditionalCapabilities(_serialization.Model): @@ -72,7 +67,7 @@ class AdditionalUnattendContent(_serialization.Model): :ivar setting_name: Specifies the name of the setting to which the content applies. Possible values are: FirstLogonCommands and AutoLogon. Known values are: "AutoLogon" and "FirstLogonCommands". - :vartype setting_name: str or ~azure.mgmt.compute.v2024_11_01.models.SettingNames + :vartype setting_name: str or ~azure.mgmt.compute.v2024_07_01.models.SettingNames :ivar content: Specifies the XML formatted content that is added to the unattend.xml file for the specified path and component. The XML must be less than 4KB and must include the root element for the setting or feature that is being inserted. @@ -105,7 +100,7 @@ def __init__( :keyword setting_name: Specifies the name of the setting to which the content applies. Possible values are: FirstLogonCommands and AutoLogon. Known values are: "AutoLogon" and "FirstLogonCommands". - :paramtype setting_name: str or ~azure.mgmt.compute.v2024_11_01.models.SettingNames + :paramtype setting_name: str or ~azure.mgmt.compute.v2024_07_01.models.SettingNames :keyword content: Specifies the XML formatted content that is added to the unattend.xml file for the specified path and component. The XML must be less than 4KB and must include the root element for the setting or feature that is being inserted. @@ -124,7 +119,7 @@ class AlternativeOption(_serialization.Model): :ivar type: Describes the type of the alternative option. Known values are: "None", "Offer", and "Plan". - :vartype type: str or ~azure.mgmt.compute.v2024_11_01.models.AlternativeType + :vartype type: str or ~azure.mgmt.compute.v2024_07_01.models.AlternativeType :ivar value: Indicates the alternative option value specified by the Publisher. This is the Offer name when the type is Offer or the Plan name when the type is Plan. :vartype value: str @@ -145,7 +140,7 @@ def __init__( """ :keyword type: Describes the type of the alternative option. Known values are: "None", "Offer", and "Plan". - :paramtype type: str or ~azure.mgmt.compute.v2024_11_01.models.AlternativeType + :paramtype type: str or ~azure.mgmt.compute.v2024_07_01.models.AlternativeType :keyword value: Indicates the alternative option value specified by the Publisher. This is the Offer name when the type is Offer or the Plan name when the type is Plan. :paramtype value: str @@ -181,9 +176,9 @@ class ApiError(_serialization.Model): """Api error. :ivar details: The Api error details. - :vartype details: list[~azure.mgmt.compute.v2024_11_01.models.ApiErrorBase] + :vartype details: list[~azure.mgmt.compute.v2024_07_01.models.ApiErrorBase] :ivar innererror: The Api inner error. - :vartype innererror: ~azure.mgmt.compute.v2024_11_01.models.InnerError + :vartype innererror: ~azure.mgmt.compute.v2024_07_01.models.InnerError :ivar code: The error code. :vartype code: str :ivar target: The target of the particular error. @@ -212,9 +207,9 @@ def __init__( ) -> None: """ :keyword details: The Api error details. - :paramtype details: list[~azure.mgmt.compute.v2024_11_01.models.ApiErrorBase] + :paramtype details: list[~azure.mgmt.compute.v2024_07_01.models.ApiErrorBase] :keyword innererror: The Api inner error. - :paramtype innererror: ~azure.mgmt.compute.v2024_11_01.models.InnerError + :paramtype innererror: ~azure.mgmt.compute.v2024_07_01.models.InnerError :keyword code: The error code. :paramtype code: str :keyword target: The target of the particular error. @@ -270,7 +265,7 @@ class ApplicationProfile(_serialization.Model): :ivar gallery_applications: Specifies the gallery applications that should be made available to the VM/VMSS. :vartype gallery_applications: - list[~azure.mgmt.compute.v2024_11_01.models.VMGalleryApplication] + list[~azure.mgmt.compute.v2024_07_01.models.VMGalleryApplication] """ _attribute_map = { @@ -284,7 +279,7 @@ def __init__( :keyword gallery_applications: Specifies the gallery applications that should be made available to the VM/VMSS. :paramtype gallery_applications: - list[~azure.mgmt.compute.v2024_11_01.models.VMGalleryApplication] + list[~azure.mgmt.compute.v2024_07_01.models.VMGalleryApplication] """ super().__init__(**kwargs) self.gallery_applications = gallery_applications @@ -294,9 +289,9 @@ class AttachDetachDataDisksRequest(_serialization.Model): """Specifies the input for attaching and detaching a list of managed data disks. :ivar data_disks_to_attach: The list of managed data disks to be attached. - :vartype data_disks_to_attach: list[~azure.mgmt.compute.v2024_11_01.models.DataDisksToAttach] + :vartype data_disks_to_attach: list[~azure.mgmt.compute.v2024_07_01.models.DataDisksToAttach] :ivar data_disks_to_detach: The list of managed data disks to be detached. - :vartype data_disks_to_detach: list[~azure.mgmt.compute.v2024_11_01.models.DataDisksToDetach] + :vartype data_disks_to_detach: list[~azure.mgmt.compute.v2024_07_01.models.DataDisksToDetach] """ _validation = { @@ -318,9 +313,9 @@ def __init__( ) -> None: """ :keyword data_disks_to_attach: The list of managed data disks to be attached. - :paramtype data_disks_to_attach: list[~azure.mgmt.compute.v2024_11_01.models.DataDisksToAttach] + :paramtype data_disks_to_attach: list[~azure.mgmt.compute.v2024_07_01.models.DataDisksToAttach] :keyword data_disks_to_detach: The list of managed data disks to be detached. - :paramtype data_disks_to_detach: list[~azure.mgmt.compute.v2024_11_01.models.DataDisksToDetach] + :paramtype data_disks_to_detach: list[~azure.mgmt.compute.v2024_07_01.models.DataDisksToDetach] """ super().__init__(**kwargs) self.data_disks_to_attach = data_disks_to_attach @@ -334,7 +329,7 @@ class AutomaticOSUpgradePolicy(_serialization.Model): applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false. If this is set to true for Windows based scale sets, `enableAutomaticUpdates - `_ # pylint: disable=line-too-long + `_ is automatically set to false and cannot be set to true. :vartype enable_automatic_os_upgrade: bool :ivar disable_automatic_rollback: Whether OS image rollback feature should be disabled. Default @@ -372,7 +367,7 @@ def __init__( applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false. If this is set to true for Windows based scale sets, `enableAutomaticUpdates - `_ # pylint: disable=line-too-long + `_ is automatically set to false and cannot be set to true. :paramtype enable_automatic_os_upgrade: bool :keyword disable_automatic_rollback: Whether OS image rollback feature should be disabled. @@ -438,7 +433,7 @@ class AutomaticRepairsPolicy(_serialization.Model): :ivar repair_action: Type of repair action (replace, restart, reimage) that will be used for repairing unhealthy virtual machines in the scale set. Default value is replace. Known values are: "Replace", "Restart", and "Reimage". - :vartype repair_action: str or ~azure.mgmt.compute.v2024_11_01.models.RepairAction + :vartype repair_action: str or ~azure.mgmt.compute.v2024_07_01.models.RepairAction """ _attribute_map = { @@ -468,7 +463,7 @@ def __init__( :keyword repair_action: Type of repair action (replace, restart, reimage) that will be used for repairing unhealthy virtual machines in the scale set. Default value is replace. Known values are: "Replace", "Restart", and "Reimage". - :paramtype repair_action: str or ~azure.mgmt.compute.v2024_11_01.models.RepairAction + :paramtype repair_action: str or ~azure.mgmt.compute.v2024_07_01.models.RepairAction """ super().__init__(**kwargs) self.enabled = enabled @@ -476,55 +471,6 @@ def __init__( self.repair_action = repair_action -class AutomaticZoneRebalancingPolicy(_serialization.Model): - """The configuration parameters used while performing automatic AZ balancing. - - :ivar enabled: Specifies whether Automatic AZ Balancing should be enabled on the virtual - machine scale set. The default value is false. - :vartype enabled: bool - :ivar rebalance_strategy: Type of rebalance strategy that will be used for rebalancing virtual - machines in the scale set across availability zones. Default and only supported value for now - is Recreate. "Recreate" - :vartype rebalance_strategy: str or ~azure.mgmt.compute.v2024_11_01.models.RebalanceStrategy - :ivar rebalance_behavior: Type of rebalance behavior that will be used for recreating virtual - machines in the scale set across availability zones. Default and only supported value for now - is CreateBeforeDelete. "CreateBeforeDelete" - :vartype rebalance_behavior: str or ~azure.mgmt.compute.v2024_11_01.models.RebalanceBehavior - """ - - _attribute_map = { - "enabled": {"key": "enabled", "type": "bool"}, - "rebalance_strategy": {"key": "rebalanceStrategy", "type": "str"}, - "rebalance_behavior": {"key": "rebalanceBehavior", "type": "str"}, - } - - def __init__( - self, - *, - enabled: Optional[bool] = None, - rebalance_strategy: Optional[Union[str, "_models.RebalanceStrategy"]] = None, - rebalance_behavior: Optional[Union[str, "_models.RebalanceBehavior"]] = None, - **kwargs: Any - ) -> None: - """ - :keyword enabled: Specifies whether Automatic AZ Balancing should be enabled on the virtual - machine scale set. The default value is false. - :paramtype enabled: bool - :keyword rebalance_strategy: Type of rebalance strategy that will be used for rebalancing - virtual machines in the scale set across availability zones. Default and only supported value - for now is Recreate. "Recreate" - :paramtype rebalance_strategy: str or ~azure.mgmt.compute.v2024_11_01.models.RebalanceStrategy - :keyword rebalance_behavior: Type of rebalance behavior that will be used for recreating - virtual machines in the scale set across availability zones. Default and only supported value - for now is CreateBeforeDelete. "CreateBeforeDelete" - :paramtype rebalance_behavior: str or ~azure.mgmt.compute.v2024_11_01.models.RebalanceBehavior - """ - super().__init__(**kwargs) - self.enabled = enabled - self.rebalance_strategy = rebalance_strategy - self.rebalance_behavior = rebalance_behavior - - class Resource(_serialization.Model): """The Resource model definition. @@ -567,9 +513,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -603,26 +549,22 @@ class AvailabilitySet(Resource): AvailabilitySetSkuTypes for possible set of values. Use 'Aligned' for virtual machines with managed disks and 'Classic' for virtual machines with unmanaged disks. Default value is 'Classic'. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :ivar platform_update_domain_count: Update Domain count. :vartype platform_update_domain_count: int :ivar platform_fault_domain_count: Fault Domain count. :vartype platform_fault_domain_count: int :ivar virtual_machines: A list of references to all virtual machines in the availability set. - :vartype virtual_machines: list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + :vartype virtual_machines: list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :ivar proximity_placement_group: Specifies information about the proximity placement group that the availability set should be assigned to. Minimum api-version: 2018-04-01. - :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :ivar scheduled_events_policy: Specifies Redeploy, Reboot and ScheduledEventsAdditionalPublishingTargets Scheduled Event related configurations for the availability set. - :vartype scheduled_events_policy: ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsPolicy - :ivar virtual_machine_scale_set_migration_info: Describes the migration properties on the - Availability Set. - :vartype virtual_machine_scale_set_migration_info: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetMigrationInfo + :vartype scheduled_events_policy: ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsPolicy """ _validation = { @@ -631,7 +573,6 @@ class AvailabilitySet(Resource): "type": {"readonly": True}, "location": {"required": True}, "statuses": {"readonly": True}, - "virtual_machine_scale_set_migration_info": {"readonly": True}, } _attribute_map = { @@ -647,10 +588,6 @@ class AvailabilitySet(Resource): "proximity_placement_group": {"key": "properties.proximityPlacementGroup", "type": "SubResource"}, "statuses": {"key": "properties.statuses", "type": "[InstanceViewStatus]"}, "scheduled_events_policy": {"key": "properties.scheduledEventsPolicy", "type": "ScheduledEventsPolicy"}, - "virtual_machine_scale_set_migration_info": { - "key": "properties.virtualMachineScaleSetMigrationInfo", - "type": "VirtualMachineScaleSetMigrationInfo", - }, } def __init__( @@ -675,22 +612,22 @@ def __init__( AvailabilitySetSkuTypes for possible set of values. Use 'Aligned' for virtual machines with managed disks and 'Classic' for virtual machines with unmanaged disks. Default value is 'Classic'. - :paramtype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :paramtype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :keyword platform_update_domain_count: Update Domain count. :paramtype platform_update_domain_count: int :keyword platform_fault_domain_count: Fault Domain count. :paramtype platform_fault_domain_count: int :keyword virtual_machines: A list of references to all virtual machines in the availability set. - :paramtype virtual_machines: list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + :paramtype virtual_machines: list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :keyword proximity_placement_group: Specifies information about the proximity placement group that the availability set should be assigned to. Minimum api-version: 2018-04-01. - :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword scheduled_events_policy: Specifies Redeploy, Reboot and ScheduledEventsAdditionalPublishingTargets Scheduled Event related configurations for the availability set. :paramtype scheduled_events_policy: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsPolicy + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsPolicy """ super().__init__(location=location, tags=tags, **kwargs) self.sku = sku @@ -698,9 +635,8 @@ def __init__( self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines self.proximity_placement_group = proximity_placement_group - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None self.scheduled_events_policy = scheduled_events_policy - self.virtual_machine_scale_set_migration_info = None class AvailabilitySetListResult(_serialization.Model): @@ -709,7 +645,7 @@ class AvailabilitySetListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of availability sets. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet] :ivar next_link: The URI to fetch the next page of AvailabilitySets. Call ListNext() with this URI to fetch the next page of AvailabilitySets. :vartype next_link: str @@ -729,7 +665,7 @@ def __init__( ) -> None: """ :keyword value: The list of availability sets. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet] :keyword next_link: The URI to fetch the next page of AvailabilitySets. Call ListNext() with this URI to fetch the next page of AvailabilitySets. :paramtype next_link: str @@ -768,31 +704,26 @@ class AvailabilitySetUpdate(UpdateResource): :ivar tags: Resource tags. :vartype tags: dict[str, str] :ivar sku: Sku of the availability set. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :ivar platform_update_domain_count: Update Domain count. :vartype platform_update_domain_count: int :ivar platform_fault_domain_count: Fault Domain count. :vartype platform_fault_domain_count: int :ivar virtual_machines: A list of references to all virtual machines in the availability set. - :vartype virtual_machines: list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + :vartype virtual_machines: list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :ivar proximity_placement_group: Specifies information about the proximity placement group that the availability set should be assigned to. Minimum api-version: 2018-04-01. - :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :ivar scheduled_events_policy: Specifies Redeploy, Reboot and ScheduledEventsAdditionalPublishingTargets Scheduled Event related configurations for the availability set. - :vartype scheduled_events_policy: ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsPolicy - :ivar virtual_machine_scale_set_migration_info: Describes the migration properties on the - Availability Set. - :vartype virtual_machine_scale_set_migration_info: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetMigrationInfo + :vartype scheduled_events_policy: ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsPolicy """ _validation = { "statuses": {"readonly": True}, - "virtual_machine_scale_set_migration_info": {"readonly": True}, } _attribute_map = { @@ -804,10 +735,6 @@ class AvailabilitySetUpdate(UpdateResource): "proximity_placement_group": {"key": "properties.proximityPlacementGroup", "type": "SubResource"}, "statuses": {"key": "properties.statuses", "type": "[InstanceViewStatus]"}, "scheduled_events_policy": {"key": "properties.scheduledEventsPolicy", "type": "ScheduledEventsPolicy"}, - "virtual_machine_scale_set_migration_info": { - "key": "properties.virtualMachineScaleSetMigrationInfo", - "type": "VirtualMachineScaleSetMigrationInfo", - }, } def __init__( @@ -826,22 +753,22 @@ def __init__( :keyword tags: Resource tags. :paramtype tags: dict[str, str] :keyword sku: Sku of the availability set. - :paramtype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :paramtype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :keyword platform_update_domain_count: Update Domain count. :paramtype platform_update_domain_count: int :keyword platform_fault_domain_count: Fault Domain count. :paramtype platform_fault_domain_count: int :keyword virtual_machines: A list of references to all virtual machines in the availability set. - :paramtype virtual_machines: list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + :paramtype virtual_machines: list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :keyword proximity_placement_group: Specifies information about the proximity placement group that the availability set should be assigned to. Minimum api-version: 2018-04-01. - :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword scheduled_events_policy: Specifies Redeploy, Reboot and ScheduledEventsAdditionalPublishingTargets Scheduled Event related configurations for the availability set. :paramtype scheduled_events_policy: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsPolicy + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsPolicy """ super().__init__(tags=tags, **kwargs) self.sku = sku @@ -849,9 +776,8 @@ def __init__( self.platform_fault_domain_count = platform_fault_domain_count self.virtual_machines = virtual_machines self.proximity_placement_group = proximity_placement_group - self.statuses = None + self.statuses: Optional[List["_models.InstanceViewStatus"]] = None self.scheduled_events_policy = scheduled_events_policy - self.virtual_machine_scale_set_migration_info = None class AvailablePatchSummary(_serialization.Model): @@ -863,7 +789,7 @@ class AvailablePatchSummary(_serialization.Model): until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded", or "CompletedWithWarnings.". Known values are: "Unknown", "InProgress", "Failed", "Succeeded", and "CompletedWithWarnings". - :vartype status: str or ~azure.mgmt.compute.v2024_11_01.models.PatchOperationStatus + :vartype status: str or ~azure.mgmt.compute.v2024_07_01.models.PatchOperationStatus :ivar assessment_activity_id: The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. :vartype assessment_activity_id: str @@ -882,7 +808,7 @@ class AvailablePatchSummary(_serialization.Model): :vartype last_modified_time: ~datetime.datetime :ivar error: The errors that were encountered during execution of the operation. The details array contains the list of them. - :vartype error: ~azure.mgmt.compute.v2024_11_01.models.ApiError + :vartype error: ~azure.mgmt.compute.v2024_07_01.models.ApiError """ _validation = { @@ -910,14 +836,14 @@ class AvailablePatchSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.assessment_activity_id = None - self.reboot_pending = None - self.critical_and_security_patch_count = None - self.other_patch_count = None - self.start_time = None - self.last_modified_time = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.assessment_activity_id: Optional[str] = None + self.reboot_pending: Optional[bool] = None + self.critical_and_security_patch_count: Optional[int] = None + self.other_patch_count: Optional[int] = None + self.start_time: Optional[datetime.datetime] = None + self.last_modified_time: Optional[datetime.datetime] = None + self.error: Optional["_models.ApiError"] = None class BillingProfile(_serialization.Model): @@ -1008,7 +934,7 @@ class BootDiagnosticsInstanceView(_serialization.Model): :vartype serial_console_log_blob_uri: str :ivar status: The boot diagnostics status information for the VM. **Note:** It will be set only if there are errors encountered in enabling boot diagnostics. - :vartype status: ~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus + :vartype status: ~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus """ _validation = { @@ -1026,9 +952,9 @@ class BootDiagnosticsInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None - self.status = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None + self.status: Optional["_models.InstanceViewStatus"] = None class CapacityReservation(Resource): @@ -1053,7 +979,7 @@ class CapacityReservation(Resource): 'CapacityReservationSupported' set to true are supported. Refer to List Microsoft.Compute SKUs in a region (https://docs.microsoft.com/rest/api/compute/resourceskus/list) for supported values. Required. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :ivar zones: Availability Zone to use for this capacity reservation. The zone has to be single value and also should be part for the list of zones specified during the capacity reservation group creation. The zone can be assigned only during creation. If not provided, the reservation @@ -1071,13 +997,13 @@ class CapacityReservation(Resource): :ivar virtual_machines_associated: A list of all virtual machine resource ids that are associated with the capacity reservation. :vartype virtual_machines_associated: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] :ivar provisioning_time: The date time when the capacity reservation was last updated. :vartype provisioning_time: ~datetime.datetime :ivar provisioning_state: The provisioning state, which only appears in the response. :vartype provisioning_state: str :ivar instance_view: The Capacity reservation instance view. - :vartype instance_view: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationInstanceView + :vartype instance_view: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationInstanceView :ivar time_created: Specifies the time at which the Capacity Reservation resource was created. Minimum api-version: 2021-11-01. :vartype time_created: ~datetime.datetime @@ -1134,7 +1060,7 @@ def __init__( 'CapacityReservationSupported' set to true are supported. Refer to List Microsoft.Compute SKUs in a region (https://docs.microsoft.com/rest/api/compute/resourceskus/list) for supported values. Required. - :paramtype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :paramtype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :keyword zones: Availability Zone to use for this capacity reservation. The zone has to be single value and also should be part for the list of zones specified during the capacity reservation group creation. The zone can be assigned only during creation. If not provided, the @@ -1145,13 +1071,13 @@ def __init__( super().__init__(location=location, tags=tags, **kwargs) self.sku = sku self.zones = zones - self.reservation_id = None - self.platform_fault_domain_count = None - self.virtual_machines_associated = None - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None - self.time_created = None + self.reservation_id: Optional[str] = None + self.platform_fault_domain_count: Optional[int] = None + self.virtual_machines_associated: Optional[List["_models.SubResourceReadOnly"]] = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.CapacityReservationInstanceView"] = None + self.time_created: Optional[datetime.datetime] = None class CapacityReservationGroup(Resource): @@ -1182,22 +1108,22 @@ class CapacityReservationGroup(Resource): :ivar capacity_reservations: A list of all capacity reservation resource ids that belong to capacity reservation group. :vartype capacity_reservations: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] :ivar virtual_machines_associated: A list of references to all virtual machines associated to the capacity reservation group. :vartype virtual_machines_associated: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] :ivar instance_view: The capacity reservation group instance view which has the list of instance views for all the capacity reservations that belong to the capacity reservation group. :vartype instance_view: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroupInstanceView + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroupInstanceView :ivar sharing_profile: Specifies the settings to enable sharing across subscriptions for the capacity reservation group resource. Pls. keep in mind the capacity reservation group resource generally can be shared across subscriptions belonging to a single azure AAD tenant or cross AAD tenant if there is a trust relationship established between the AAD tenants. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details. - :vartype sharing_profile: ~azure.mgmt.compute.v2024_11_01.models.ResourceSharingProfile + :vartype sharing_profile: ~azure.mgmt.compute.v2024_07_01.models.ResourceSharingProfile """ _validation = { @@ -1248,13 +1174,13 @@ def __init__( AAD tenant if there is a trust relationship established between the AAD tenants. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details. - :paramtype sharing_profile: ~azure.mgmt.compute.v2024_11_01.models.ResourceSharingProfile + :paramtype sharing_profile: ~azure.mgmt.compute.v2024_07_01.models.ResourceSharingProfile """ super().__init__(location=location, tags=tags, **kwargs) self.zones = zones - self.capacity_reservations = None - self.virtual_machines_associated = None - self.instance_view = None + self.capacity_reservations: Optional[List["_models.SubResourceReadOnly"]] = None + self.virtual_machines_associated: Optional[List["_models.SubResourceReadOnly"]] = None + self.instance_view: Optional["_models.CapacityReservationGroupInstanceView"] = None self.sharing_profile = sharing_profile @@ -1266,12 +1192,12 @@ class CapacityReservationGroupInstanceView(_serialization.Model): :ivar capacity_reservations: List of instance view of the capacity reservations under the capacity reservation group. :vartype capacity_reservations: - list[~azure.mgmt.compute.v2024_11_01.models.CapacityReservationInstanceViewWithName] + list[~azure.mgmt.compute.v2024_07_01.models.CapacityReservationInstanceViewWithName] :ivar shared_subscription_ids: List of the subscriptions that the capacity reservation group is shared with. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details. :vartype shared_subscription_ids: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] """ _validation = { @@ -1287,8 +1213,8 @@ class CapacityReservationGroupInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.capacity_reservations = None - self.shared_subscription_ids = None + self.capacity_reservations: Optional[List["_models.CapacityReservationInstanceViewWithName"]] = None + self.shared_subscription_ids: Optional[List["_models.SubResourceReadOnly"]] = None class CapacityReservationGroupListResult(_serialization.Model): @@ -1297,7 +1223,7 @@ class CapacityReservationGroupListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of capacity reservation groups. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup] :ivar next_link: The URI to fetch the next page of capacity reservation groups. Call ListNext() with this URI to fetch the next page of capacity reservation groups. :vartype next_link: str @@ -1317,7 +1243,7 @@ def __init__( ) -> None: """ :keyword value: The list of capacity reservation groups. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup] :keyword next_link: The URI to fetch the next page of capacity reservation groups. Call ListNext() with this URI to fetch the next page of capacity reservation groups. :paramtype next_link: str @@ -1337,22 +1263,22 @@ class CapacityReservationGroupUpdate(UpdateResource): :ivar capacity_reservations: A list of all capacity reservation resource ids that belong to capacity reservation group. :vartype capacity_reservations: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] :ivar virtual_machines_associated: A list of references to all virtual machines associated to the capacity reservation group. :vartype virtual_machines_associated: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] :ivar instance_view: The capacity reservation group instance view which has the list of instance views for all the capacity reservations that belong to the capacity reservation group. :vartype instance_view: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroupInstanceView + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroupInstanceView :ivar sharing_profile: Specifies the settings to enable sharing across subscriptions for the capacity reservation group resource. Pls. keep in mind the capacity reservation group resource generally can be shared across subscriptions belonging to a single azure AAD tenant or cross AAD tenant if there is a trust relationship established between the AAD tenants. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details. - :vartype sharing_profile: ~azure.mgmt.compute.v2024_11_01.models.ResourceSharingProfile + :vartype sharing_profile: ~azure.mgmt.compute.v2024_07_01.models.ResourceSharingProfile """ _validation = { @@ -1385,12 +1311,12 @@ def __init__( AAD tenant if there is a trust relationship established between the AAD tenants. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details. - :paramtype sharing_profile: ~azure.mgmt.compute.v2024_11_01.models.ResourceSharingProfile + :paramtype sharing_profile: ~azure.mgmt.compute.v2024_07_01.models.ResourceSharingProfile """ super().__init__(tags=tags, **kwargs) - self.capacity_reservations = None - self.virtual_machines_associated = None - self.instance_view = None + self.capacity_reservations: Optional[List["_models.SubResourceReadOnly"]] = None + self.virtual_machines_associated: Optional[List["_models.SubResourceReadOnly"]] = None + self.instance_view: Optional["_models.CapacityReservationGroupInstanceView"] = None self.sharing_profile = sharing_profile @@ -1401,9 +1327,9 @@ class CapacityReservationInstanceView(_serialization.Model): :ivar utilization_info: Unutilized capacity of the capacity reservation. :vartype utilization_info: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationUtilization + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationUtilization :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ _attribute_map = { @@ -1421,9 +1347,9 @@ def __init__( """ :keyword utilization_info: Unutilized capacity of the capacity reservation. :paramtype utilization_info: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationUtilization + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationUtilization :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) self.utilization_info = utilization_info @@ -1438,9 +1364,9 @@ class CapacityReservationInstanceViewWithName(CapacityReservationInstanceView): :ivar utilization_info: Unutilized capacity of the capacity reservation. :vartype utilization_info: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationUtilization + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationUtilization :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :ivar name: The name of the capacity reservation. :vartype name: str """ @@ -1465,12 +1391,12 @@ def __init__( """ :keyword utilization_info: Unutilized capacity of the capacity reservation. :paramtype utilization_info: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationUtilization + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationUtilization :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(utilization_info=utilization_info, statuses=statuses, **kwargs) - self.name = None + self.name: Optional[str] = None class CapacityReservationListResult(_serialization.Model): @@ -1479,7 +1405,7 @@ class CapacityReservationListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of capacity reservations. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :ivar next_link: The URI to fetch the next page of capacity reservations. Call ListNext() with this URI to fetch the next page of capacity reservations. :vartype next_link: str @@ -1499,7 +1425,7 @@ def __init__( ) -> None: """ :keyword value: The list of capacity reservations. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :keyword next_link: The URI to fetch the next page of capacity reservations. Call ListNext() with this URI to fetch the next page of capacity reservations. :paramtype next_link: str @@ -1516,7 +1442,7 @@ class CapacityReservationProfile(_serialization.Model): should be used for allocating the virtual machine or scaleset vm instances provided enough capacity has been reserved. Please refer to https://aka.ms/CapacityReservation for more details. - :vartype capacity_reservation_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype capacity_reservation_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource """ _attribute_map = { @@ -1529,7 +1455,7 @@ def __init__(self, *, capacity_reservation_group: Optional["_models.SubResource" should be used for allocating the virtual machine or scaleset vm instances provided enough capacity has been reserved. Please refer to https://aka.ms/CapacityReservation for more details. - :paramtype capacity_reservation_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype capacity_reservation_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource """ super().__init__(**kwargs) self.capacity_reservation_group = capacity_reservation_group @@ -1548,7 +1474,7 @@ class CapacityReservationUpdate(UpdateResource): 'CapacityReservationSupported' set to true are supported. Refer to List Microsoft.Compute SKUs in a region (https://docs.microsoft.com/rest/api/compute/resourceskus/list) for supported values. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :ivar reservation_id: A unique id generated and assigned to the capacity reservation by the platform which does not change throughout the lifetime of the resource. :vartype reservation_id: str @@ -1560,13 +1486,13 @@ class CapacityReservationUpdate(UpdateResource): :ivar virtual_machines_associated: A list of all virtual machine resource ids that are associated with the capacity reservation. :vartype virtual_machines_associated: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] :ivar provisioning_time: The date time when the capacity reservation was last updated. :vartype provisioning_time: ~datetime.datetime :ivar provisioning_state: The provisioning state, which only appears in the response. :vartype provisioning_state: str :ivar instance_view: The Capacity reservation instance view. - :vartype instance_view: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationInstanceView + :vartype instance_view: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationInstanceView :ivar time_created: Specifies the time at which the Capacity Reservation resource was created. Minimum api-version: 2021-11-01. :vartype time_created: ~datetime.datetime @@ -1605,17 +1531,17 @@ def __init__( 'CapacityReservationSupported' set to true are supported. Refer to List Microsoft.Compute SKUs in a region (https://docs.microsoft.com/rest/api/compute/resourceskus/list) for supported values. - :paramtype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :paramtype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku """ super().__init__(tags=tags, **kwargs) self.sku = sku - self.reservation_id = None - self.platform_fault_domain_count = None - self.virtual_machines_associated = None - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None - self.time_created = None + self.reservation_id: Optional[str] = None + self.platform_fault_domain_count: Optional[int] = None + self.virtual_machines_associated: Optional[List["_models.SubResourceReadOnly"]] = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.CapacityReservationInstanceView"] = None + self.time_created: Optional[datetime.datetime] = None class CapacityReservationUtilization(_serialization.Model): @@ -1630,7 +1556,7 @@ class CapacityReservationUtilization(_serialization.Model): :ivar virtual_machines_allocated: A list of all virtual machines resource ids allocated against the capacity reservation. :vartype virtual_machines_allocated: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] """ _validation = { @@ -1646,8 +1572,8 @@ class CapacityReservationUtilization(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.current_capacity = None - self.virtual_machines_allocated = None + self.current_capacity: Optional[int] = None + self.virtual_machines_allocated: Optional[List["_models.SubResourceReadOnly"]] = None class ComputeOperationListResult(_serialization.Model): @@ -1656,7 +1582,7 @@ class ComputeOperationListResult(_serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar value: The list of compute operations. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.ComputeOperationValue] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.ComputeOperationValue] """ _validation = { @@ -1670,7 +1596,7 @@ class ComputeOperationListResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.value = None + self.value: Optional[List["_models.ComputeOperationValue"]] = None class ComputeOperationValue(_serialization.Model): @@ -1713,34 +1639,12 @@ class ComputeOperationValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.origin = None - self.name = None - self.operation = None - self.resource = None - self.description = None - self.provider = None - - -class ConvertToVirtualMachineScaleSetInput(_serialization.Model): - """Describes the Virtual Machine Scale Set to convert from Availability Set. - - :ivar virtual_machine_scale_set_name: Specifies information about the Virtual Machine Scale Set - that the Availability Set should be converted to. - :vartype virtual_machine_scale_set_name: str - """ - - _attribute_map = { - "virtual_machine_scale_set_name": {"key": "virtualMachineScaleSetName", "type": "str"}, - } - - def __init__(self, *, virtual_machine_scale_set_name: Optional[str] = None, **kwargs: Any) -> None: - """ - :keyword virtual_machine_scale_set_name: Specifies information about the Virtual Machine Scale - Set that the Availability Set should be converted to. - :paramtype virtual_machine_scale_set_name: str - """ - super().__init__(**kwargs) - self.virtual_machine_scale_set_name = virtual_machine_scale_set_name + self.origin: Optional[str] = None + self.name: Optional[str] = None + self.operation: Optional[str] = None + self.resource: Optional[str] = None + self.description: Optional[str] = None + self.provider: Optional[str] = None class DataDisk(_serialization.Model): @@ -1757,15 +1661,15 @@ class DataDisk(_serialization.Model): :ivar name: The disk name. :vartype name: str :ivar vhd: The virtual hard disk. - :vartype vhd: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :vartype vhd: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :ivar image: The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist. - :vartype image: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :vartype image: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :ivar caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The defaulting behavior is: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :vartype write_accelerator_enabled: bool @@ -1778,16 +1682,16 @@ class DataDisk(_serialization.Model): **Copy:** This value is used to create a data disk from a snapshot or another disk. **Restore:** This value is used to create a data disk from a disk restore point. Required. Known values are: "FromImage", "Empty", "Attach", "Copy", and "Restore". - :vartype create_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskCreateOptionTypes + :vartype create_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskCreateOptionTypes :ivar disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. The property 'diskSizeGB' is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023. :vartype disk_size_gb: int :ivar managed_disk: The managed disk parameters. - :vartype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.ManagedDiskParameters + :vartype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.ManagedDiskParameters :ivar source_resource: The source resource identifier. It can be a snapshot, or disk restore point from which to create a disk. - :vartype source_resource: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + :vartype source_resource: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :ivar to_be_detached: Specifies whether the data disk is in process of detachment from the VirtualMachine/VirtualMachineScaleset. :vartype to_be_detached: bool @@ -1807,12 +1711,12 @@ class DataDisk(_serialization.Model): option to detach the disk forcibly from the VM. All writes might not have been flushed when using this detach behavior. To force-detach a data disk update toBeDetached to 'true' along with setting detachOption: 'ForceDetach'. "ForceDetach" - :vartype detach_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDetachOptionTypes + :vartype detach_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDetachOptionTypes :ivar delete_option: Specifies whether data disk should be deleted or detached upon VM deletion. Possible values are: **Delete.** If this value is used, the data disk is deleted when VM is deleted. **Detach.** If this value is used, the data disk is retained after VM is deleted. The default value is set to **Detach**. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes """ _validation = { @@ -1866,15 +1770,15 @@ def __init__( :keyword name: The disk name. :paramtype name: str :keyword vhd: The virtual hard disk. - :paramtype vhd: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :paramtype vhd: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :keyword image: The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist. - :paramtype image: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :paramtype image: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :keyword caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The defaulting behavior is: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :paramtype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :paramtype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :keyword write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :paramtype write_accelerator_enabled: bool @@ -1887,16 +1791,16 @@ def __init__( data disk. **Copy:** This value is used to create a data disk from a snapshot or another disk. **Restore:** This value is used to create a data disk from a disk restore point. Required. Known values are: "FromImage", "Empty", "Attach", "Copy", and "Restore". - :paramtype create_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskCreateOptionTypes + :paramtype create_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskCreateOptionTypes :keyword disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. The property 'diskSizeGB' is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023. :paramtype disk_size_gb: int :keyword managed_disk: The managed disk parameters. - :paramtype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.ManagedDiskParameters + :paramtype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.ManagedDiskParameters :keyword source_resource: The source resource identifier. It can be a snapshot, or disk restore point from which to create a disk. - :paramtype source_resource: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + :paramtype source_resource: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :keyword to_be_detached: Specifies whether the data disk is in process of detachment from the VirtualMachine/VirtualMachineScaleset. :paramtype to_be_detached: bool @@ -1908,12 +1812,12 @@ def __init__( option to detach the disk forcibly from the VM. All writes might not have been flushed when using this detach behavior. To force-detach a data disk update toBeDetached to 'true' along with setting detachOption: 'ForceDetach'. "ForceDetach" - :paramtype detach_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDetachOptionTypes + :paramtype detach_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDetachOptionTypes :keyword delete_option: Specifies whether data disk should be deleted or detached upon VM deletion. Possible values are: **Delete.** If this value is used, the data disk is deleted when VM is deleted. **Detach.** If this value is used, the data disk is retained after VM is deleted. The default value is set to **Detach**. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes """ super().__init__(**kwargs) self.lun = lun @@ -1927,8 +1831,8 @@ def __init__( self.managed_disk = managed_disk self.source_resource = source_resource self.to_be_detached = to_be_detached - self.disk_iops_read_write = None - self.disk_m_bps_read_write = None + self.disk_iops_read_write: Optional[int] = None + self.disk_m_bps_read_write: Optional[int] = None self.detach_option = detach_option self.delete_option = delete_option @@ -1954,7 +1858,7 @@ class DataDiskImage(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.lun = None + self.lun: Optional[int] = None class DataDisksToAttach(_serialization.Model): @@ -1971,16 +1875,16 @@ class DataDisksToAttach(_serialization.Model): :ivar caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The defaulting behavior is: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar delete_option: Specifies whether data disk should be deleted or detached upon VM deletion. Possible values are: **Delete.** If this value is used, the data disk is deleted when VM is deleted. **Detach.** If this value is used, the data disk is retained after VM is deleted. The default value is set to **Detach**. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes :ivar disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed disk. :vartype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :ivar write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :vartype write_accelerator_enabled: bool @@ -2020,16 +1924,16 @@ def __init__( :keyword caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The defaulting behavior is: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :paramtype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :paramtype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :keyword delete_option: Specifies whether data disk should be deleted or detached upon VM deletion. Possible values are: **Delete.** If this value is used, the data disk is deleted when VM is deleted. **Detach.** If this value is used, the data disk is retained after VM is deleted. The default value is set to **Detach**. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes :keyword disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed disk. :paramtype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :keyword write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :paramtype write_accelerator_enabled: bool @@ -2052,7 +1956,7 @@ class DataDisksToDetach(_serialization.Model): :vartype disk_id: str :ivar detach_option: Supported options available for Detach of a disk from a VM. Refer to DetachOption object reference for more details. "ForceDetach" - :vartype detach_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDetachOptionTypes + :vartype detach_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDetachOptionTypes """ _validation = { @@ -2076,7 +1980,7 @@ def __init__( :paramtype disk_id: str :keyword detach_option: Supported options available for Detach of a disk from a VM. Refer to DetachOption object reference for more details. "ForceDetach" - :paramtype detach_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDetachOptionTypes + :paramtype detach_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDetachOptionTypes """ super().__init__(**kwargs) self.disk_id = disk_id @@ -2102,7 +2006,7 @@ class DedicatedHost(Resource): :vartype tags: dict[str, str] :ivar sku: SKU of the dedicated host for Hardware Generation and VM family. Only name is required to be set. List Microsoft.Compute SKUs for a list of possible values. Required. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :ivar platform_fault_domain: Fault domain of the dedicated host within a dedicated host group. :vartype platform_fault_domain: int :ivar auto_replace_on_failure: Specifies whether the dedicated host should be replaced @@ -2112,18 +2016,18 @@ class DedicatedHost(Resource): not change throughout the lifetime of the host. :vartype host_id: str :ivar virtual_machines: A list of references to all virtual machines in the Dedicated Host. - :vartype virtual_machines: list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + :vartype virtual_machines: list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] :ivar license_type: Specifies the software license type that will be applied to the VMs deployed on the dedicated host. Possible values are: **None,** **Windows_Server_Hybrid,** **Windows_Server_Perpetual.** The default value is: **None.**. Known values are: "None", "Windows_Server_Hybrid", and "Windows_Server_Perpetual". - :vartype license_type: str or ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostLicenseTypes + :vartype license_type: str or ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostLicenseTypes :ivar provisioning_time: The date when the host was first provisioned. :vartype provisioning_time: ~datetime.datetime :ivar provisioning_state: The provisioning state, which only appears in the response. :vartype provisioning_state: str :ivar instance_view: The dedicated host instance view. - :vartype instance_view: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostInstanceView + :vartype instance_view: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostInstanceView :ivar time_created: Specifies the time at which the Dedicated Host resource was created. Minimum api-version: 2021-11-01. :vartype time_created: ~datetime.datetime @@ -2180,7 +2084,7 @@ def __init__( :paramtype tags: dict[str, str] :keyword sku: SKU of the dedicated host for Hardware Generation and VM family. Only name is required to be set. List Microsoft.Compute SKUs for a list of possible values. Required. - :paramtype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :paramtype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :keyword platform_fault_domain: Fault domain of the dedicated host within a dedicated host group. :paramtype platform_fault_domain: int @@ -2192,19 +2096,19 @@ def __init__( **Windows_Server_Perpetual.** The default value is: **None.**. Known values are: "None", "Windows_Server_Hybrid", and "Windows_Server_Perpetual". :paramtype license_type: str or - ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostLicenseTypes + ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostLicenseTypes """ super().__init__(location=location, tags=tags, **kwargs) self.sku = sku self.platform_fault_domain = platform_fault_domain self.auto_replace_on_failure = auto_replace_on_failure - self.host_id = None - self.virtual_machines = None + self.host_id: Optional[str] = None + self.virtual_machines: Optional[List["_models.SubResourceReadOnly"]] = None self.license_type = license_type - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None - self.time_created = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.DedicatedHostInstanceView"] = None + self.time_created: Optional[datetime.datetime] = None class DedicatedHostAllocatableVM(_serialization.Model): @@ -2241,7 +2145,7 @@ class DedicatedHostAvailableCapacity(_serialization.Model): :ivar allocatable_v_ms: The unutilized capacity of the dedicated host represented in terms of each VM size that is allowed to be deployed to the dedicated host. :vartype allocatable_v_ms: - list[~azure.mgmt.compute.v2024_11_01.models.DedicatedHostAllocatableVM] + list[~azure.mgmt.compute.v2024_07_01.models.DedicatedHostAllocatableVM] """ _attribute_map = { @@ -2255,7 +2159,7 @@ def __init__( :keyword allocatable_v_ms: The unutilized capacity of the dedicated host represented in terms of each VM size that is allowed to be deployed to the dedicated host. :paramtype allocatable_v_ms: - list[~azure.mgmt.compute.v2024_11_01.models.DedicatedHostAllocatableVM] + list[~azure.mgmt.compute.v2024_07_01.models.DedicatedHostAllocatableVM] """ super().__init__(**kwargs) self.allocatable_v_ms = allocatable_v_ms @@ -2287,10 +2191,10 @@ class DedicatedHostGroup(Resource): :ivar platform_fault_domain_count: Number of fault domains that the host group can span. :vartype platform_fault_domain_count: int :ivar hosts: A list of references to all dedicated hosts in the dedicated host group. - :vartype hosts: list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + :vartype hosts: list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] :ivar instance_view: The dedicated host group instance view, which has the list of instance view of the dedicated hosts under the dedicated host group. - :vartype instance_view: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroupInstanceView + :vartype instance_view: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroupInstanceView :ivar support_automatic_placement: Specifies whether virtual machines or virtual machine scale sets can be placed automatically on the dedicated host group. Automatic placement means resources are allocated on dedicated hosts, that are chosen by Azure, under the dedicated host @@ -2299,7 +2203,7 @@ class DedicatedHostGroup(Resource): :ivar additional_capabilities: Enables or disables a capability on the dedicated host group. Minimum api-version: 2022-03-01. :vartype additional_capabilities: - ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroupPropertiesAdditionalCapabilities + ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroupPropertiesAdditionalCapabilities """ _validation = { @@ -2359,13 +2263,13 @@ def __init__( :keyword additional_capabilities: Enables or disables a capability on the dedicated host group. Minimum api-version: 2022-03-01. :paramtype additional_capabilities: - ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroupPropertiesAdditionalCapabilities + ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroupPropertiesAdditionalCapabilities """ super().__init__(location=location, tags=tags, **kwargs) self.zones = zones self.platform_fault_domain_count = platform_fault_domain_count - self.hosts = None - self.instance_view = None + self.hosts: Optional[List["_models.SubResourceReadOnly"]] = None + self.instance_view: Optional["_models.DedicatedHostGroupInstanceView"] = None self.support_automatic_placement = support_automatic_placement self.additional_capabilities = additional_capabilities @@ -2374,7 +2278,7 @@ class DedicatedHostGroupInstanceView(_serialization.Model): """DedicatedHostGroupInstanceView. :ivar hosts: List of instance view of the dedicated hosts under the dedicated host group. - :vartype hosts: list[~azure.mgmt.compute.v2024_11_01.models.DedicatedHostInstanceViewWithName] + :vartype hosts: list[~azure.mgmt.compute.v2024_07_01.models.DedicatedHostInstanceViewWithName] """ _attribute_map = { @@ -2387,7 +2291,7 @@ def __init__( """ :keyword hosts: List of instance view of the dedicated hosts under the dedicated host group. :paramtype hosts: - list[~azure.mgmt.compute.v2024_11_01.models.DedicatedHostInstanceViewWithName] + list[~azure.mgmt.compute.v2024_07_01.models.DedicatedHostInstanceViewWithName] """ super().__init__(**kwargs) self.hosts = hosts @@ -2399,7 +2303,7 @@ class DedicatedHostGroupListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of dedicated host groups. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup] :ivar next_link: The URI to fetch the next page of Dedicated Host Groups. Call ListNext() with this URI to fetch the next page of Dedicated Host Groups. :vartype next_link: str @@ -2419,7 +2323,7 @@ def __init__( ) -> None: """ :keyword value: The list of dedicated host groups. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup] :keyword next_link: The URI to fetch the next page of Dedicated Host Groups. Call ListNext() with this URI to fetch the next page of Dedicated Host Groups. :paramtype next_link: str @@ -2476,10 +2380,10 @@ class DedicatedHostGroupUpdate(UpdateResource): :ivar platform_fault_domain_count: Number of fault domains that the host group can span. :vartype platform_fault_domain_count: int :ivar hosts: A list of references to all dedicated hosts in the dedicated host group. - :vartype hosts: list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + :vartype hosts: list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] :ivar instance_view: The dedicated host group instance view, which has the list of instance view of the dedicated hosts under the dedicated host group. - :vartype instance_view: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroupInstanceView + :vartype instance_view: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroupInstanceView :ivar support_automatic_placement: Specifies whether virtual machines or virtual machine scale sets can be placed automatically on the dedicated host group. Automatic placement means resources are allocated on dedicated hosts, that are chosen by Azure, under the dedicated host @@ -2488,7 +2392,7 @@ class DedicatedHostGroupUpdate(UpdateResource): :ivar additional_capabilities: Enables or disables a capability on the dedicated host group. Minimum api-version: 2022-03-01. :vartype additional_capabilities: - ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroupPropertiesAdditionalCapabilities + ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroupPropertiesAdditionalCapabilities """ _validation = { @@ -2537,13 +2441,13 @@ def __init__( :keyword additional_capabilities: Enables or disables a capability on the dedicated host group. Minimum api-version: 2022-03-01. :paramtype additional_capabilities: - ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroupPropertiesAdditionalCapabilities + ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroupPropertiesAdditionalCapabilities """ super().__init__(tags=tags, **kwargs) self.zones = zones self.platform_fault_domain_count = platform_fault_domain_count - self.hosts = None - self.instance_view = None + self.hosts: Optional[List["_models.SubResourceReadOnly"]] = None + self.instance_view: Optional["_models.DedicatedHostGroupInstanceView"] = None self.support_automatic_placement = support_automatic_placement self.additional_capabilities = additional_capabilities @@ -2558,9 +2462,9 @@ class DedicatedHostInstanceView(_serialization.Model): :vartype asset_id: str :ivar available_capacity: Unutilized capacity of the dedicated host. :vartype available_capacity: - ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostAvailableCapacity + ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostAvailableCapacity :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ _validation = { @@ -2583,12 +2487,12 @@ def __init__( """ :keyword available_capacity: Unutilized capacity of the dedicated host. :paramtype available_capacity: - ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostAvailableCapacity + ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostAvailableCapacity :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.asset_id = None + self.asset_id: Optional[str] = None self.available_capacity = available_capacity self.statuses = statuses @@ -2604,9 +2508,9 @@ class DedicatedHostInstanceViewWithName(DedicatedHostInstanceView): :vartype asset_id: str :ivar available_capacity: Unutilized capacity of the dedicated host. :vartype available_capacity: - ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostAvailableCapacity + ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostAvailableCapacity :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :ivar name: The name of the dedicated host. :vartype name: str """ @@ -2633,12 +2537,12 @@ def __init__( """ :keyword available_capacity: Unutilized capacity of the dedicated host. :paramtype available_capacity: - ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostAvailableCapacity + ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostAvailableCapacity :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(available_capacity=available_capacity, statuses=statuses, **kwargs) - self.name = None + self.name: Optional[str] = None class DedicatedHostListResult(_serialization.Model): @@ -2647,7 +2551,7 @@ class DedicatedHostListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of dedicated hosts. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :ivar next_link: The URI to fetch the next page of dedicated hosts. Call ListNext() with this URI to fetch the next page of dedicated hosts. :vartype next_link: str @@ -2665,7 +2569,7 @@ class DedicatedHostListResult(_serialization.Model): def __init__(self, *, value: List["_models.DedicatedHost"], next_link: Optional[str] = None, **kwargs: Any) -> None: """ :keyword value: The list of dedicated hosts. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :keyword next_link: The URI to fetch the next page of dedicated hosts. Call ListNext() with this URI to fetch the next page of dedicated hosts. :paramtype next_link: str @@ -2706,7 +2610,7 @@ class DedicatedHostUpdate(UpdateResource): :ivar sku: [List all available dedicated host sizes for resizing] (https://docs.microsoft.com/rest/api/compute/dedicated-hosts/listavailablesizes). Resizing can be only used to scale up DedicatedHost. Only name is required to be set. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :ivar platform_fault_domain: Fault domain of the dedicated host within a dedicated host group. :vartype platform_fault_domain: int :ivar auto_replace_on_failure: Specifies whether the dedicated host should be replaced @@ -2716,18 +2620,18 @@ class DedicatedHostUpdate(UpdateResource): not change throughout the lifetime of the host. :vartype host_id: str :ivar virtual_machines: A list of references to all virtual machines in the Dedicated Host. - :vartype virtual_machines: list[~azure.mgmt.compute.v2024_11_01.models.SubResourceReadOnly] + :vartype virtual_machines: list[~azure.mgmt.compute.v2024_07_01.models.SubResourceReadOnly] :ivar license_type: Specifies the software license type that will be applied to the VMs deployed on the dedicated host. Possible values are: **None,** **Windows_Server_Hybrid,** **Windows_Server_Perpetual.** The default value is: **None.**. Known values are: "None", "Windows_Server_Hybrid", and "Windows_Server_Perpetual". - :vartype license_type: str or ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostLicenseTypes + :vartype license_type: str or ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostLicenseTypes :ivar provisioning_time: The date when the host was first provisioned. :vartype provisioning_time: ~datetime.datetime :ivar provisioning_state: The provisioning state, which only appears in the response. :vartype provisioning_state: str :ivar instance_view: The dedicated host instance view. - :vartype instance_view: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostInstanceView + :vartype instance_view: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostInstanceView :ivar time_created: Specifies the time at which the Dedicated Host resource was created. Minimum api-version: 2021-11-01. :vartype time_created: ~datetime.datetime @@ -2773,7 +2677,7 @@ def __init__( :keyword sku: [List all available dedicated host sizes for resizing] (https://docs.microsoft.com/rest/api/compute/dedicated-hosts/listavailablesizes). Resizing can be only used to scale up DedicatedHost. Only name is required to be set. - :paramtype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :paramtype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :keyword platform_fault_domain: Fault domain of the dedicated host within a dedicated host group. :paramtype platform_fault_domain: int @@ -2785,52 +2689,19 @@ def __init__( **Windows_Server_Perpetual.** The default value is: **None.**. Known values are: "None", "Windows_Server_Hybrid", and "Windows_Server_Perpetual". :paramtype license_type: str or - ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostLicenseTypes + ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostLicenseTypes """ super().__init__(tags=tags, **kwargs) self.sku = sku self.platform_fault_domain = platform_fault_domain self.auto_replace_on_failure = auto_replace_on_failure - self.host_id = None - self.virtual_machines = None + self.host_id: Optional[str] = None + self.virtual_machines: Optional[List["_models.SubResourceReadOnly"]] = None self.license_type = license_type - self.provisioning_time = None - self.provisioning_state = None - self.instance_view = None - self.time_created = None - - -class DefaultVirtualMachineScaleSetInfo(_serialization.Model): - """Indicates the target Virtual Machine ScaleSet properties upon triggering a seamless migration - without downtime of the VMs via the ConvertToVirtualMachineScaleSet API. - - Variables are only populated by the server, and will be ignored when sending a request. - - :ivar constrained_maximum_capacity: Indicates if the the maximum capacity of the default - migrated Virtual Machine Scale Set after its migration will be constrained to a limited number - of VMs. - :vartype constrained_maximum_capacity: bool - :ivar default_virtual_machine_scale_set: The default Virtual Machine ScaleSet Uri that the - Availability Set will be moved to upon triggering a seamless migration via the - ConvertToVirtualMachineScaleSet API. - :vartype default_virtual_machine_scale_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource - """ - - _validation = { - "constrained_maximum_capacity": {"readonly": True}, - "default_virtual_machine_scale_set": {"readonly": True}, - } - - _attribute_map = { - "constrained_maximum_capacity": {"key": "constrainedMaximumCapacity", "type": "bool"}, - "default_virtual_machine_scale_set": {"key": "defaultVirtualMachineScaleSet", "type": "SubResource"}, - } - - def __init__(self, **kwargs: Any) -> None: - """ """ - super().__init__(**kwargs) - self.constrained_maximum_capacity = None - self.default_virtual_machine_scale_set = None + self.provisioning_time: Optional[datetime.datetime] = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.DedicatedHostInstanceView"] = None + self.time_created: Optional[datetime.datetime] = None class DiagnosticsProfile(_serialization.Model): @@ -2841,7 +2712,7 @@ class DiagnosticsProfile(_serialization.Model): specified then ensure that the storage account is in the same region and subscription as the VM. You can easily view the output of your console log. Azure also enables you to see a screenshot of the VM from the hypervisor. - :vartype boot_diagnostics: ~azure.mgmt.compute.v2024_11_01.models.BootDiagnostics + :vartype boot_diagnostics: ~azure.mgmt.compute.v2024_07_01.models.BootDiagnostics """ _attribute_map = { @@ -2855,7 +2726,7 @@ def __init__(self, *, boot_diagnostics: Optional["_models.BootDiagnostics"] = No specified then ensure that the storage account is in the same region and subscription as the VM. You can easily view the output of your console log. Azure also enables you to see a screenshot of the VM from the hypervisor. - :paramtype boot_diagnostics: ~azure.mgmt.compute.v2024_11_01.models.BootDiagnostics + :paramtype boot_diagnostics: ~azure.mgmt.compute.v2024_07_01.models.BootDiagnostics """ super().__init__(**kwargs) self.boot_diagnostics = boot_diagnostics @@ -2866,7 +2737,7 @@ class DiffDiskSettings(_serialization.Model): disk. **Note:** The ephemeral disk settings can only be specified for managed disk. :ivar option: Specifies the ephemeral disk settings for operating system disk. "Local" - :vartype option: str or ~azure.mgmt.compute.v2024_11_01.models.DiffDiskOptions + :vartype option: str or ~azure.mgmt.compute.v2024_07_01.models.DiffDiskOptions :ivar placement: Specifies the ephemeral disk placement for operating system disk. Possible values are: **CacheDisk,** **ResourceDisk,** **NvmeDisk.** The defaulting behavior is: **CacheDisk** if one is configured for the VM size otherwise **ResourceDisk** or **NvmeDisk** @@ -2875,7 +2746,7 @@ class DiffDiskSettings(_serialization.Model): https://docs.microsoft.com/azure/virtual-machines/linux/sizes to check which VM sizes exposes a cache disk. Minimum api-version for NvmeDisk: 2024-03-01. Known values are: "CacheDisk", "ResourceDisk", and "NvmeDisk". - :vartype placement: str or ~azure.mgmt.compute.v2024_11_01.models.DiffDiskPlacement + :vartype placement: str or ~azure.mgmt.compute.v2024_07_01.models.DiffDiskPlacement """ _attribute_map = { @@ -2892,7 +2763,7 @@ def __init__( ) -> None: """ :keyword option: Specifies the ephemeral disk settings for operating system disk. "Local" - :paramtype option: str or ~azure.mgmt.compute.v2024_11_01.models.DiffDiskOptions + :paramtype option: str or ~azure.mgmt.compute.v2024_07_01.models.DiffDiskOptions :keyword placement: Specifies the ephemeral disk placement for operating system disk. Possible values are: **CacheDisk,** **ResourceDisk,** **NvmeDisk.** The defaulting behavior is: **CacheDisk** if one is configured for the VM size otherwise **ResourceDisk** or **NvmeDisk** @@ -2901,7 +2772,7 @@ def __init__( https://docs.microsoft.com/azure/virtual-machines/linux/sizes to check which VM sizes exposes a cache disk. Minimum api-version for NvmeDisk: 2024-03-01. Known values are: "CacheDisk", "ResourceDisk", and "NvmeDisk". - :paramtype placement: str or ~azure.mgmt.compute.v2024_11_01.models.DiffDiskPlacement + :paramtype placement: str or ~azure.mgmt.compute.v2024_07_01.models.DiffDiskPlacement """ super().__init__(**kwargs) self.option = option @@ -2913,7 +2784,7 @@ class DisallowedConfiguration(_serialization.Model): :ivar vm_disk_type: VM disk types which are disallowed. Known values are: "None" and "Unmanaged". - :vartype vm_disk_type: str or ~azure.mgmt.compute.v2024_11_01.models.VmDiskTypes + :vartype vm_disk_type: str or ~azure.mgmt.compute.v2024_07_01.models.VmDiskTypes """ _attribute_map = { @@ -2924,7 +2795,7 @@ def __init__(self, *, vm_disk_type: Optional[Union[str, "_models.VmDiskTypes"]] """ :keyword vm_disk_type: VM disk types which are disallowed. Known values are: "None" and "Unmanaged". - :paramtype vm_disk_type: str or ~azure.mgmt.compute.v2024_11_01.models.VmDiskTypes + :paramtype vm_disk_type: str or ~azure.mgmt.compute.v2024_07_01.models.VmDiskTypes """ super().__init__(**kwargs) self.vm_disk_type = vm_disk_type @@ -2965,9 +2836,9 @@ class DiskEncryptionSettings(_serialization.Model): :ivar disk_encryption_key: Specifies the location of the disk encryption key, which is a Key Vault Secret. - :vartype disk_encryption_key: ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + :vartype disk_encryption_key: ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference :ivar key_encryption_key: Specifies the location of the key encryption key in Key Vault. - :vartype key_encryption_key: ~azure.mgmt.compute.v2024_11_01.models.KeyVaultKeyReference + :vartype key_encryption_key: ~azure.mgmt.compute.v2024_07_01.models.KeyVaultKeyReference :ivar enabled: Specifies whether disk encryption should be enabled on the virtual machine. :vartype enabled: bool """ @@ -2989,9 +2860,9 @@ def __init__( """ :keyword disk_encryption_key: Specifies the location of the disk encryption key, which is a Key Vault Secret. - :paramtype disk_encryption_key: ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + :paramtype disk_encryption_key: ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference :keyword key_encryption_key: Specifies the location of the key encryption key in Key Vault. - :paramtype key_encryption_key: ~azure.mgmt.compute.v2024_11_01.models.KeyVaultKeyReference + :paramtype key_encryption_key: ~azure.mgmt.compute.v2024_07_01.models.KeyVaultKeyReference :keyword enabled: Specifies whether disk encryption should be enabled on the virtual machine. :paramtype enabled: bool """ @@ -3009,9 +2880,9 @@ class DiskInstanceView(_serialization.Model): :ivar encryption_settings: Specifies the encryption settings for the OS Disk. :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :vartype encryption_settings: - list[~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSettings] + list[~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSettings] :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ _attribute_map = { @@ -3034,9 +2905,9 @@ def __init__( :keyword encryption_settings: Specifies the encryption settings for the OS Disk. :code:`
    `\\ :code:`
    ` Minimum api-version: 2015-06-15. :paramtype encryption_settings: - list[~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSettings] + list[~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSettings] :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) self.name = name @@ -3064,7 +2935,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class DiskRestorePointAttributes(SubResourceReadOnly): @@ -3076,9 +2947,9 @@ class DiskRestorePointAttributes(SubResourceReadOnly): :vartype id: str :ivar encryption: Encryption at rest settings for disk restore point. It is an optional property that can be specified in the input while creating a restore point. - :vartype encryption: ~azure.mgmt.compute.v2024_11_01.models.RestorePointEncryption + :vartype encryption: ~azure.mgmt.compute.v2024_07_01.models.RestorePointEncryption :ivar source_disk_restore_point: Resource Id of the source disk restore point. - :vartype source_disk_restore_point: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + :vartype source_disk_restore_point: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference """ _validation = { @@ -3101,9 +2972,9 @@ def __init__( """ :keyword encryption: Encryption at rest settings for disk restore point. It is an optional property that can be specified in the input while creating a restore point. - :paramtype encryption: ~azure.mgmt.compute.v2024_11_01.models.RestorePointEncryption + :paramtype encryption: ~azure.mgmt.compute.v2024_07_01.models.RestorePointEncryption :keyword source_disk_restore_point: Resource Id of the source disk restore point. - :paramtype source_disk_restore_point: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + :paramtype source_disk_restore_point: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference """ super().__init__(**kwargs) self.encryption = encryption @@ -3117,7 +2988,7 @@ class DiskRestorePointInstanceView(_serialization.Model): :vartype id: str :ivar replication_status: The disk restore point replication status information. :vartype replication_status: - ~azure.mgmt.compute.v2024_11_01.models.DiskRestorePointReplicationStatus + ~azure.mgmt.compute.v2024_07_01.models.DiskRestorePointReplicationStatus """ _attribute_map = { @@ -3137,7 +3008,7 @@ def __init__( :paramtype id: str :keyword replication_status: The disk restore point replication status information. :paramtype replication_status: - ~azure.mgmt.compute.v2024_11_01.models.DiskRestorePointReplicationStatus + ~azure.mgmt.compute.v2024_07_01.models.DiskRestorePointReplicationStatus """ super().__init__(**kwargs) self.id = id @@ -3148,7 +3019,7 @@ class DiskRestorePointReplicationStatus(_serialization.Model): """The instance view of a disk restore point. :ivar status: The resource status information. - :vartype status: ~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus + :vartype status: ~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus :ivar completion_percent: Replication completion percentage. :vartype completion_percent: int """ @@ -3167,7 +3038,7 @@ def __init__( ) -> None: """ :keyword status: The resource status information. - :paramtype status: ~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus + :paramtype status: ~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus :keyword completion_percent: Replication completion percentage. :paramtype completion_percent: int """ @@ -3226,7 +3097,7 @@ class ExtendedLocation(_serialization.Model): :ivar name: The name of the extended location. :vartype name: str :ivar type: The type of the extended location. "EdgeZone" - :vartype type: str or ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocationTypes + :vartype type: str or ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocationTypes """ _attribute_map = { @@ -3245,7 +3116,7 @@ def __init__( :keyword name: The name of the extended location. :paramtype name: str :keyword type: The type of the extended location. "EdgeZone" - :paramtype type: str or ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocationTypes + :paramtype type: str or ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocationTypes """ super().__init__(**kwargs) self.name = name @@ -3301,12 +3172,12 @@ class HardwareProfile(_serialization.Model): "Standard_NC12s_v3", "Standard_NC24s_v3", "Standard_NC24rs_v3", "Standard_ND6s", "Standard_ND12s", "Standard_ND24s", "Standard_ND24rs", "Standard_NV6", "Standard_NV12", and "Standard_NV24". - :vartype vm_size: str or ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSizeTypes + :vartype vm_size: str or ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSizeTypes :ivar vm_size_properties: Specifies the properties for customizing the size of the virtual machine. Minimum api-version: 2021-07-01. This feature is still in preview mode and is not supported for VirtualMachineScaleSet. Please follow the instructions in `VM Customization `_ for more details. - :vartype vm_size_properties: ~azure.mgmt.compute.v2024_11_01.models.VMSizeProperties + :vartype vm_size_properties: ~azure.mgmt.compute.v2024_07_01.models.VMSizeProperties """ _attribute_map = { @@ -3368,62 +3239,18 @@ def __init__( "Standard_NC12s_v3", "Standard_NC24s_v3", "Standard_NC24rs_v3", "Standard_ND6s", "Standard_ND12s", "Standard_ND24s", "Standard_ND24rs", "Standard_NV6", "Standard_NV12", and "Standard_NV24". - :paramtype vm_size: str or ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSizeTypes + :paramtype vm_size: str or ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSizeTypes :keyword vm_size_properties: Specifies the properties for customizing the size of the virtual machine. Minimum api-version: 2021-07-01. This feature is still in preview mode and is not supported for VirtualMachineScaleSet. Please follow the instructions in `VM Customization `_ for more details. - :paramtype vm_size_properties: ~azure.mgmt.compute.v2024_11_01.models.VMSizeProperties + :paramtype vm_size_properties: ~azure.mgmt.compute.v2024_07_01.models.VMSizeProperties """ super().__init__(**kwargs) self.vm_size = vm_size self.vm_size_properties = vm_size_properties -class HostEndpointSettings(_serialization.Model): - """Specifies particular host endpoint settings. - - :ivar mode: Specifies the execution mode. In Audit mode, the system acts as if it is enforcing - the access control policy, including emitting access denial entries in the logs but it does not - actually deny any requests to host endpoints. In Enforce mode, the system will enforce the - access control and it is the recommended mode of operation. Known values are: "Audit", - "Enforce", and "Disabled". - :vartype mode: str or ~azure.mgmt.compute.v2024_11_01.models.Modes - :ivar in_vm_access_control_profile_reference_id: Specifies the InVMAccessControlProfileVersion - resource id in the format of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/inVMAccessControlProfiles/{profile}/versions/{version}. # pylint: disable=line-too-long - :vartype in_vm_access_control_profile_reference_id: str - """ - - _attribute_map = { - "mode": {"key": "mode", "type": "str"}, - "in_vm_access_control_profile_reference_id": {"key": "inVMAccessControlProfileReferenceId", "type": "str"}, - } - - def __init__( - self, - *, - mode: Optional[Union[str, "_models.Modes"]] = None, - in_vm_access_control_profile_reference_id: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword mode: Specifies the execution mode. In Audit mode, the system acts as if it is - enforcing the access control policy, including emitting access denial entries in the logs but - it does not actually deny any requests to host endpoints. In Enforce mode, the system will - enforce the access control and it is the recommended mode of operation. Known values are: - "Audit", "Enforce", and "Disabled". - :paramtype mode: str or ~azure.mgmt.compute.v2024_11_01.models.Modes - :keyword in_vm_access_control_profile_reference_id: Specifies the - InVMAccessControlProfileVersion resource id in the format of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/inVMAccessControlProfiles/{profile}/versions/{version}. # pylint: disable=line-too-long - :paramtype in_vm_access_control_profile_reference_id: str - """ - super().__init__(**kwargs) - self.mode = mode - self.in_vm_access_control_profile_reference_id = in_vm_access_control_profile_reference_id - - class Image(Resource): """The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive @@ -3444,11 +3271,11 @@ class Image(Resource): :ivar tags: Resource tags. :vartype tags: dict[str, str] :ivar extended_location: The extended location of the Image. - :vartype extended_location: ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocation + :vartype extended_location: ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocation :ivar source_virtual_machine: The source virtual machine from which Image is created. - :vartype source_virtual_machine: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype source_virtual_machine: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar storage_profile: Specifies the storage settings for the virtual machine disks. - :vartype storage_profile: ~azure.mgmt.compute.v2024_11_01.models.ImageStorageProfile + :vartype storage_profile: ~azure.mgmt.compute.v2024_07_01.models.ImageStorageProfile :ivar provisioning_state: The provisioning state. :vartype provisioning_state: str :ivar hyper_v_generation: Specifies the HyperVGenerationType of the VirtualMachine created from @@ -3457,7 +3284,7 @@ class Image(Resource): user to specify the property if we cannot deduce it from the source managed resource. Known values are: "V1" and "V2". :vartype hyper_v_generation: str or - ~azure.mgmt.compute.v2024_11_01.models.HyperVGenerationTypes + ~azure.mgmt.compute.v2024_07_01.models.HyperVGenerationTypes """ _validation = { @@ -3498,24 +3325,24 @@ def __init__( :keyword tags: Resource tags. :paramtype tags: dict[str, str] :keyword extended_location: The extended location of the Image. - :paramtype extended_location: ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocation + :paramtype extended_location: ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocation :keyword source_virtual_machine: The source virtual machine from which Image is created. - :paramtype source_virtual_machine: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype source_virtual_machine: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword storage_profile: Specifies the storage settings for the virtual machine disks. - :paramtype storage_profile: ~azure.mgmt.compute.v2024_11_01.models.ImageStorageProfile + :paramtype storage_profile: ~azure.mgmt.compute.v2024_07_01.models.ImageStorageProfile :keyword hyper_v_generation: Specifies the HyperVGenerationType of the VirtualMachine created from the image. From API Version 2019-03-01 if the image source is a blob, then we need the user to specify the value, if the source is managed resource like disk or snapshot, we may require the user to specify the property if we cannot deduce it from the source managed resource. Known values are: "V1" and "V2". :paramtype hyper_v_generation: str or - ~azure.mgmt.compute.v2024_11_01.models.HyperVGenerationTypes + ~azure.mgmt.compute.v2024_07_01.models.HyperVGenerationTypes """ super().__init__(location=location, tags=tags, **kwargs) self.extended_location = extended_location self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.hyper_v_generation = hyper_v_generation @@ -3523,15 +3350,15 @@ class ImageDisk(_serialization.Model): """Describes a image disk. :ivar snapshot: The snapshot. - :vartype snapshot: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype snapshot: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar managed_disk: The managedDisk. - :vartype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar blob_uri: The Virtual Hard Disk. :vartype blob_uri: str :ivar caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The default values are: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. This value cannot be larger than 1023 GB. @@ -3541,11 +3368,11 @@ class ImageDisk(_serialization.Model): are: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS", and "PremiumV2_LRS". :vartype storage_account_type: str or - ~azure.mgmt.compute.v2024_11_01.models.StorageAccountTypes + ~azure.mgmt.compute.v2024_07_01.models.StorageAccountTypes :ivar disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed image disk. :vartype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters """ _attribute_map = { @@ -3572,15 +3399,15 @@ def __init__( ) -> None: """ :keyword snapshot: The snapshot. - :paramtype snapshot: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype snapshot: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword managed_disk: The managedDisk. - :paramtype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword blob_uri: The Virtual Hard Disk. :paramtype blob_uri: str :keyword caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The default values are: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :paramtype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :paramtype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :keyword disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. This value cannot be larger than 1023 GB. @@ -3590,11 +3417,11 @@ def __init__( are: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS", and "PremiumV2_LRS". :paramtype storage_account_type: str or - ~azure.mgmt.compute.v2024_11_01.models.StorageAccountTypes + ~azure.mgmt.compute.v2024_07_01.models.StorageAccountTypes :keyword disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed image disk. :paramtype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters """ super().__init__(**kwargs) self.snapshot = snapshot @@ -3612,15 +3439,15 @@ class ImageDataDisk(ImageDisk): All required parameters must be populated in order to send to server. :ivar snapshot: The snapshot. - :vartype snapshot: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype snapshot: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar managed_disk: The managedDisk. - :vartype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar blob_uri: The Virtual Hard Disk. :vartype blob_uri: str :ivar caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The default values are: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. This value cannot be larger than 1023 GB. @@ -3630,11 +3457,11 @@ class ImageDataDisk(ImageDisk): are: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS", and "PremiumV2_LRS". :vartype storage_account_type: str or - ~azure.mgmt.compute.v2024_11_01.models.StorageAccountTypes + ~azure.mgmt.compute.v2024_07_01.models.StorageAccountTypes :ivar disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed image disk. :vartype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :ivar lun: Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM. Required. @@ -3671,15 +3498,15 @@ def __init__( ) -> None: """ :keyword snapshot: The snapshot. - :paramtype snapshot: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype snapshot: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword managed_disk: The managedDisk. - :paramtype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword blob_uri: The Virtual Hard Disk. :paramtype blob_uri: str :keyword caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The default values are: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :paramtype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :paramtype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :keyword disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. This value cannot be larger than 1023 GB. @@ -3689,11 +3516,11 @@ def __init__( are: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS", and "PremiumV2_LRS". :paramtype storage_account_type: str or - ~azure.mgmt.compute.v2024_11_01.models.StorageAccountTypes + ~azure.mgmt.compute.v2024_07_01.models.StorageAccountTypes :keyword disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed image disk. :paramtype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :keyword lun: Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM. Required. @@ -3717,13 +3544,13 @@ class ImageDeprecationStatus(_serialization.Model): :ivar image_state: Describes the state of the image. Known values are: "Active", "ScheduledForDeprecation", and "Deprecated". - :vartype image_state: str or ~azure.mgmt.compute.v2024_11_01.models.ImageState + :vartype image_state: str or ~azure.mgmt.compute.v2024_07_01.models.ImageState :ivar scheduled_deprecation_time: The time, in future, at which this image will be marked as deprecated. This scheduled time is chosen by the Publisher. :vartype scheduled_deprecation_time: ~datetime.datetime :ivar alternative_option: Describes the alternative option specified by the Publisher for this image when this image is deprecated. - :vartype alternative_option: ~azure.mgmt.compute.v2024_11_01.models.AlternativeOption + :vartype alternative_option: ~azure.mgmt.compute.v2024_07_01.models.AlternativeOption """ _attribute_map = { @@ -3743,13 +3570,13 @@ def __init__( """ :keyword image_state: Describes the state of the image. Known values are: "Active", "ScheduledForDeprecation", and "Deprecated". - :paramtype image_state: str or ~azure.mgmt.compute.v2024_11_01.models.ImageState + :paramtype image_state: str or ~azure.mgmt.compute.v2024_07_01.models.ImageState :keyword scheduled_deprecation_time: The time, in future, at which this image will be marked as deprecated. This scheduled time is chosen by the Publisher. :paramtype scheduled_deprecation_time: ~datetime.datetime :keyword alternative_option: Describes the alternative option specified by the Publisher for this image when this image is deprecated. - :paramtype alternative_option: ~azure.mgmt.compute.v2024_11_01.models.AlternativeOption + :paramtype alternative_option: ~azure.mgmt.compute.v2024_07_01.models.AlternativeOption """ super().__init__(**kwargs) self.image_state = image_state @@ -3763,7 +3590,7 @@ class ImageListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of Images. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.Image] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.Image] :ivar next_link: The uri to fetch the next page of Images. Call ListNext() with this to fetch the next page of Images. :vartype next_link: str @@ -3781,7 +3608,7 @@ class ImageListResult(_serialization.Model): def __init__(self, *, value: List["_models.Image"], next_link: Optional[str] = None, **kwargs: Any) -> None: """ :keyword value: The list of Images. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.Image] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.Image] :keyword next_link: The uri to fetch the next page of Images. Call ListNext() with this to fetch the next page of Images. :paramtype next_link: str @@ -3797,15 +3624,15 @@ class ImageOSDisk(ImageDisk): All required parameters must be populated in order to send to server. :ivar snapshot: The snapshot. - :vartype snapshot: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype snapshot: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar managed_disk: The managedDisk. - :vartype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar blob_uri: The Virtual Hard Disk. :vartype blob_uri: str :ivar caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The default values are: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. This value cannot be larger than 1023 GB. @@ -3815,18 +3642,18 @@ class ImageOSDisk(ImageDisk): are: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS", and "PremiumV2_LRS". :vartype storage_account_type: str or - ~azure.mgmt.compute.v2024_11_01.models.StorageAccountTypes + ~azure.mgmt.compute.v2024_07_01.models.StorageAccountTypes :ivar disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed image disk. :vartype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :ivar os_type: This property allows you to specify the type of the OS that is included in the disk if creating a VM from a custom image. Possible values are: **Windows,** **Linux.**. Required. Known values are: "Windows" and "Linux". - :vartype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :vartype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes :ivar os_state: The OS State. For managed images, use Generalized. Required. Known values are: "Generalized" and "Specialized". - :vartype os_state: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemStateTypes + :vartype os_state: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemStateTypes """ _validation = { @@ -3862,15 +3689,15 @@ def __init__( ) -> None: """ :keyword snapshot: The snapshot. - :paramtype snapshot: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype snapshot: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword managed_disk: The managedDisk. - :paramtype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword blob_uri: The Virtual Hard Disk. :paramtype blob_uri: str :keyword caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The default values are: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :paramtype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :paramtype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :keyword disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. This value cannot be larger than 1023 GB. @@ -3880,18 +3707,18 @@ def __init__( are: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS", and "PremiumV2_LRS". :paramtype storage_account_type: str or - ~azure.mgmt.compute.v2024_11_01.models.StorageAccountTypes + ~azure.mgmt.compute.v2024_07_01.models.StorageAccountTypes :keyword disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed image disk. :paramtype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :keyword os_type: This property allows you to specify the type of the OS that is included in the disk if creating a VM from a custom image. Possible values are: **Windows,** **Linux.**. Required. Known values are: "Windows" and "Linux". - :paramtype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :paramtype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes :keyword os_state: The OS State. For managed images, use Generalized. Required. Known values are: "Generalized" and "Specialized". - :paramtype os_state: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemStateTypes + :paramtype os_state: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemStateTypes """ super().__init__( snapshot=snapshot, @@ -3932,7 +3759,7 @@ class ImageReference(SubResource): time even if a new version becomes available. Please do not use field 'version' for gallery image deployment, gallery image should always use 'id' field for deployment, to use 'latest' version of gallery image, just set - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}' # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}' in the 'id' field without version input. :vartype version: str :ivar exact_version: Specifies in decimal numbers, the version of platform image or marketplace @@ -3991,7 +3818,7 @@ def __init__( after deploy time even if a new version becomes available. Please do not use field 'version' for gallery image deployment, gallery image should always use 'id' field for deployment, to use 'latest' version of gallery image, just set - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}' # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}' in the 'id' field without version input. :paramtype version: str :keyword shared_gallery_image_id: Specified the shared gallery image unique id for vm @@ -4006,7 +3833,7 @@ def __init__( self.offer = offer self.sku = sku self.version = version - self.exact_version = None + self.exact_version: Optional[str] = None self.shared_gallery_image_id = shared_gallery_image_id self.community_gallery_image_id = community_gallery_image_id @@ -4018,12 +3845,12 @@ class ImageStorageProfile(_serialization.Model): machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines `_. - :vartype os_disk: ~azure.mgmt.compute.v2024_11_01.models.ImageOSDisk + :vartype os_disk: ~azure.mgmt.compute.v2024_07_01.models.ImageOSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines `_. - :vartype data_disks: list[~azure.mgmt.compute.v2024_11_01.models.ImageDataDisk] + :vartype data_disks: list[~azure.mgmt.compute.v2024_07_01.models.ImageDataDisk] :ivar zone_resilient: Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). :vartype zone_resilient: bool @@ -4048,12 +3875,12 @@ def __init__( machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines `_. - :paramtype os_disk: ~azure.mgmt.compute.v2024_11_01.models.ImageOSDisk + :paramtype os_disk: ~azure.mgmt.compute.v2024_07_01.models.ImageOSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. :code:`
    `\\ :code:`
    ` For more information about disks, see `About disks and VHDs for Azure virtual machines `_. - :paramtype data_disks: list[~azure.mgmt.compute.v2024_11_01.models.ImageDataDisk] + :paramtype data_disks: list[~azure.mgmt.compute.v2024_07_01.models.ImageDataDisk] :keyword zone_resilient: Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). :paramtype zone_resilient: bool @@ -4072,9 +3899,9 @@ class ImageUpdate(UpdateResource): :ivar tags: Resource tags. :vartype tags: dict[str, str] :ivar source_virtual_machine: The source virtual machine from which Image is created. - :vartype source_virtual_machine: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype source_virtual_machine: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar storage_profile: Specifies the storage settings for the virtual machine disks. - :vartype storage_profile: ~azure.mgmt.compute.v2024_11_01.models.ImageStorageProfile + :vartype storage_profile: ~azure.mgmt.compute.v2024_07_01.models.ImageStorageProfile :ivar provisioning_state: The provisioning state. :vartype provisioning_state: str :ivar hyper_v_generation: Specifies the HyperVGenerationType of the VirtualMachine created from @@ -4083,7 +3910,7 @@ class ImageUpdate(UpdateResource): user to specify the property if we cannot deduce it from the source managed resource. Known values are: "V1" and "V2". :vartype hyper_v_generation: str or - ~azure.mgmt.compute.v2024_11_01.models.HyperVGenerationTypes + ~azure.mgmt.compute.v2024_07_01.models.HyperVGenerationTypes """ _validation = { @@ -4111,21 +3938,21 @@ def __init__( :keyword tags: Resource tags. :paramtype tags: dict[str, str] :keyword source_virtual_machine: The source virtual machine from which Image is created. - :paramtype source_virtual_machine: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype source_virtual_machine: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword storage_profile: Specifies the storage settings for the virtual machine disks. - :paramtype storage_profile: ~azure.mgmt.compute.v2024_11_01.models.ImageStorageProfile + :paramtype storage_profile: ~azure.mgmt.compute.v2024_07_01.models.ImageStorageProfile :keyword hyper_v_generation: Specifies the HyperVGenerationType of the VirtualMachine created from the image. From API Version 2019-03-01 if the image source is a blob, then we need the user to specify the value, if the source is managed resource like disk or snapshot, we may require the user to specify the property if we cannot deduce it from the source managed resource. Known values are: "V1" and "V2". :paramtype hyper_v_generation: str or - ~azure.mgmt.compute.v2024_11_01.models.HyperVGenerationTypes + ~azure.mgmt.compute.v2024_07_01.models.HyperVGenerationTypes """ super().__init__(tags=tags, **kwargs) self.source_virtual_machine = source_virtual_machine self.storage_profile = storage_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.hyper_v_generation = hyper_v_generation @@ -4163,7 +3990,7 @@ class InstanceViewStatus(_serialization.Model): :ivar code: The status code. :vartype code: str :ivar level: The level code. Known values are: "Info", "Warning", and "Error". - :vartype level: str or ~azure.mgmt.compute.v2024_11_01.models.StatusLevelTypes + :vartype level: str or ~azure.mgmt.compute.v2024_07_01.models.StatusLevelTypes :ivar display_status: The short localizable label for the status. :vartype display_status: str :ivar message: The detailed status message, including for alerts and error messages. @@ -4194,7 +4021,7 @@ def __init__( :keyword code: The status code. :paramtype code: str :keyword level: The level code. Known values are: "Info", "Warning", and "Error". - :paramtype level: str or ~azure.mgmt.compute.v2024_11_01.models.StatusLevelTypes + :paramtype level: str or ~azure.mgmt.compute.v2024_07_01.models.StatusLevelTypes :keyword display_status: The short localizable label for the status. :paramtype display_status: str :keyword message: The detailed status message, including for alerts and error messages. @@ -4218,7 +4045,7 @@ class KeyVaultKeyReference(_serialization.Model): :ivar key_url: The URL referencing a key encryption key in Key Vault. Required. :vartype key_url: str :ivar source_vault: The relative URL of the Key Vault containing the key. Required. - :vartype source_vault: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype source_vault: ~azure.mgmt.compute.v2024_07_01.models.SubResource """ _validation = { @@ -4236,7 +4063,7 @@ def __init__(self, *, key_url: str, source_vault: "_models.SubResource", **kwarg :keyword key_url: The URL referencing a key encryption key in Key Vault. Required. :paramtype key_url: str :keyword source_vault: The relative URL of the Key Vault containing the key. Required. - :paramtype source_vault: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype source_vault: ~azure.mgmt.compute.v2024_07_01.models.SubResource """ super().__init__(**kwargs) self.key_url = key_url @@ -4251,7 +4078,7 @@ class KeyVaultSecretReference(_serialization.Model): :ivar secret_url: The URL referencing a secret in a Key Vault. Required. :vartype secret_url: str :ivar source_vault: The relative URL of the Key Vault containing the secret. Required. - :vartype source_vault: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype source_vault: ~azure.mgmt.compute.v2024_07_01.models.SubResource """ _validation = { @@ -4269,7 +4096,7 @@ def __init__(self, *, secret_url: str, source_vault: "_models.SubResource", **kw :keyword secret_url: The URL referencing a secret in a Key Vault. Required. :paramtype secret_url: str :keyword source_vault: The relative URL of the Key Vault containing the secret. Required. - :paramtype source_vault: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype source_vault: ~azure.mgmt.compute.v2024_07_01.models.SubResource """ super().__init__(**kwargs) self.secret_url = secret_url @@ -4285,7 +4112,7 @@ class LastPatchInstallationSummary(_serialization.Model): until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded", or "CompletedWithWarnings.". Known values are: "Unknown", "InProgress", "Failed", "Succeeded", and "CompletedWithWarnings". - :vartype status: str or ~azure.mgmt.compute.v2024_11_01.models.PatchOperationStatus + :vartype status: str or ~azure.mgmt.compute.v2024_07_01.models.PatchOperationStatus :ivar installation_activity_id: The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. :vartype installation_activity_id: str @@ -4311,7 +4138,7 @@ class LastPatchInstallationSummary(_serialization.Model): :vartype last_modified_time: ~datetime.datetime :ivar error: The errors that were encountered during execution of the operation. The details array contains the list of them. - :vartype error: ~azure.mgmt.compute.v2024_11_01.models.ApiError + :vartype error: ~azure.mgmt.compute.v2024_07_01.models.ApiError """ _validation = { @@ -4345,17 +4172,17 @@ class LastPatchInstallationSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.installation_activity_id = None - self.maintenance_window_exceeded = None - self.not_selected_patch_count = None - self.excluded_patch_count = None - self.pending_patch_count = None - self.installed_patch_count = None - self.failed_patch_count = None - self.start_time = None - self.last_modified_time = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.installation_activity_id: Optional[str] = None + self.maintenance_window_exceeded: Optional[bool] = None + self.not_selected_patch_count: Optional[int] = None + self.excluded_patch_count: Optional[int] = None + self.pending_patch_count: Optional[int] = None + self.installed_patch_count: Optional[int] = None + self.failed_patch_count: Optional[int] = None + self.start_time: Optional[datetime.datetime] = None + self.last_modified_time: Optional[datetime.datetime] = None + self.error: Optional["_models.ApiError"] = None class LinuxConfiguration(_serialization.Model): @@ -4367,7 +4194,7 @@ class LinuxConfiguration(_serialization.Model): disabled. :vartype disable_password_authentication: bool :ivar ssh: Specifies the ssh key configuration for a Linux OS. - :vartype ssh: ~azure.mgmt.compute.v2024_11_01.models.SshConfiguration + :vartype ssh: ~azure.mgmt.compute.v2024_07_01.models.SshConfiguration :ivar provision_vm_agent: Indicates whether virtual machine agent should be provisioned on the virtual machine. When this property is not specified in the request body, default behavior is to set it to true. This will ensure that VM Agent is installed on the VM so that extensions can @@ -4375,7 +4202,7 @@ class LinuxConfiguration(_serialization.Model): :vartype provision_vm_agent: bool :ivar patch_settings: [Preview Feature] Specifies settings related to VM Guest Patching on Linux. - :vartype patch_settings: ~azure.mgmt.compute.v2024_11_01.models.LinuxPatchSettings + :vartype patch_settings: ~azure.mgmt.compute.v2024_07_01.models.LinuxPatchSettings :ivar enable_vm_agent_platform_updates: Indicates whether VMAgent Platform Updates is enabled for the Linux virtual machine. Default value is false. :vartype enable_vm_agent_platform_updates: bool @@ -4404,7 +4231,7 @@ def __init__( disabled. :paramtype disable_password_authentication: bool :keyword ssh: Specifies the ssh key configuration for a Linux OS. - :paramtype ssh: ~azure.mgmt.compute.v2024_11_01.models.SshConfiguration + :paramtype ssh: ~azure.mgmt.compute.v2024_07_01.models.SshConfiguration :keyword provision_vm_agent: Indicates whether virtual machine agent should be provisioned on the virtual machine. When this property is not specified in the request body, default behavior is to set it to true. This will ensure that VM Agent is installed on the VM so that extensions @@ -4412,7 +4239,7 @@ def __init__( :paramtype provision_vm_agent: bool :keyword patch_settings: [Preview Feature] Specifies settings related to VM Guest Patching on Linux. - :paramtype patch_settings: ~azure.mgmt.compute.v2024_11_01.models.LinuxPatchSettings + :paramtype patch_settings: ~azure.mgmt.compute.v2024_07_01.models.LinuxPatchSettings :keyword enable_vm_agent_platform_updates: Indicates whether VMAgent Platform Updates is enabled for the Linux virtual machine. Default value is false. :paramtype enable_vm_agent_platform_updates: bool @@ -4431,7 +4258,7 @@ class LinuxParameters(_serialization.Model): :ivar classifications_to_include: The update classifications to select when installing patches for Linux. :vartype classifications_to_include: list[str or - ~azure.mgmt.compute.v2024_11_01.models.VMGuestPatchClassificationLinux] + ~azure.mgmt.compute.v2024_07_01.models.VMGuestPatchClassificationLinux] :ivar package_name_masks_to_include: packages to include in the patch operation. Format: packageName_packageVersion. :vartype package_name_masks_to_include: list[str] @@ -4463,7 +4290,7 @@ def __init__( :keyword classifications_to_include: The update classifications to select when installing patches for Linux. :paramtype classifications_to_include: list[str or - ~azure.mgmt.compute.v2024_11_01.models.VMGuestPatchClassificationLinux] + ~azure.mgmt.compute.v2024_07_01.models.VMGuestPatchClassificationLinux] :keyword package_name_masks_to_include: packages to include in the patch operation. Format: packageName_packageVersion. :paramtype package_name_masks_to_include: list[str] @@ -4491,7 +4318,7 @@ class LinuxPatchSettings(_serialization.Model): />`\\ :code:`
    ` **AutomaticByPlatform** - The virtual machine will be automatically updated by the platform. The property provisionVMAgent must be true. Known values are: "ImageDefault" and "AutomaticByPlatform". - :vartype patch_mode: str or ~azure.mgmt.compute.v2024_11_01.models.LinuxVMGuestPatchMode + :vartype patch_mode: str or ~azure.mgmt.compute.v2024_07_01.models.LinuxVMGuestPatchMode :ivar assessment_mode: Specifies the mode of VM Guest Patch Assessment for the IaaS virtual machine.\\ :code:`
    `\\ :code:`
    ` Possible values are:\\ :code:`
    `\\ :code:`
    ` **ImageDefault** - You control the timing of patch assessments on a virtual machine. @@ -4499,11 +4326,11 @@ class LinuxPatchSettings(_serialization.Model): patch assessments. The property provisionVMAgent must be true. Known values are: "ImageDefault" and "AutomaticByPlatform". :vartype assessment_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.LinuxPatchAssessmentMode + ~azure.mgmt.compute.v2024_07_01.models.LinuxPatchAssessmentMode :ivar automatic_by_platform_settings: Specifies additional settings for patch mode AutomaticByPlatform in VM Guest Patching on Linux. :vartype automatic_by_platform_settings: - ~azure.mgmt.compute.v2024_11_01.models.LinuxVMGuestPatchAutomaticByPlatformSettings + ~azure.mgmt.compute.v2024_07_01.models.LinuxVMGuestPatchAutomaticByPlatformSettings """ _attribute_map = { @@ -4531,7 +4358,7 @@ def __init__( />`\\ :code:`
    ` **AutomaticByPlatform** - The virtual machine will be automatically updated by the platform. The property provisionVMAgent must be true. Known values are: "ImageDefault" and "AutomaticByPlatform". - :paramtype patch_mode: str or ~azure.mgmt.compute.v2024_11_01.models.LinuxVMGuestPatchMode + :paramtype patch_mode: str or ~azure.mgmt.compute.v2024_07_01.models.LinuxVMGuestPatchMode :keyword assessment_mode: Specifies the mode of VM Guest Patch Assessment for the IaaS virtual machine.\\ :code:`
    `\\ :code:`
    ` Possible values are:\\ :code:`
    `\\ :code:`
    ` **ImageDefault** - You control the timing of patch assessments on a virtual machine. @@ -4539,11 +4366,11 @@ def __init__( patch assessments. The property provisionVMAgent must be true. Known values are: "ImageDefault" and "AutomaticByPlatform". :paramtype assessment_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.LinuxPatchAssessmentMode + ~azure.mgmt.compute.v2024_07_01.models.LinuxPatchAssessmentMode :keyword automatic_by_platform_settings: Specifies additional settings for patch mode AutomaticByPlatform in VM Guest Patching on Linux. :paramtype automatic_by_platform_settings: - ~azure.mgmt.compute.v2024_11_01.models.LinuxVMGuestPatchAutomaticByPlatformSettings + ~azure.mgmt.compute.v2024_07_01.models.LinuxVMGuestPatchAutomaticByPlatformSettings """ super().__init__(**kwargs) self.patch_mode = patch_mode @@ -4558,7 +4385,7 @@ class LinuxVMGuestPatchAutomaticByPlatformSettings(_serialization.Model): # pyl :ivar reboot_setting: Specifies the reboot setting for all AutomaticByPlatform patch installation operations. Known values are: "Unknown", "IfRequired", "Never", and "Always". :vartype reboot_setting: str or - ~azure.mgmt.compute.v2024_11_01.models.LinuxVMGuestPatchAutomaticByPlatformRebootSetting + ~azure.mgmt.compute.v2024_07_01.models.LinuxVMGuestPatchAutomaticByPlatformRebootSetting :ivar bypass_platform_safety_checks_on_user_schedule: Enables customer to schedule patching without accidental upgrades. :vartype bypass_platform_safety_checks_on_user_schedule: bool @@ -4583,7 +4410,7 @@ def __init__( :keyword reboot_setting: Specifies the reboot setting for all AutomaticByPlatform patch installation operations. Known values are: "Unknown", "IfRequired", "Never", and "Always". :paramtype reboot_setting: str or - ~azure.mgmt.compute.v2024_11_01.models.LinuxVMGuestPatchAutomaticByPlatformRebootSetting + ~azure.mgmt.compute.v2024_07_01.models.LinuxVMGuestPatchAutomaticByPlatformRebootSetting :keyword bypass_platform_safety_checks_on_user_schedule: Enables customer to schedule patching without accidental upgrades. :paramtype bypass_platform_safety_checks_on_user_schedule: bool @@ -4599,7 +4426,7 @@ class ListUsagesResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of compute resource usages. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.Usage] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.Usage] :ivar next_link: The URI to fetch the next page of compute resource usage information. Call ListNext() with this to fetch the next page of compute resource usage information. :vartype next_link: str @@ -4617,7 +4444,7 @@ class ListUsagesResult(_serialization.Model): def __init__(self, *, value: List["_models.Usage"], next_link: Optional[str] = None, **kwargs: Any) -> None: """ :keyword value: The list of compute resource usages. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.Usage] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.Usage] :keyword next_link: The URI to fetch the next page of compute resource usage information. Call ListNext() with this to fetch the next page of compute resource usage information. :paramtype next_link: str @@ -4717,7 +4544,7 @@ class LogAnalyticsOperationResult(_serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar properties: LogAnalyticsOutput. - :vartype properties: ~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOutput + :vartype properties: ~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOutput """ _validation = { @@ -4731,7 +4558,7 @@ class LogAnalyticsOperationResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None + self.properties: Optional["_models.LogAnalyticsOutput"] = None class LogAnalyticsOutput(_serialization.Model): @@ -4754,7 +4581,7 @@ class LogAnalyticsOutput(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.output = None + self.output: Optional[str] = None class MaintenanceRedeployStatus(_serialization.Model): @@ -4774,7 +4601,7 @@ class MaintenanceRedeployStatus(_serialization.Model): :ivar last_operation_result_code: The Last Maintenance Operation Result Code. Known values are: "None", "RetryLater", "MaintenanceAborted", and "MaintenanceCompleted". :vartype last_operation_result_code: str or - ~azure.mgmt.compute.v2024_11_01.models.MaintenanceOperationResultCodeTypes + ~azure.mgmt.compute.v2024_07_01.models.MaintenanceOperationResultCodeTypes :ivar last_operation_message: Message returned for the last Maintenance Operation. :vartype last_operation_message: str """ @@ -4816,7 +4643,7 @@ def __init__( :keyword last_operation_result_code: The Last Maintenance Operation Result Code. Known values are: "None", "RetryLater", "MaintenanceAborted", and "MaintenanceCompleted". :paramtype last_operation_result_code: str or - ~azure.mgmt.compute.v2024_11_01.models.MaintenanceOperationResultCodeTypes + ~azure.mgmt.compute.v2024_07_01.models.MaintenanceOperationResultCodeTypes :keyword last_operation_message: Message returned for the last Maintenance Operation. :paramtype last_operation_message: str """ @@ -4840,13 +4667,13 @@ class ManagedDiskParameters(SubResource): are: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS", and "PremiumV2_LRS". :vartype storage_account_type: str or - ~azure.mgmt.compute.v2024_11_01.models.StorageAccountTypes + ~azure.mgmt.compute.v2024_07_01.models.StorageAccountTypes :ivar disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed disk. :vartype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :ivar security_profile: Specifies the security profile for the managed disk. - :vartype security_profile: ~azure.mgmt.compute.v2024_11_01.models.VMDiskSecurityProfile + :vartype security_profile: ~azure.mgmt.compute.v2024_07_01.models.VMDiskSecurityProfile """ _attribute_map = { @@ -4873,13 +4700,13 @@ def __init__( are: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS", and "PremiumV2_LRS". :paramtype storage_account_type: str or - ~azure.mgmt.compute.v2024_11_01.models.StorageAccountTypes + ~azure.mgmt.compute.v2024_07_01.models.StorageAccountTypes :keyword disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed disk. :paramtype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :keyword security_profile: Specifies the security profile for the managed disk. - :paramtype security_profile: ~azure.mgmt.compute.v2024_11_01.models.VMDiskSecurityProfile + :paramtype security_profile: ~azure.mgmt.compute.v2024_07_01.models.VMDiskSecurityProfile """ super().__init__(id=id, **kwargs) self.storage_account_type = storage_account_type @@ -4887,80 +4714,6 @@ def __init__( self.security_profile = security_profile -class MigrateToVirtualMachineScaleSetInput(_serialization.Model): - """Describes the Virtual Machine Scale Set to migrate from Availability Set. - - All required parameters must be populated in order to send to server. - - :ivar virtual_machine_scale_set_flexible: Specifies information about the Virtual Machine Scale - Set that the Availability Set should be migrated to. Minimum api‐version: 2024‐11‐01. Required. - :vartype virtual_machine_scale_set_flexible: ~azure.mgmt.compute.v2024_11_01.models.SubResource - """ - - _validation = { - "virtual_machine_scale_set_flexible": {"required": True}, - } - - _attribute_map = { - "virtual_machine_scale_set_flexible": {"key": "virtualMachineScaleSetFlexible", "type": "SubResource"}, - } - - def __init__(self, *, virtual_machine_scale_set_flexible: "_models.SubResource", **kwargs: Any) -> None: - """ - :keyword virtual_machine_scale_set_flexible: Specifies information about the Virtual Machine - Scale Set that the Availability Set should be migrated to. Minimum api‐version: 2024‐11‐01. - Required. - :paramtype virtual_machine_scale_set_flexible: - ~azure.mgmt.compute.v2024_11_01.models.SubResource - """ - super().__init__(**kwargs) - self.virtual_machine_scale_set_flexible = virtual_machine_scale_set_flexible - - -class MigrateVMToVirtualMachineScaleSetInput(_serialization.Model): - """The input of virtual machine migration from Availability Set to Flexible Virtual Machine Scale - Set. - - :ivar target_zone: The target zone of VM migration to Flexible Virtual Machine Scale Set. - :vartype target_zone: str - :ivar target_fault_domain: The target compute fault domain of VM migration to Flexible Virtual - Machine Scale Set. - :vartype target_fault_domain: int - :ivar target_vm_size: The target Virtual Machine size of VM migration to Flexible Virtual - Machine Scale Set. - :vartype target_vm_size: str - """ - - _attribute_map = { - "target_zone": {"key": "targetZone", "type": "str"}, - "target_fault_domain": {"key": "targetFaultDomain", "type": "int"}, - "target_vm_size": {"key": "targetVMSize", "type": "str"}, - } - - def __init__( - self, - *, - target_zone: Optional[str] = None, - target_fault_domain: Optional[int] = None, - target_vm_size: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword target_zone: The target zone of VM migration to Flexible Virtual Machine Scale Set. - :paramtype target_zone: str - :keyword target_fault_domain: The target compute fault domain of VM migration to Flexible - Virtual Machine Scale Set. - :paramtype target_fault_domain: int - :keyword target_vm_size: The target Virtual Machine size of VM migration to Flexible Virtual - Machine Scale Set. - :paramtype target_vm_size: str - """ - super().__init__(**kwargs) - self.target_zone = target_zone - self.target_fault_domain = target_fault_domain - self.target_vm_size = target_vm_size - - class NetworkInterfaceReference(SubResource): """Describes a network interface reference. @@ -4971,7 +4724,7 @@ class NetworkInterfaceReference(SubResource): :vartype primary: bool :ivar delete_option: Specify what happens to the network interface when the VM is deleted. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions """ _attribute_map = { @@ -4996,7 +4749,7 @@ def __init__( :paramtype primary: bool :keyword delete_option: Specify what happens to the network interface when the VM is deleted. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions """ super().__init__(id=id, **kwargs) self.primary = primary @@ -5009,15 +4762,14 @@ class NetworkProfile(_serialization.Model): :ivar network_interfaces: Specifies the list of resource Ids for the network interfaces associated with the virtual machine. :vartype network_interfaces: - list[~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceReference] + list[~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceReference] :ivar network_api_version: specifies the Microsoft.Network API version used when creating - networking resources in the Network Interface Configurations. Known values are: "2020-11-01" - and "2022-11-01". - :vartype network_api_version: str or ~azure.mgmt.compute.v2024_11_01.models.NetworkApiVersion + networking resources in the Network Interface Configurations. "2020-11-01" + :vartype network_api_version: str or ~azure.mgmt.compute.v2024_07_01.models.NetworkApiVersion :ivar network_interface_configurations: Specifies the networking configurations that will be used to create the virtual machine networking resources. :vartype network_interface_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineNetworkInterfaceConfiguration] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineNetworkInterfaceConfiguration] """ _attribute_map = { @@ -5041,15 +4793,14 @@ def __init__( :keyword network_interfaces: Specifies the list of resource Ids for the network interfaces associated with the virtual machine. :paramtype network_interfaces: - list[~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceReference] + list[~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceReference] :keyword network_api_version: specifies the Microsoft.Network API version used when creating - networking resources in the Network Interface Configurations. Known values are: "2020-11-01" - and "2022-11-01". - :paramtype network_api_version: str or ~azure.mgmt.compute.v2024_11_01.models.NetworkApiVersion + networking resources in the Network Interface Configurations. "2020-11-01" + :paramtype network_api_version: str or ~azure.mgmt.compute.v2024_07_01.models.NetworkApiVersion :keyword network_interface_configurations: Specifies the networking configurations that will be used to create the virtual machine networking resources. :paramtype network_interface_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineNetworkInterfaceConfiguration] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineNetworkInterfaceConfiguration] """ super().__init__(**kwargs) self.network_interfaces = network_interfaces @@ -5064,9 +4815,9 @@ class OrchestrationServiceStateInput(_serialization.Model): :ivar service_name: The name of the service. Required. Known values are: "AutomaticRepairs" and "DummyOrchestrationServiceName". - :vartype service_name: str or ~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceNames + :vartype service_name: str or ~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceNames :ivar action: The action to be performed. Required. Known values are: "Resume" and "Suspend". - :vartype action: str or ~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceStateAction + :vartype action: str or ~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceStateAction """ _validation = { @@ -5090,11 +4841,11 @@ def __init__( :keyword service_name: The name of the service. Required. Known values are: "AutomaticRepairs" and "DummyOrchestrationServiceName". :paramtype service_name: str or - ~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceNames + ~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceNames :keyword action: The action to be performed. Required. Known values are: "Resume" and "Suspend". :paramtype action: str or - ~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceStateAction + ~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceStateAction """ super().__init__(**kwargs) self.service_name = service_name @@ -5108,10 +4859,10 @@ class OrchestrationServiceSummary(_serialization.Model): :ivar service_name: The name of the service. Known values are: "AutomaticRepairs" and "DummyOrchestrationServiceName". - :vartype service_name: str or ~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceNames + :vartype service_name: str or ~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceNames :ivar service_state: The current state of the service. Known values are: "NotRunning", "Running", and "Suspended". - :vartype service_state: str or ~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceState + :vartype service_state: str or ~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceState """ _validation = { @@ -5127,8 +4878,8 @@ class OrchestrationServiceSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.service_name = None - self.service_state = None + self.service_name: Optional[Union[str, "_models.OrchestrationServiceNames"]] = None + self.service_state: Optional[Union[str, "_models.OrchestrationServiceState"]] = None class OSDisk(_serialization.Model): @@ -5141,28 +4892,28 @@ class OSDisk(_serialization.Model): :ivar os_type: This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD. Possible values are: **Windows,** **Linux.**. Known values are: "Windows" and "Linux". - :vartype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :vartype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes :ivar encryption_settings: Specifies the encryption settings for the OS Disk. Minimum api-version: 2015-06-15. - :vartype encryption_settings: ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSettings + :vartype encryption_settings: ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSettings :ivar name: The disk name. :vartype name: str :ivar vhd: The virtual hard disk. - :vartype vhd: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :vartype vhd: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :ivar image: The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist. - :vartype image: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :vartype image: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :ivar caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The defaulting behavior is: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :vartype write_accelerator_enabled: bool :ivar diff_disk_settings: Specifies the ephemeral Disk Settings for the operating system disk used by the virtual machine. - :vartype diff_disk_settings: ~azure.mgmt.compute.v2024_11_01.models.DiffDiskSettings + :vartype diff_disk_settings: ~azure.mgmt.compute.v2024_07_01.models.DiffDiskSettings :ivar create_option: Specifies how the virtual machine disk should be created. Possible values are **Attach:** This value is used when you are using a specialized disk to create the virtual machine. **FromImage:** This value is used when you are using an image to create the virtual @@ -5170,20 +4921,20 @@ class OSDisk(_serialization.Model): described above. If you are using a marketplace image, you should also use the plan element previously described. Required. Known values are: "FromImage", "Empty", "Attach", "Copy", and "Restore". - :vartype create_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskCreateOptionTypes + :vartype create_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskCreateOptionTypes :ivar disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. The property 'diskSizeGB' is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023. :vartype disk_size_gb: int :ivar managed_disk: The managed disk parameters. - :vartype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.ManagedDiskParameters + :vartype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.ManagedDiskParameters :ivar delete_option: Specifies whether OS Disk should be deleted or detached upon VM deletion. Possible values are: **Delete.** If this value is used, the OS disk is deleted when VM is deleted. **Detach.** If this value is used, the os disk is retained after VM is deleted. The default value is set to **Detach**. For an ephemeral OS Disk, the default value is set to **Delete**. The user cannot change the delete option for an ephemeral OS Disk. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes """ _validation = { @@ -5226,28 +4977,28 @@ def __init__( :keyword os_type: This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD. Possible values are: **Windows,** **Linux.**. Known values are: "Windows" and "Linux". - :paramtype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :paramtype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes :keyword encryption_settings: Specifies the encryption settings for the OS Disk. Minimum api-version: 2015-06-15. - :paramtype encryption_settings: ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSettings + :paramtype encryption_settings: ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSettings :keyword name: The disk name. :paramtype name: str :keyword vhd: The virtual hard disk. - :paramtype vhd: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :paramtype vhd: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :keyword image: The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist. - :paramtype image: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :paramtype image: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :keyword caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The defaulting behavior is: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :paramtype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :paramtype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :keyword write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :paramtype write_accelerator_enabled: bool :keyword diff_disk_settings: Specifies the ephemeral Disk Settings for the operating system disk used by the virtual machine. - :paramtype diff_disk_settings: ~azure.mgmt.compute.v2024_11_01.models.DiffDiskSettings + :paramtype diff_disk_settings: ~azure.mgmt.compute.v2024_07_01.models.DiffDiskSettings :keyword create_option: Specifies how the virtual machine disk should be created. Possible values are **Attach:** This value is used when you are using a specialized disk to create the virtual machine. **FromImage:** This value is used when you are using an image to create the @@ -5255,20 +5006,20 @@ def __init__( element described above. If you are using a marketplace image, you should also use the plan element previously described. Required. Known values are: "FromImage", "Empty", "Attach", "Copy", and "Restore". - :paramtype create_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskCreateOptionTypes + :paramtype create_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskCreateOptionTypes :keyword disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. The property 'diskSizeGB' is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023. :paramtype disk_size_gb: int :keyword managed_disk: The managed disk parameters. - :paramtype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.ManagedDiskParameters + :paramtype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.ManagedDiskParameters :keyword delete_option: Specifies whether OS Disk should be deleted or detached upon VM deletion. Possible values are: **Delete.** If this value is used, the OS disk is deleted when VM is deleted. **Detach.** If this value is used, the os disk is retained after VM is deleted. The default value is set to **Detach**. For an ephemeral OS Disk, the default value is set to **Delete**. The user cannot change the delete option for an ephemeral OS Disk. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes """ super().__init__(**kwargs) self.os_type = os_type @@ -5292,7 +5043,7 @@ class OSDiskImage(_serialization.Model): :ivar operating_system: The operating system of the osDiskImage. Required. Known values are: "Windows" and "Linux". - :vartype operating_system: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :vartype operating_system: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes """ _validation = { @@ -5307,7 +5058,7 @@ def __init__(self, *, operating_system: Union[str, "_models.OperatingSystemTypes """ :keyword operating_system: The operating system of the osDiskImage. Required. Known values are: "Windows" and "Linux". - :paramtype operating_system: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :paramtype operating_system: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes """ super().__init__(**kwargs) self.operating_system = operating_system @@ -5393,18 +5144,18 @@ class OSProfile(_serialization.Model): :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. - :vartype windows_configuration: ~azure.mgmt.compute.v2024_11_01.models.WindowsConfiguration + :vartype windows_configuration: ~azure.mgmt.compute.v2024_07_01.models.WindowsConfiguration :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions `_. - :vartype linux_configuration: ~azure.mgmt.compute.v2024_11_01.models.LinuxConfiguration + :vartype linux_configuration: ~azure.mgmt.compute.v2024_07_01.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machine. To install certificates on a virtual machine it is recommended to use the `Azure Key Vault virtual machine extension for Linux `_ or the `Azure Key Vault virtual machine extension for Windows `_. - :vartype secrets: list[~azure.mgmt.compute.v2024_11_01.models.VaultSecretGroup] + :vartype secrets: list[~azure.mgmt.compute.v2024_07_01.models.VaultSecretGroup] :ivar allow_extension_operations: Specifies whether extension operations should be allowed on the virtual machine. This may only be set to False when no extensions are present on the virtual machine. @@ -5483,18 +5234,18 @@ def __init__( :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. - :paramtype windows_configuration: ~azure.mgmt.compute.v2024_11_01.models.WindowsConfiguration + :paramtype windows_configuration: ~azure.mgmt.compute.v2024_07_01.models.WindowsConfiguration :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions `_. - :paramtype linux_configuration: ~azure.mgmt.compute.v2024_11_01.models.LinuxConfiguration + :paramtype linux_configuration: ~azure.mgmt.compute.v2024_07_01.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machine. To install certificates on a virtual machine it is recommended to use the `Azure Key Vault virtual machine extension for Linux `_ or the `Azure Key Vault virtual machine extension for Windows `_. - :paramtype secrets: list[~azure.mgmt.compute.v2024_11_01.models.VaultSecretGroup] + :paramtype secrets: list[~azure.mgmt.compute.v2024_07_01.models.VaultSecretGroup] :keyword allow_extension_operations: Specifies whether extension operations should be allowed on the virtual machine. This may only be set to False when no extensions are present on the virtual machine. @@ -5602,7 +5353,7 @@ class PatchInstallationDetail(_serialization.Model): :ivar installation_state: The state of the patch after the installation operation completed. Known values are: "Unknown", "Installed", "Failed", "Excluded", "NotSelected", and "Pending". :vartype installation_state: str or - ~azure.mgmt.compute.v2024_11_01.models.PatchInstallationState + ~azure.mgmt.compute.v2024_07_01.models.PatchInstallationState """ _validation = { @@ -5626,12 +5377,12 @@ class PatchInstallationDetail(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.patch_id = None - self.name = None - self.version = None - self.kb_id = None - self.classifications = None - self.installation_state = None + self.patch_id: Optional[str] = None + self.name: Optional[str] = None + self.version: Optional[str] = None + self.kb_id: Optional[str] = None + self.classifications: Optional[List[str]] = None + self.installation_state: Optional[Union[str, "_models.PatchInstallationState"]] = None class PatchSettings(_serialization.Model): @@ -5648,7 +5399,7 @@ class PatchSettings(_serialization.Model): :code:`
    ` **AutomaticByPlatform** - the virtual machine will automatically updated by the platform. The properties provisionVMAgent and WindowsConfiguration.enableAutomaticUpdates must be true. Known values are: "Manual", "AutomaticByOS", and "AutomaticByPlatform". - :vartype patch_mode: str or ~azure.mgmt.compute.v2024_11_01.models.WindowsVMGuestPatchMode + :vartype patch_mode: str or ~azure.mgmt.compute.v2024_07_01.models.WindowsVMGuestPatchMode :ivar enable_hotpatching: Enables customers to patch their Azure VMs without requiring a reboot. For enableHotpatching, the 'provisionVMAgent' must be set to true and 'patchMode' must be set to 'AutomaticByPlatform'. @@ -5660,11 +5411,11 @@ class PatchSettings(_serialization.Model): patch assessments. The property provisionVMAgent must be true. Known values are: "ImageDefault" and "AutomaticByPlatform". :vartype assessment_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.WindowsPatchAssessmentMode + ~azure.mgmt.compute.v2024_07_01.models.WindowsPatchAssessmentMode :ivar automatic_by_platform_settings: Specifies additional settings for patch mode AutomaticByPlatform in VM Guest Patching on Windows. :vartype automatic_by_platform_settings: - ~azure.mgmt.compute.v2024_11_01.models.WindowsVMGuestPatchAutomaticByPlatformSettings + ~azure.mgmt.compute.v2024_07_01.models.WindowsVMGuestPatchAutomaticByPlatformSettings """ _attribute_map = { @@ -5698,7 +5449,7 @@ def __init__( :code:`
    ` **AutomaticByPlatform** - the virtual machine will automatically updated by the platform. The properties provisionVMAgent and WindowsConfiguration.enableAutomaticUpdates must be true. Known values are: "Manual", "AutomaticByOS", and "AutomaticByPlatform". - :paramtype patch_mode: str or ~azure.mgmt.compute.v2024_11_01.models.WindowsVMGuestPatchMode + :paramtype patch_mode: str or ~azure.mgmt.compute.v2024_07_01.models.WindowsVMGuestPatchMode :keyword enable_hotpatching: Enables customers to patch their Azure VMs without requiring a reboot. For enableHotpatching, the 'provisionVMAgent' must be set to true and 'patchMode' must be set to 'AutomaticByPlatform'. @@ -5710,11 +5461,11 @@ def __init__( patch assessments. The property provisionVMAgent must be true. Known values are: "ImageDefault" and "AutomaticByPlatform". :paramtype assessment_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.WindowsPatchAssessmentMode + ~azure.mgmt.compute.v2024_07_01.models.WindowsPatchAssessmentMode :keyword automatic_by_platform_settings: Specifies additional settings for patch mode AutomaticByPlatform in VM Guest Patching on Windows. :paramtype automatic_by_platform_settings: - ~azure.mgmt.compute.v2024_11_01.models.WindowsVMGuestPatchAutomaticByPlatformSettings + ~azure.mgmt.compute.v2024_07_01.models.WindowsVMGuestPatchAutomaticByPlatformSettings """ super().__init__(**kwargs) self.patch_mode = patch_mode @@ -5723,63 +5474,6 @@ def __init__( self.automatic_by_platform_settings = automatic_by_platform_settings -class Placement(_serialization.Model): - """Describes the user-defined constraints for virtual machine hardware placement. - - :ivar zone_placement_policy: Specifies the policy for virtual machine's placement in - availability zone. Possible values are: **Any** - An availability zone will be automatically - picked by system as part of virtual machine creation. "Any" - :vartype zone_placement_policy: str or - ~azure.mgmt.compute.v2024_11_01.models.ZonePlacementPolicyType - :ivar include_zones: This property supplements the 'zonePlacementPolicy' property. If - 'zonePlacementPolicy' is set to 'Any', availability zone selected by the system must be present - in the list of availability zones passed with 'includeZones'. If 'includeZones' is not - provided, all availability zones in region will be considered for selection. - :vartype include_zones: list[str] - :ivar exclude_zones: This property supplements the 'zonePlacementPolicy' property. If - 'zonePlacementPolicy' is set to 'Any', availability zone selected by the system must not be - present in the list of availability zones passed with 'excludeZones'. If 'excludeZones' is not - provided, all availability zones in region will be considered for selection. - :vartype exclude_zones: list[str] - """ - - _attribute_map = { - "zone_placement_policy": {"key": "zonePlacementPolicy", "type": "str"}, - "include_zones": {"key": "includeZones", "type": "[str]"}, - "exclude_zones": {"key": "excludeZones", "type": "[str]"}, - } - - def __init__( - self, - *, - zone_placement_policy: Optional[Union[str, "_models.ZonePlacementPolicyType"]] = None, - include_zones: Optional[List[str]] = None, - exclude_zones: Optional[List[str]] = None, - **kwargs: Any - ) -> None: - """ - :keyword zone_placement_policy: Specifies the policy for virtual machine's placement in - availability zone. Possible values are: **Any** - An availability zone will be automatically - picked by system as part of virtual machine creation. "Any" - :paramtype zone_placement_policy: str or - ~azure.mgmt.compute.v2024_11_01.models.ZonePlacementPolicyType - :keyword include_zones: This property supplements the 'zonePlacementPolicy' property. If - 'zonePlacementPolicy' is set to 'Any', availability zone selected by the system must be present - in the list of availability zones passed with 'includeZones'. If 'includeZones' is not - provided, all availability zones in region will be considered for selection. - :paramtype include_zones: list[str] - :keyword exclude_zones: This property supplements the 'zonePlacementPolicy' property. If - 'zonePlacementPolicy' is set to 'Any', availability zone selected by the system must not be - present in the list of availability zones passed with 'excludeZones'. If 'excludeZones' is not - provided, all availability zones in region will be considered for selection. - :paramtype exclude_zones: list[str] - """ - super().__init__(**kwargs) - self.zone_placement_policy = zone_placement_policy - self.include_zones = include_zones - self.exclude_zones = exclude_zones - - class Plan(_serialization.Model): """Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an @@ -5900,23 +5594,23 @@ class ProximityPlacementGroup(Resource): Possible values are: **Standard** : Co-locate resources within an Azure region or Availability Zone. **Ultra** : For future use. Known values are: "Standard" and "Ultra". :vartype proximity_placement_group_type: str or - ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroupType + ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroupType :ivar virtual_machines: A list of references to all virtual machines in the proximity placement group. :vartype virtual_machines: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceWithColocationStatus] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceWithColocationStatus] :ivar virtual_machine_scale_sets: A list of references to all virtual machine scale sets in the proximity placement group. :vartype virtual_machine_scale_sets: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceWithColocationStatus] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceWithColocationStatus] :ivar availability_sets: A list of references to all availability sets in the proximity placement group. :vartype availability_sets: - list[~azure.mgmt.compute.v2024_11_01.models.SubResourceWithColocationStatus] + list[~azure.mgmt.compute.v2024_07_01.models.SubResourceWithColocationStatus] :ivar colocation_status: Describes colocation status of the Proximity Placement Group. - :vartype colocation_status: ~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus + :vartype colocation_status: ~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus :ivar intent: Specifies the user intent of the proximity placement group. - :vartype intent: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroupPropertiesIntent + :vartype intent: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroupPropertiesIntent """ _validation = { @@ -5970,19 +5664,19 @@ def __init__( Possible values are: **Standard** : Co-locate resources within an Azure region or Availability Zone. **Ultra** : For future use. Known values are: "Standard" and "Ultra". :paramtype proximity_placement_group_type: str or - ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroupType + ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroupType :keyword colocation_status: Describes colocation status of the Proximity Placement Group. - :paramtype colocation_status: ~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus + :paramtype colocation_status: ~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus :keyword intent: Specifies the user intent of the proximity placement group. :paramtype intent: - ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroupPropertiesIntent + ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroupPropertiesIntent """ super().__init__(location=location, tags=tags, **kwargs) self.zones = zones self.proximity_placement_group_type = proximity_placement_group_type - self.virtual_machines = None - self.virtual_machine_scale_sets = None - self.availability_sets = None + self.virtual_machines: Optional[List["_models.SubResourceWithColocationStatus"]] = None + self.virtual_machine_scale_sets: Optional[List["_models.SubResourceWithColocationStatus"]] = None + self.availability_sets: Optional[List["_models.SubResourceWithColocationStatus"]] = None self.colocation_status = colocation_status self.intent = intent @@ -5993,7 +5687,7 @@ class ProximityPlacementGroupListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of proximity placement groups. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup] :ivar next_link: The URI to fetch the next page of proximity placement groups. :vartype next_link: str """ @@ -6012,7 +5706,7 @@ def __init__( ) -> None: """ :keyword value: The list of proximity placement groups. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup] :keyword next_link: The URI to fetch the next page of proximity placement groups. :paramtype next_link: str """ @@ -6052,33 +5746,26 @@ class ProximityPlacementGroupUpdate(UpdateResource): class ProxyAgentSettings(_serialization.Model): - """Specifies ProxyAgent settings for the virtual machine or virtual machine scale set. Minimum - api-version: 2023-09-01. + """Specifies ProxyAgent settings while creating the virtual machine. Minimum api-version: + 2023-09-01. :ivar enabled: Specifies whether ProxyAgent feature should be enabled on the virtual machine or virtual machine scale set. :vartype enabled: bool - :ivar mode: Specifies the mode that ProxyAgent will execute on. Warning: this property has been - deprecated, please specify 'mode' under particular hostendpoint setting. Known values are: - "Audit" and "Enforce". - :vartype mode: str or ~azure.mgmt.compute.v2024_11_01.models.Mode - :ivar key_incarnation_id: Increase the value of this property allows users to reset the key - used for securing communication channel between guest and host. + :ivar mode: Specifies the mode that ProxyAgent will execute on if the feature is enabled. + ProxyAgent will start to audit or monitor but not enforce access control over requests to host + endpoints in Audit mode, while in Enforce mode it will enforce access control. The default + value is Enforce mode. Known values are: "Audit" and "Enforce". + :vartype mode: str or ~azure.mgmt.compute.v2024_07_01.models.Mode + :ivar key_incarnation_id: Increase the value of this property allows user to reset the key used + for securing communication channel between guest and host. :vartype key_incarnation_id: int - :ivar wire_server: Specifies the Wire Server endpoint settings while creating the virtual - machine or virtual machine scale set. Minimum api-version: 2024-03-01. - :vartype wire_server: ~azure.mgmt.compute.v2024_11_01.models.HostEndpointSettings - :ivar imds: Specifies the IMDS endpoint settings while creating the virtual machine or virtual - machine scale set. Minimum api-version: 2024-03-01. - :vartype imds: ~azure.mgmt.compute.v2024_11_01.models.HostEndpointSettings """ _attribute_map = { "enabled": {"key": "enabled", "type": "bool"}, "mode": {"key": "mode", "type": "str"}, "key_incarnation_id": {"key": "keyIncarnationId", "type": "int"}, - "wire_server": {"key": "wireServer", "type": "HostEndpointSettings"}, - "imds": {"key": "imds", "type": "HostEndpointSettings"}, } def __init__( @@ -6087,34 +5774,25 @@ def __init__( enabled: Optional[bool] = None, mode: Optional[Union[str, "_models.Mode"]] = None, key_incarnation_id: Optional[int] = None, - wire_server: Optional["_models.HostEndpointSettings"] = None, - imds: Optional["_models.HostEndpointSettings"] = None, **kwargs: Any ) -> None: """ :keyword enabled: Specifies whether ProxyAgent feature should be enabled on the virtual machine or virtual machine scale set. :paramtype enabled: bool - :keyword mode: Specifies the mode that ProxyAgent will execute on. Warning: this property has - been deprecated, please specify 'mode' under particular hostendpoint setting. Known values are: - "Audit" and "Enforce". - :paramtype mode: str or ~azure.mgmt.compute.v2024_11_01.models.Mode - :keyword key_incarnation_id: Increase the value of this property allows users to reset the key + :keyword mode: Specifies the mode that ProxyAgent will execute on if the feature is enabled. + ProxyAgent will start to audit or monitor but not enforce access control over requests to host + endpoints in Audit mode, while in Enforce mode it will enforce access control. The default + value is Enforce mode. Known values are: "Audit" and "Enforce". + :paramtype mode: str or ~azure.mgmt.compute.v2024_07_01.models.Mode + :keyword key_incarnation_id: Increase the value of this property allows user to reset the key used for securing communication channel between guest and host. :paramtype key_incarnation_id: int - :keyword wire_server: Specifies the Wire Server endpoint settings while creating the virtual - machine or virtual machine scale set. Minimum api-version: 2024-03-01. - :paramtype wire_server: ~azure.mgmt.compute.v2024_11_01.models.HostEndpointSettings - :keyword imds: Specifies the IMDS endpoint settings while creating the virtual machine or - virtual machine scale set. Minimum api-version: 2024-03-01. - :paramtype imds: ~azure.mgmt.compute.v2024_11_01.models.HostEndpointSettings """ super().__init__(**kwargs) self.enabled = enabled self.mode = mode self.key_incarnation_id = key_incarnation_id - self.wire_server = wire_server - self.imds = imds class ProxyResource(_serialization.Model): @@ -6146,18 +5824,18 @@ class ProxyResource(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None class PublicIPAddressSku(_serialization.Model): """Describes the public IP Sku. It can only be set with OrchestrationMode as Flexible. :ivar name: Specify public IP sku name. Known values are: "Basic" and "Standard". - :vartype name: str or ~azure.mgmt.compute.v2024_11_01.models.PublicIPAddressSkuName + :vartype name: str or ~azure.mgmt.compute.v2024_07_01.models.PublicIPAddressSkuName :ivar tier: Specify public IP sku tier. Known values are: "Regional", "Global", and "Global". - :vartype tier: str or ~azure.mgmt.compute.v2024_11_01.models.PublicIPAddressSkuTier + :vartype tier: str or ~azure.mgmt.compute.v2024_07_01.models.PublicIPAddressSkuTier """ _attribute_map = { @@ -6174,10 +5852,10 @@ def __init__( ) -> None: """ :keyword name: Specify public IP sku name. Known values are: "Basic" and "Standard". - :paramtype name: str or ~azure.mgmt.compute.v2024_11_01.models.PublicIPAddressSkuName + :paramtype name: str or ~azure.mgmt.compute.v2024_07_01.models.PublicIPAddressSkuName :keyword tier: Specify public IP sku tier. Known values are: "Regional", "Global", and "Global". - :paramtype tier: str or ~azure.mgmt.compute.v2024_11_01.models.PublicIPAddressSkuTier + :paramtype tier: str or ~azure.mgmt.compute.v2024_07_01.models.PublicIPAddressSkuTier """ super().__init__(**kwargs) self.name = name @@ -6251,8 +5929,8 @@ class RecoveryWalkResponse(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.walk_performed = None - self.next_platform_update_domain = None + self.walk_performed: Optional[bool] = None + self.next_platform_update_domain: Optional[int] = None class RequestRateByIntervalInput(LogAnalyticsInputBase): @@ -6279,7 +5957,7 @@ class RequestRateByIntervalInput(LogAnalyticsInputBase): :vartype group_by_user_agent: bool :ivar interval_length: Interval value in minutes used to create LogAnalytics call rate logs. Required. Known values are: "ThreeMins", "FiveMins", "ThirtyMins", and "SixtyMins". - :vartype interval_length: str or ~azure.mgmt.compute.v2024_11_01.models.IntervalInMins + :vartype interval_length: str or ~azure.mgmt.compute.v2024_07_01.models.IntervalInMins """ _validation = { @@ -6335,7 +6013,7 @@ def __init__( :paramtype group_by_user_agent: bool :keyword interval_length: Interval value in minutes used to create LogAnalytics call rate logs. Required. Known values are: "ThreeMins", "FiveMins", "ThirtyMins", and "SixtyMins". - :paramtype interval_length: str or ~azure.mgmt.compute.v2024_11_01.models.IntervalInMins + :paramtype interval_length: str or ~azure.mgmt.compute.v2024_07_01.models.IntervalInMins """ super().__init__( blob_container_sas_uri=blob_container_sas_uri, @@ -6352,30 +6030,21 @@ def __init__( class ResiliencyPolicy(_serialization.Model): - """Describes an resiliency policy - AutomaticZoneRebalancingPolicy, ResilientVMCreationPolicy - and/or ResilientVMDeletionPolicy. + """Describes an resiliency policy - resilientVMCreationPolicy and/or resilientVMDeletionPolicy. :ivar resilient_vm_creation_policy: The configuration parameters used while performing resilient VM creation. :vartype resilient_vm_creation_policy: - ~azure.mgmt.compute.v2024_11_01.models.ResilientVMCreationPolicy + ~azure.mgmt.compute.v2024_07_01.models.ResilientVMCreationPolicy :ivar resilient_vm_deletion_policy: The configuration parameters used while performing resilient VM deletion. :vartype resilient_vm_deletion_policy: - ~azure.mgmt.compute.v2024_11_01.models.ResilientVMDeletionPolicy - :ivar automatic_zone_rebalancing_policy: The configuration parameters used while performing - automatic AZ balancing. - :vartype automatic_zone_rebalancing_policy: - ~azure.mgmt.compute.v2024_11_01.models.AutomaticZoneRebalancingPolicy + ~azure.mgmt.compute.v2024_07_01.models.ResilientVMDeletionPolicy """ _attribute_map = { "resilient_vm_creation_policy": {"key": "resilientVMCreationPolicy", "type": "ResilientVMCreationPolicy"}, "resilient_vm_deletion_policy": {"key": "resilientVMDeletionPolicy", "type": "ResilientVMDeletionPolicy"}, - "automatic_zone_rebalancing_policy": { - "key": "automaticZoneRebalancingPolicy", - "type": "AutomaticZoneRebalancingPolicy", - }, } def __init__( @@ -6383,27 +6052,21 @@ def __init__( *, resilient_vm_creation_policy: Optional["_models.ResilientVMCreationPolicy"] = None, resilient_vm_deletion_policy: Optional["_models.ResilientVMDeletionPolicy"] = None, - automatic_zone_rebalancing_policy: Optional["_models.AutomaticZoneRebalancingPolicy"] = None, **kwargs: Any ) -> None: """ :keyword resilient_vm_creation_policy: The configuration parameters used while performing resilient VM creation. :paramtype resilient_vm_creation_policy: - ~azure.mgmt.compute.v2024_11_01.models.ResilientVMCreationPolicy + ~azure.mgmt.compute.v2024_07_01.models.ResilientVMCreationPolicy :keyword resilient_vm_deletion_policy: The configuration parameters used while performing resilient VM deletion. :paramtype resilient_vm_deletion_policy: - ~azure.mgmt.compute.v2024_11_01.models.ResilientVMDeletionPolicy - :keyword automatic_zone_rebalancing_policy: The configuration parameters used while performing - automatic AZ balancing. - :paramtype automatic_zone_rebalancing_policy: - ~azure.mgmt.compute.v2024_11_01.models.AutomaticZoneRebalancingPolicy + ~azure.mgmt.compute.v2024_07_01.models.ResilientVMDeletionPolicy """ super().__init__(**kwargs) self.resilient_vm_creation_policy = resilient_vm_creation_policy self.resilient_vm_deletion_policy = resilient_vm_deletion_policy - self.automatic_zone_rebalancing_policy = automatic_zone_rebalancing_policy class ResilientVMCreationPolicy(_serialization.Model): @@ -6456,7 +6119,7 @@ class ResourceSharingProfile(_serialization.Model): :ivar subscription_ids: Specifies an array of subscription resource IDs that capacity reservation group is shared with. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details. - :vartype subscription_ids: list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + :vartype subscription_ids: list[~azure.mgmt.compute.v2024_07_01.models.SubResource] """ _attribute_map = { @@ -6468,7 +6131,7 @@ def __init__(self, *, subscription_ids: Optional[List["_models.SubResource"]] = :keyword subscription_ids: Specifies an array of subscription resource IDs that capacity reservation group is shared with. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details. - :paramtype subscription_ids: list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + :paramtype subscription_ids: list[~azure.mgmt.compute.v2024_07_01.models.SubResource] """ super().__init__(**kwargs) self.subscription_ids = subscription_ids @@ -6514,9 +6177,9 @@ def __init__(self, *, location: Optional[str] = None, tags: Optional[Dict[str, s """ super().__init__(**kwargs) self.location = location - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -6533,24 +6196,24 @@ class RestorePoint(ProxyResource): :vartype type: str :ivar exclude_disks: List of disk resource ids that the customer wishes to exclude from the restore point. If no disks are specified, all disks will be included. - :vartype exclude_disks: list[~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference] + :vartype exclude_disks: list[~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference] :ivar source_metadata: Gets the details of the VM captured at the time of the restore point creation. - :vartype source_metadata: ~azure.mgmt.compute.v2024_11_01.models.RestorePointSourceMetadata + :vartype source_metadata: ~azure.mgmt.compute.v2024_07_01.models.RestorePointSourceMetadata :ivar provisioning_state: Gets the provisioning state of the restore point. :vartype provisioning_state: str :ivar consistency_mode: ConsistencyMode of the RestorePoint. Can be specified in the input while creating a restore point. For now, only CrashConsistent is accepted as a valid input. Please refer to https://aka.ms/RestorePoints for more details. Known values are: "CrashConsistent", "FileSystemConsistent", and "ApplicationConsistent". - :vartype consistency_mode: str or ~azure.mgmt.compute.v2024_11_01.models.ConsistencyModeTypes + :vartype consistency_mode: str or ~azure.mgmt.compute.v2024_07_01.models.ConsistencyModeTypes :ivar time_created: Gets the creation time of the restore point. :vartype time_created: ~datetime.datetime :ivar source_restore_point: Resource Id of the source restore point from which a copy needs to be created. - :vartype source_restore_point: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + :vartype source_restore_point: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :ivar instance_view: The restore point instance view. - :vartype instance_view: ~azure.mgmt.compute.v2024_11_01.models.RestorePointInstanceView + :vartype instance_view: ~azure.mgmt.compute.v2024_07_01.models.RestorePointInstanceView """ _validation = { @@ -6587,29 +6250,29 @@ def __init__( """ :keyword exclude_disks: List of disk resource ids that the customer wishes to exclude from the restore point. If no disks are specified, all disks will be included. - :paramtype exclude_disks: list[~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference] + :paramtype exclude_disks: list[~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference] :keyword source_metadata: Gets the details of the VM captured at the time of the restore point creation. - :paramtype source_metadata: ~azure.mgmt.compute.v2024_11_01.models.RestorePointSourceMetadata + :paramtype source_metadata: ~azure.mgmt.compute.v2024_07_01.models.RestorePointSourceMetadata :keyword consistency_mode: ConsistencyMode of the RestorePoint. Can be specified in the input while creating a restore point. For now, only CrashConsistent is accepted as a valid input. Please refer to https://aka.ms/RestorePoints for more details. Known values are: "CrashConsistent", "FileSystemConsistent", and "ApplicationConsistent". - :paramtype consistency_mode: str or ~azure.mgmt.compute.v2024_11_01.models.ConsistencyModeTypes + :paramtype consistency_mode: str or ~azure.mgmt.compute.v2024_07_01.models.ConsistencyModeTypes :keyword time_created: Gets the creation time of the restore point. :paramtype time_created: ~datetime.datetime :keyword source_restore_point: Resource Id of the source restore point from which a copy needs to be created. - :paramtype source_restore_point: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + :paramtype source_restore_point: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference """ super().__init__(**kwargs) self.exclude_disks = exclude_disks self.source_metadata = source_metadata - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.consistency_mode = consistency_mode self.time_created = time_created self.source_restore_point = source_restore_point - self.instance_view = None + self.instance_view: Optional["_models.RestorePointInstanceView"] = None class RestorePointCollection(Resource): @@ -6631,14 +6294,14 @@ class RestorePointCollection(Resource): :vartype tags: dict[str, str] :ivar source: The properties of the source resource that this restore point collection is created from. - :vartype source: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollectionSourceProperties + :vartype source: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollectionSourceProperties :ivar provisioning_state: The provisioning state of the restore point collection. :vartype provisioning_state: str :ivar restore_point_collection_id: The unique id of the restore point collection. :vartype restore_point_collection_id: str :ivar restore_points: A list containing all restore points created under this restore point collection. - :vartype restore_points: list[~azure.mgmt.compute.v2024_11_01.models.RestorePoint] + :vartype restore_points: list[~azure.mgmt.compute.v2024_07_01.models.RestorePoint] """ _validation = { @@ -6679,20 +6342,20 @@ def __init__( :keyword source: The properties of the source resource that this restore point collection is created from. :paramtype source: - ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollectionSourceProperties + ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollectionSourceProperties """ super().__init__(location=location, tags=tags, **kwargs) self.source = source - self.provisioning_state = None - self.restore_point_collection_id = None - self.restore_points = None + self.provisioning_state: Optional[str] = None + self.restore_point_collection_id: Optional[str] = None + self.restore_points: Optional[List["_models.RestorePoint"]] = None class RestorePointCollectionListResult(_serialization.Model): """The List restore point collection operation response. :ivar value: Gets the list of restore point collections. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection] :ivar next_link: The uri to fetch the next page of RestorePointCollections. Call ListNext() with this to fetch the next page of RestorePointCollections. :vartype next_link: str @@ -6712,7 +6375,7 @@ def __init__( ) -> None: """ :keyword value: Gets the list of restore point collections. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection] :keyword next_link: The uri to fetch the next page of RestorePointCollections. Call ListNext() with this to fetch the next page of RestorePointCollections. :paramtype next_link: str @@ -6748,7 +6411,7 @@ def __init__(self, *, id: Optional[str] = None, **kwargs: Any) -> None: # pylin :paramtype id: str """ super().__init__(**kwargs) - self.location = None + self.location: Optional[str] = None self.id = id @@ -6761,14 +6424,14 @@ class RestorePointCollectionUpdate(UpdateResource): :vartype tags: dict[str, str] :ivar source: The properties of the source resource that this restore point collection is created from. - :vartype source: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollectionSourceProperties + :vartype source: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollectionSourceProperties :ivar provisioning_state: The provisioning state of the restore point collection. :vartype provisioning_state: str :ivar restore_point_collection_id: The unique id of the restore point collection. :vartype restore_point_collection_id: str :ivar restore_points: A list containing all restore points created under this restore point collection. - :vartype restore_points: list[~azure.mgmt.compute.v2024_11_01.models.RestorePoint] + :vartype restore_points: list[~azure.mgmt.compute.v2024_07_01.models.RestorePoint] """ _validation = { @@ -6798,13 +6461,13 @@ def __init__( :keyword source: The properties of the source resource that this restore point collection is created from. :paramtype source: - ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollectionSourceProperties + ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollectionSourceProperties """ super().__init__(tags=tags, **kwargs) self.source = source - self.provisioning_state = None - self.restore_point_collection_id = None - self.restore_points = None + self.provisioning_state: Optional[str] = None + self.restore_point_collection_id: Optional[str] = None + self.restore_points: Optional[List["_models.RestorePoint"]] = None class RestorePointEncryption(_serialization.Model): @@ -6816,11 +6479,11 @@ class RestorePointEncryption(_serialization.Model): only be specified for managed disk. Please refer https://aka.ms/mdssewithcmkoverview for more details. :vartype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :ivar type: The type of key used to encrypt the data of the disk restore point. Known values are: "EncryptionAtRestWithPlatformKey", "EncryptionAtRestWithCustomerKey", and "EncryptionAtRestWithPlatformAndCustomerKeys". - :vartype type: str or ~azure.mgmt.compute.v2024_11_01.models.RestorePointEncryptionType + :vartype type: str or ~azure.mgmt.compute.v2024_07_01.models.RestorePointEncryptionType """ _attribute_map = { @@ -6841,11 +6504,11 @@ def __init__( only be specified for managed disk. Please refer https://aka.ms/mdssewithcmkoverview for more details. :paramtype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :keyword type: The type of key used to encrypt the data of the disk restore point. Known values are: "EncryptionAtRestWithPlatformKey", "EncryptionAtRestWithCustomerKey", and "EncryptionAtRestWithPlatformAndCustomerKeys". - :paramtype type: str or ~azure.mgmt.compute.v2024_11_01.models.RestorePointEncryptionType + :paramtype type: str or ~azure.mgmt.compute.v2024_07_01.models.RestorePointEncryptionType """ super().__init__(**kwargs) self.disk_encryption_set = disk_encryption_set @@ -6857,9 +6520,9 @@ class RestorePointInstanceView(_serialization.Model): :ivar disk_restore_points: The disk restore points information. :vartype disk_restore_points: - list[~azure.mgmt.compute.v2024_11_01.models.DiskRestorePointInstanceView] + list[~azure.mgmt.compute.v2024_07_01.models.DiskRestorePointInstanceView] :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ _attribute_map = { @@ -6877,9 +6540,9 @@ def __init__( """ :keyword disk_restore_points: The disk restore points information. :paramtype disk_restore_points: - list[~azure.mgmt.compute.v2024_11_01.models.DiskRestorePointInstanceView] + list[~azure.mgmt.compute.v2024_07_01.models.DiskRestorePointInstanceView] :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) self.disk_restore_points = disk_restore_points @@ -6894,20 +6557,20 @@ class RestorePointSourceMetadata(_serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar hardware_profile: Gets the hardware profile. - :vartype hardware_profile: ~azure.mgmt.compute.v2024_11_01.models.HardwareProfile + :vartype hardware_profile: ~azure.mgmt.compute.v2024_07_01.models.HardwareProfile :ivar storage_profile: Gets the storage profile. :vartype storage_profile: - ~azure.mgmt.compute.v2024_11_01.models.RestorePointSourceVMStorageProfile + ~azure.mgmt.compute.v2024_07_01.models.RestorePointSourceVMStorageProfile :ivar os_profile: Gets the OS profile. - :vartype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfile + :vartype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfile :ivar diagnostics_profile: Gets the diagnostics profile. - :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :ivar license_type: Gets the license type, which is for bring your own license scenario. :vartype license_type: str :ivar vm_id: Gets the virtual machine unique id. :vartype vm_id: str :ivar security_profile: Gets the security profile. - :vartype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :vartype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :ivar location: Location of the VM from which the restore point was created. :vartype location: str :ivar user_data: UserData associated with the source VM for which restore point is captured, @@ -6916,7 +6579,7 @@ class RestorePointSourceMetadata(_serialization.Model): :ivar hyper_v_generation: HyperVGeneration of the source VM for which restore point is captured. Known values are: "V1" and "V2". :vartype hyper_v_generation: str or - ~azure.mgmt.compute.v2024_11_01.models.HyperVGenerationTypes + ~azure.mgmt.compute.v2024_07_01.models.HyperVGenerationTypes """ _validation = { @@ -6950,19 +6613,19 @@ def __init__( """ :keyword storage_profile: Gets the storage profile. :paramtype storage_profile: - ~azure.mgmt.compute.v2024_11_01.models.RestorePointSourceVMStorageProfile + ~azure.mgmt.compute.v2024_07_01.models.RestorePointSourceVMStorageProfile """ super().__init__(**kwargs) - self.hardware_profile = None + self.hardware_profile: Optional["_models.HardwareProfile"] = None self.storage_profile = storage_profile - self.os_profile = None - self.diagnostics_profile = None - self.license_type = None - self.vm_id = None - self.security_profile = None - self.location = None - self.user_data = None - self.hyper_v_generation = None + self.os_profile: Optional["_models.OSProfile"] = None + self.diagnostics_profile: Optional["_models.DiagnosticsProfile"] = None + self.license_type: Optional[str] = None + self.vm_id: Optional[str] = None + self.security_profile: Optional["_models.SecurityProfile"] = None + self.location: Optional[str] = None + self.user_data: Optional[str] = None + self.hyper_v_generation: Optional[Union[str, "_models.HyperVGenerationTypes"]] = None class RestorePointSourceVMDataDisk(_serialization.Model): @@ -6975,14 +6638,14 @@ class RestorePointSourceVMDataDisk(_serialization.Model): :ivar name: Gets the disk name. :vartype name: str :ivar caching: Gets the caching type. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar disk_size_gb: Gets the initial disk size in GB for blank data disks, and the new desired size for existing OS and Data disks. :vartype disk_size_gb: int :ivar managed_disk: Contains the managed disk details. - :vartype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.ManagedDiskParameters + :vartype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.ManagedDiskParameters :ivar disk_restore_point: Contains Disk Restore Point properties. - :vartype disk_restore_point: ~azure.mgmt.compute.v2024_11_01.models.DiskRestorePointAttributes + :vartype disk_restore_point: ~azure.mgmt.compute.v2024_07_01.models.DiskRestorePointAttributes :ivar write_accelerator_enabled: Shows true if the disk is write-accelerator enabled. :vartype write_accelerator_enabled: bool """ @@ -7014,19 +6677,19 @@ def __init__( ) -> None: """ :keyword managed_disk: Contains the managed disk details. - :paramtype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.ManagedDiskParameters + :paramtype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.ManagedDiskParameters :keyword disk_restore_point: Contains Disk Restore Point properties. :paramtype disk_restore_point: - ~azure.mgmt.compute.v2024_11_01.models.DiskRestorePointAttributes + ~azure.mgmt.compute.v2024_07_01.models.DiskRestorePointAttributes """ super().__init__(**kwargs) - self.lun = None - self.name = None - self.caching = None - self.disk_size_gb = None + self.lun: Optional[int] = None + self.name: Optional[str] = None + self.caching: Optional[Union[str, "_models.CachingTypes"]] = None + self.disk_size_gb: Optional[int] = None self.managed_disk = managed_disk self.disk_restore_point = disk_restore_point - self.write_accelerator_enabled = None + self.write_accelerator_enabled: Optional[bool] = None class RestorePointSourceVMOSDisk(_serialization.Model): @@ -7035,19 +6698,19 @@ class RestorePointSourceVMOSDisk(_serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar os_type: Gets the Operating System type. Known values are: "Windows" and "Linux". - :vartype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemType + :vartype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemType :ivar encryption_settings: Gets the disk encryption settings. - :vartype encryption_settings: ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSettings + :vartype encryption_settings: ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSettings :ivar name: Gets the disk name. :vartype name: str :ivar caching: Gets the caching type. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar disk_size_gb: Gets the disk size in GB. :vartype disk_size_gb: int :ivar managed_disk: Gets the managed disk details. - :vartype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.ManagedDiskParameters + :vartype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.ManagedDiskParameters :ivar disk_restore_point: Contains Disk Restore Point properties. - :vartype disk_restore_point: ~azure.mgmt.compute.v2024_11_01.models.DiskRestorePointAttributes + :vartype disk_restore_point: ~azure.mgmt.compute.v2024_07_01.models.DiskRestorePointAttributes :ivar write_accelerator_enabled: Shows true if the disk is write-accelerator enabled. :vartype write_accelerator_enabled: bool """ @@ -7081,20 +6744,20 @@ def __init__( ) -> None: """ :keyword managed_disk: Gets the managed disk details. - :paramtype managed_disk: ~azure.mgmt.compute.v2024_11_01.models.ManagedDiskParameters + :paramtype managed_disk: ~azure.mgmt.compute.v2024_07_01.models.ManagedDiskParameters :keyword disk_restore_point: Contains Disk Restore Point properties. :paramtype disk_restore_point: - ~azure.mgmt.compute.v2024_11_01.models.DiskRestorePointAttributes + ~azure.mgmt.compute.v2024_07_01.models.DiskRestorePointAttributes """ super().__init__(**kwargs) - self.os_type = None - self.encryption_settings = None - self.name = None - self.caching = None - self.disk_size_gb = None + self.os_type: Optional[Union[str, "_models.OperatingSystemType"]] = None + self.encryption_settings: Optional["_models.DiskEncryptionSettings"] = None + self.name: Optional[str] = None + self.caching: Optional[Union[str, "_models.CachingTypes"]] = None + self.disk_size_gb: Optional[int] = None self.managed_disk = managed_disk self.disk_restore_point = disk_restore_point - self.write_accelerator_enabled = None + self.write_accelerator_enabled: Optional[bool] = None class RestorePointSourceVMStorageProfile(_serialization.Model): @@ -7103,14 +6766,14 @@ class RestorePointSourceVMStorageProfile(_serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar os_disk: Gets the OS disk of the VM captured at the time of the restore point creation. - :vartype os_disk: ~azure.mgmt.compute.v2024_11_01.models.RestorePointSourceVMOSDisk + :vartype os_disk: ~azure.mgmt.compute.v2024_07_01.models.RestorePointSourceVMOSDisk :ivar data_disks: Gets the data disks of the VM captured at the time of the restore point creation. - :vartype data_disks: list[~azure.mgmt.compute.v2024_11_01.models.RestorePointSourceVMDataDisk] + :vartype data_disks: list[~azure.mgmt.compute.v2024_07_01.models.RestorePointSourceVMDataDisk] :ivar disk_controller_type: Gets the disk controller type of the VM captured at the time of the restore point creation. Known values are: "SCSI" and "NVMe". :vartype disk_controller_type: str or - ~azure.mgmt.compute.v2024_11_01.models.DiskControllerTypes + ~azure.mgmt.compute.v2024_07_01.models.DiskControllerTypes """ _validation = { @@ -7133,16 +6796,16 @@ def __init__( """ :keyword os_disk: Gets the OS disk of the VM captured at the time of the restore point creation. - :paramtype os_disk: ~azure.mgmt.compute.v2024_11_01.models.RestorePointSourceVMOSDisk + :paramtype os_disk: ~azure.mgmt.compute.v2024_07_01.models.RestorePointSourceVMOSDisk :keyword data_disks: Gets the data disks of the VM captured at the time of the restore point creation. :paramtype data_disks: - list[~azure.mgmt.compute.v2024_11_01.models.RestorePointSourceVMDataDisk] + list[~azure.mgmt.compute.v2024_07_01.models.RestorePointSourceVMDataDisk] """ super().__init__(**kwargs) self.os_disk = os_disk self.data_disks = data_disks - self.disk_controller_type = None + self.disk_controller_type: Optional[Union[str, "_models.DiskControllerTypes"]] = None class RetrieveBootDiagnosticsDataResult(_serialization.Model): @@ -7169,8 +6832,8 @@ class RetrieveBootDiagnosticsDataResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.console_screenshot_blob_uri = None - self.serial_console_log_blob_uri = None + self.console_screenshot_blob_uri: Optional[str] = None + self.serial_console_log_blob_uri: Optional[str] = None class RollbackStatusInfo(_serialization.Model): @@ -7184,7 +6847,7 @@ class RollbackStatusInfo(_serialization.Model): :ivar failed_rolledback_instance_count: The number of instances which failed to rollback. :vartype failed_rolledback_instance_count: int :ivar rollback_error: Error details if OS rollback failed. - :vartype rollback_error: ~azure.mgmt.compute.v2024_11_01.models.ApiError + :vartype rollback_error: ~azure.mgmt.compute.v2024_07_01.models.ApiError """ _validation = { @@ -7202,9 +6865,9 @@ class RollbackStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successfully_rolledback_instance_count = None - self.failed_rolledback_instance_count = None - self.rollback_error = None + self.successfully_rolledback_instance_count: Optional[int] = None + self.failed_rolledback_instance_count: Optional[int] = None + self.rollback_error: Optional["_models.ApiError"] = None class RollingUpgradePolicy(_serialization.Model): @@ -7356,10 +7019,10 @@ class RollingUpgradeProgressInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.successful_instance_count = None - self.failed_instance_count = None - self.in_progress_instance_count = None - self.pending_instance_count = None + self.successful_instance_count: Optional[int] = None + self.failed_instance_count: Optional[int] = None + self.in_progress_instance_count: Optional[int] = None + self.pending_instance_count: Optional[int] = None class RollingUpgradeRunningStatus(_serialization.Model): @@ -7369,12 +7032,12 @@ class RollingUpgradeRunningStatus(_serialization.Model): :ivar code: Code indicating the current status of the upgrade. Known values are: "RollingForward", "Cancelled", "Completed", and "Faulted". - :vartype code: str or ~azure.mgmt.compute.v2024_11_01.models.RollingUpgradeStatusCode + :vartype code: str or ~azure.mgmt.compute.v2024_07_01.models.RollingUpgradeStatusCode :ivar start_time: Start time of the upgrade. :vartype start_time: ~datetime.datetime :ivar last_action: The last action performed on the rolling upgrade. Known values are: "Start" and "Cancel". - :vartype last_action: str or ~azure.mgmt.compute.v2024_11_01.models.RollingUpgradeActionType + :vartype last_action: str or ~azure.mgmt.compute.v2024_07_01.models.RollingUpgradeActionType :ivar last_action_time: Last action time of the upgrade. :vartype last_action_time: ~datetime.datetime """ @@ -7396,10 +7059,10 @@ class RollingUpgradeRunningStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.last_action = None - self.last_action_time = None + self.code: Optional[Union[str, "_models.RollingUpgradeStatusCode"]] = None + self.start_time: Optional[datetime.datetime] = None + self.last_action: Optional[Union[str, "_models.RollingUpgradeActionType"]] = None + self.last_action_time: Optional[datetime.datetime] = None class RollingUpgradeStatusInfo(Resource): @@ -7420,14 +7083,14 @@ class RollingUpgradeStatusInfo(Resource): :ivar tags: Resource tags. :vartype tags: dict[str, str] :ivar policy: The rolling upgrade policies applied for this upgrade. - :vartype policy: ~azure.mgmt.compute.v2024_11_01.models.RollingUpgradePolicy + :vartype policy: ~azure.mgmt.compute.v2024_07_01.models.RollingUpgradePolicy :ivar running_status: Information about the current running state of the overall upgrade. - :vartype running_status: ~azure.mgmt.compute.v2024_11_01.models.RollingUpgradeRunningStatus + :vartype running_status: ~azure.mgmt.compute.v2024_07_01.models.RollingUpgradeRunningStatus :ivar progress: Information about the number of virtual machine instances in each upgrade state. - :vartype progress: ~azure.mgmt.compute.v2024_11_01.models.RollingUpgradeProgressInfo + :vartype progress: ~azure.mgmt.compute.v2024_07_01.models.RollingUpgradeProgressInfo :ivar error: Error details for this upgrade, if there are any. - :vartype error: ~azure.mgmt.compute.v2024_11_01.models.ApiError + :vartype error: ~azure.mgmt.compute.v2024_07_01.models.ApiError """ _validation = { @@ -7461,10 +7124,10 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(location=location, tags=tags, **kwargs) - self.policy = None - self.running_status = None - self.progress = None - self.error = None + self.policy: Optional["_models.RollingUpgradePolicy"] = None + self.running_status: Optional["_models.RollingUpgradeRunningStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None class RunCommandDocumentBase(_serialization.Model): @@ -7477,7 +7140,7 @@ class RunCommandDocumentBase(_serialization.Model): :ivar id: The VM run command id. Required. :vartype id: str :ivar os_type: The Operating System type. Required. Known values are: "Windows" and "Linux". - :vartype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :vartype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes :ivar label: The VM run command label. Required. :vartype label: str :ivar description: The VM run command description. Required. @@ -7516,7 +7179,7 @@ def __init__( :keyword id: The VM run command id. Required. :paramtype id: str :keyword os_type: The Operating System type. Required. Known values are: "Windows" and "Linux". - :paramtype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :paramtype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes :keyword label: The VM run command label. Required. :paramtype label: str :keyword description: The VM run command description. Required. @@ -7540,7 +7203,7 @@ class RunCommandDocument(RunCommandDocumentBase): :ivar id: The VM run command id. Required. :vartype id: str :ivar os_type: The Operating System type. Required. Known values are: "Windows" and "Linux". - :vartype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :vartype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes :ivar label: The VM run command label. Required. :vartype label: str :ivar description: The VM run command description. Required. @@ -7548,7 +7211,7 @@ class RunCommandDocument(RunCommandDocumentBase): :ivar script: The script to be executed. Required. :vartype script: list[str] :ivar parameters: The parameters used by the script. - :vartype parameters: list[~azure.mgmt.compute.v2024_11_01.models.RunCommandParameterDefinition] + :vartype parameters: list[~azure.mgmt.compute.v2024_07_01.models.RunCommandParameterDefinition] """ _validation = { @@ -7588,7 +7251,7 @@ def __init__( :keyword id: The VM run command id. Required. :paramtype id: str :keyword os_type: The Operating System type. Required. Known values are: "Windows" and "Linux". - :paramtype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :paramtype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes :keyword label: The VM run command label. Required. :paramtype label: str :keyword description: The VM run command description. Required. @@ -7597,7 +7260,7 @@ def __init__( :paramtype script: list[str] :keyword parameters: The parameters used by the script. :paramtype parameters: - list[~azure.mgmt.compute.v2024_11_01.models.RunCommandParameterDefinition] + list[~azure.mgmt.compute.v2024_07_01.models.RunCommandParameterDefinition] """ super().__init__(schema=schema, id=id, os_type=os_type, label=label, description=description, **kwargs) self.script = script @@ -7615,7 +7278,7 @@ class RunCommandInput(_serialization.Model): will override the default script of the command. :vartype script: list[str] :ivar parameters: The run command parameters. - :vartype parameters: list[~azure.mgmt.compute.v2024_11_01.models.RunCommandInputParameter] + :vartype parameters: list[~azure.mgmt.compute.v2024_07_01.models.RunCommandInputParameter] """ _validation = { @@ -7643,7 +7306,7 @@ def __init__( script will override the default script of the command. :paramtype script: list[str] :keyword parameters: The run command parameters. - :paramtype parameters: list[~azure.mgmt.compute.v2024_11_01.models.RunCommandInputParameter] + :paramtype parameters: list[~azure.mgmt.compute.v2024_07_01.models.RunCommandInputParameter] """ super().__init__(**kwargs) self.command_id = command_id @@ -7690,7 +7353,7 @@ class RunCommandListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of virtual machine run commands. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.RunCommandDocumentBase] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.RunCommandDocumentBase] :ivar next_link: The uri to fetch the next page of run commands. Call ListNext() with this to fetch the next page of run commands. :vartype next_link: str @@ -7710,7 +7373,7 @@ def __init__( ) -> None: """ :keyword value: The list of virtual machine run commands. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.RunCommandDocumentBase] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.RunCommandDocumentBase] :keyword next_link: The uri to fetch the next page of run commands. Call ListNext() with this to fetch the next page of run commands. :paramtype next_link: str @@ -7808,7 +7471,7 @@ class RunCommandResult(_serialization.Model): """RunCommandResult. :ivar value: Run command operation response. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ _attribute_map = { @@ -7818,7 +7481,7 @@ class RunCommandResult(_serialization.Model): def __init__(self, *, value: Optional[List["_models.InstanceViewStatus"]] = None, **kwargs: Any) -> None: """ :keyword value: Run command operation response. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) self.value = value @@ -7842,21 +7505,16 @@ class ScaleInPolicy(_serialization.Model): balanced across zones. Within each zone, the newest virtual machines that are not protected will be chosen for removal. :code:`
    `\\ :code:`
    `. :vartype rules: list[str or - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetScaleInRules] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetScaleInRules] :ivar force_deletion: This property allows you to specify if virtual machines chosen for removal have to be force deleted when a virtual machine scale set is being scaled-in.(Feature in Preview). :vartype force_deletion: bool - :ivar prioritize_unhealthy_v_ms: This property allows you to prioritize the deletion of - unhealthy and inactive VMs when a virtual machine scale set is being scaled-in.(Feature in - Preview). - :vartype prioritize_unhealthy_v_ms: bool """ _attribute_map = { "rules": {"key": "rules", "type": "[str]"}, "force_deletion": {"key": "forceDeletion", "type": "bool"}, - "prioritize_unhealthy_v_ms": {"key": "prioritizeUnhealthyVMs", "type": "bool"}, } def __init__( @@ -7864,7 +7522,6 @@ def __init__( *, rules: Optional[List[Union[str, "_models.VirtualMachineScaleSetScaleInRules"]]] = None, force_deletion: Optional[bool] = None, - prioritize_unhealthy_v_ms: Optional[bool] = None, **kwargs: Any ) -> None: """ @@ -7883,20 +7540,15 @@ def __init__( balanced across zones. Within each zone, the newest virtual machines that are not protected will be chosen for removal. :code:`
    `\\ :code:`
    `. :paramtype rules: list[str or - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetScaleInRules] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetScaleInRules] :keyword force_deletion: This property allows you to specify if virtual machines chosen for removal have to be force deleted when a virtual machine scale set is being scaled-in.(Feature in Preview). :paramtype force_deletion: bool - :keyword prioritize_unhealthy_v_ms: This property allows you to prioritize the deletion of - unhealthy and inactive VMs when a virtual machine scale set is being scaled-in.(Feature in - Preview). - :paramtype prioritize_unhealthy_v_ms: bool """ super().__init__(**kwargs) self.rules = rules self.force_deletion = force_deletion - self.prioritize_unhealthy_v_ms = prioritize_unhealthy_v_ms class ScheduledEventsAdditionalPublishingTargets(_serialization.Model): # pylint: disable=name-too-long @@ -7905,7 +7557,7 @@ class ScheduledEventsAdditionalPublishingTargets(_serialization.Model): # pylin :ivar event_grid_and_resource_graph: The configuration parameters used while creating eventGridAndResourceGraph Scheduled Event setting. :vartype event_grid_and_resource_graph: - ~azure.mgmt.compute.v2024_11_01.models.EventGridAndResourceGraph + ~azure.mgmt.compute.v2024_07_01.models.EventGridAndResourceGraph """ _attribute_map = { @@ -7919,7 +7571,7 @@ def __init__( :keyword event_grid_and_resource_graph: The configuration parameters used while creating eventGridAndResourceGraph Scheduled Event setting. :paramtype event_grid_and_resource_graph: - ~azure.mgmt.compute.v2024_11_01.models.EventGridAndResourceGraph + ~azure.mgmt.compute.v2024_07_01.models.EventGridAndResourceGraph """ super().__init__(**kwargs) self.event_grid_and_resource_graph = event_grid_and_resource_graph @@ -7931,14 +7583,14 @@ class ScheduledEventsPolicy(_serialization.Model): :ivar user_initiated_redeploy: The configuration parameters used while creating userInitiatedRedeploy scheduled event setting creation. - :vartype user_initiated_redeploy: ~azure.mgmt.compute.v2024_11_01.models.UserInitiatedRedeploy + :vartype user_initiated_redeploy: ~azure.mgmt.compute.v2024_07_01.models.UserInitiatedRedeploy :ivar user_initiated_reboot: The configuration parameters used while creating userInitiatedReboot scheduled event setting creation. - :vartype user_initiated_reboot: ~azure.mgmt.compute.v2024_11_01.models.UserInitiatedReboot + :vartype user_initiated_reboot: ~azure.mgmt.compute.v2024_07_01.models.UserInitiatedReboot :ivar scheduled_events_additional_publishing_targets: The configuration parameters used while publishing scheduledEventsAdditionalPublishingTargets. :vartype scheduled_events_additional_publishing_targets: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsAdditionalPublishingTargets + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsAdditionalPublishingTargets """ _attribute_map = { @@ -7964,14 +7616,14 @@ def __init__( :keyword user_initiated_redeploy: The configuration parameters used while creating userInitiatedRedeploy scheduled event setting creation. :paramtype user_initiated_redeploy: - ~azure.mgmt.compute.v2024_11_01.models.UserInitiatedRedeploy + ~azure.mgmt.compute.v2024_07_01.models.UserInitiatedRedeploy :keyword user_initiated_reboot: The configuration parameters used while creating userInitiatedReboot scheduled event setting creation. - :paramtype user_initiated_reboot: ~azure.mgmt.compute.v2024_11_01.models.UserInitiatedReboot + :paramtype user_initiated_reboot: ~azure.mgmt.compute.v2024_07_01.models.UserInitiatedReboot :keyword scheduled_events_additional_publishing_targets: The configuration parameters used while publishing scheduledEventsAdditionalPublishingTargets. :paramtype scheduled_events_additional_publishing_targets: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsAdditionalPublishingTargets + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsAdditionalPublishingTargets """ super().__init__(**kwargs) self.user_initiated_redeploy = user_initiated_redeploy @@ -7985,10 +7637,10 @@ class ScheduledEventsProfile(_serialization.Model): :ivar terminate_notification_profile: Specifies Terminate Scheduled Event related configurations. :vartype terminate_notification_profile: - ~azure.mgmt.compute.v2024_11_01.models.TerminateNotificationProfile + ~azure.mgmt.compute.v2024_07_01.models.TerminateNotificationProfile :ivar os_image_notification_profile: Specifies OS Image Scheduled Event related configurations. :vartype os_image_notification_profile: - ~azure.mgmt.compute.v2024_11_01.models.OSImageNotificationProfile + ~azure.mgmt.compute.v2024_07_01.models.OSImageNotificationProfile """ _attribute_map = { @@ -8010,11 +7662,11 @@ def __init__( :keyword terminate_notification_profile: Specifies Terminate Scheduled Event related configurations. :paramtype terminate_notification_profile: - ~azure.mgmt.compute.v2024_11_01.models.TerminateNotificationProfile + ~azure.mgmt.compute.v2024_07_01.models.TerminateNotificationProfile :keyword os_image_notification_profile: Specifies OS Image Scheduled Event related configurations. :paramtype os_image_notification_profile: - ~azure.mgmt.compute.v2024_11_01.models.OSImageNotificationProfile + ~azure.mgmt.compute.v2024_07_01.models.OSImageNotificationProfile """ super().__init__(**kwargs) self.terminate_notification_profile = terminate_notification_profile @@ -8027,7 +7679,7 @@ class SecurityPostureReference(_serialization.Model): All required parameters must be populated in order to send to server. :ivar id: The security posture reference id in the form of - /CommunityGalleries/{communityGalleryName}/securityPostures/{securityPostureName}/versions/{major.minor.patch}|latest. # pylint: disable=line-too-long + /CommunityGalleries/{communityGalleryName}/securityPostures/{securityPostureName}/versions/{major.minor.patch}|latest. Required. :vartype id: str :ivar exclude_extensions: The list of virtual machine extension names to exclude when applying @@ -8057,7 +7709,7 @@ def __init__( ) -> None: """ :keyword id: The security posture reference id in the form of - /CommunityGalleries/{communityGalleryName}/securityPostures/{securityPostureName}/versions/{major.minor.patch}|latest. # pylint: disable=line-too-long + /CommunityGalleries/{communityGalleryName}/securityPostures/{securityPostureName}/versions/{major.minor.patch}|latest. Required. :paramtype id: str :keyword exclude_extensions: The list of virtual machine extension names to exclude when @@ -8076,7 +7728,7 @@ class SecurityPostureReferenceUpdate(_serialization.Model): """Specifies the security posture to be used in the scale set. Minimum api-version: 2023-03-01. :ivar id: The security posture reference id in the form of - /CommunityGalleries/{communityGalleryName}/securityPostures/{securityPostureName}/versions/{major.minor.patch}|latest. # pylint: disable=line-too-long + /CommunityGalleries/{communityGalleryName}/securityPostures/{securityPostureName}/versions/{major.minor.patch}|latest. :vartype id: str :ivar exclude_extensions: The list of virtual machine extension names to exclude when applying the security posture. @@ -8101,7 +7753,7 @@ def __init__( ) -> None: """ :keyword id: The security posture reference id in the form of - /CommunityGalleries/{communityGalleryName}/securityPostures/{securityPostureName}/versions/{major.minor.patch}|latest. # pylint: disable=line-too-long + /CommunityGalleries/{communityGalleryName}/securityPostures/{securityPostureName}/versions/{major.minor.patch}|latest. :paramtype id: str :keyword exclude_extensions: The list of virtual machine extension names to exclude when applying the security posture. @@ -8120,7 +7772,7 @@ class SecurityProfile(_serialization.Model): :ivar uefi_settings: Specifies the security settings like secure boot and vTPM used while creating the virtual machine. Minimum api-version: 2020-12-01. - :vartype uefi_settings: ~azure.mgmt.compute.v2024_11_01.models.UefiSettings + :vartype uefi_settings: ~azure.mgmt.compute.v2024_07_01.models.UefiSettings :ivar encryption_at_host: This property can be used by user in the request to enable or disable the Host Encryption for the virtual machine or virtual machine scale set. This will enable the encryption for all the disks including Resource/Temp disk at host itself. The default behavior @@ -8130,13 +7782,13 @@ class SecurityProfile(_serialization.Model): :ivar security_type: Specifies the SecurityType of the virtual machine. It has to be set to any specified value to enable UefiSettings. The default behavior is: UefiSettings will not be enabled unless this property is set. Known values are: "TrustedLaunch" and "ConfidentialVM". - :vartype security_type: str or ~azure.mgmt.compute.v2024_11_01.models.SecurityTypes + :vartype security_type: str or ~azure.mgmt.compute.v2024_07_01.models.SecurityTypes :ivar encryption_identity: Specifies the Managed Identity used by ADE to get access token for keyvault operations. - :vartype encryption_identity: ~azure.mgmt.compute.v2024_11_01.models.EncryptionIdentity + :vartype encryption_identity: ~azure.mgmt.compute.v2024_07_01.models.EncryptionIdentity :ivar proxy_agent_settings: Specifies ProxyAgent settings while creating the virtual machine. Minimum api-version: 2023-09-01. - :vartype proxy_agent_settings: ~azure.mgmt.compute.v2024_11_01.models.ProxyAgentSettings + :vartype proxy_agent_settings: ~azure.mgmt.compute.v2024_07_01.models.ProxyAgentSettings """ _attribute_map = { @@ -8160,7 +7812,7 @@ def __init__( """ :keyword uefi_settings: Specifies the security settings like secure boot and vTPM used while creating the virtual machine. Minimum api-version: 2020-12-01. - :paramtype uefi_settings: ~azure.mgmt.compute.v2024_11_01.models.UefiSettings + :paramtype uefi_settings: ~azure.mgmt.compute.v2024_07_01.models.UefiSettings :keyword encryption_at_host: This property can be used by user in the request to enable or disable the Host Encryption for the virtual machine or virtual machine scale set. This will enable the encryption for all the disks including Resource/Temp disk at host itself. The @@ -8170,13 +7822,13 @@ def __init__( :keyword security_type: Specifies the SecurityType of the virtual machine. It has to be set to any specified value to enable UefiSettings. The default behavior is: UefiSettings will not be enabled unless this property is set. Known values are: "TrustedLaunch" and "ConfidentialVM". - :paramtype security_type: str or ~azure.mgmt.compute.v2024_11_01.models.SecurityTypes + :paramtype security_type: str or ~azure.mgmt.compute.v2024_07_01.models.SecurityTypes :keyword encryption_identity: Specifies the Managed Identity used by ADE to get access token for keyvault operations. - :paramtype encryption_identity: ~azure.mgmt.compute.v2024_11_01.models.EncryptionIdentity + :paramtype encryption_identity: ~azure.mgmt.compute.v2024_07_01.models.EncryptionIdentity :keyword proxy_agent_settings: Specifies ProxyAgent settings while creating the virtual machine. Minimum api-version: 2023-09-01. - :paramtype proxy_agent_settings: ~azure.mgmt.compute.v2024_11_01.models.ProxyAgentSettings + :paramtype proxy_agent_settings: ~azure.mgmt.compute.v2024_07_01.models.ProxyAgentSettings """ super().__init__(**kwargs) self.uefi_settings = uefi_settings @@ -8191,7 +7843,7 @@ class ServiceArtifactReference(_serialization.Model): machines in the scale set when using 'latest' image version. Minimum api-version: 2022-11-01. :ivar id: The service artifact reference id in the form of - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/galleries/{galleryName}/serviceArtifacts/{serviceArtifactName}/vmArtifactsProfiles/{vmArtifactsProfilesName}. # pylint: disable=line-too-long + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/galleries/{galleryName}/serviceArtifacts/{serviceArtifactName}/vmArtifactsProfiles/{vmArtifactsProfilesName}. :vartype id: str """ @@ -8202,7 +7854,7 @@ class ServiceArtifactReference(_serialization.Model): def __init__(self, *, id: Optional[str] = None, **kwargs: Any) -> None: # pylint: disable=redefined-builtin """ :keyword id: The service artifact reference id in the form of - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/galleries/{galleryName}/serviceArtifacts/{serviceArtifactName}/vmArtifactsProfiles/{vmArtifactsProfilesName}. # pylint: disable=line-too-long + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/galleries/{galleryName}/serviceArtifacts/{serviceArtifactName}/vmArtifactsProfiles/{vmArtifactsProfilesName}. :paramtype id: str """ super().__init__(**kwargs) @@ -8254,11 +7906,11 @@ class SkuProfile(_serialization.Model): able to specify a list of VM sizes and an allocation strategy. :ivar vm_sizes: Specifies the VM sizes for the virtual machine scale set. - :vartype vm_sizes: list[~azure.mgmt.compute.v2024_11_01.models.SkuProfileVMSize] + :vartype vm_sizes: list[~azure.mgmt.compute.v2024_07_01.models.SkuProfileVMSize] :ivar allocation_strategy: Specifies the allocation strategy for the virtual machine scale set - based on which the VMs will be allocated. Known values are: "LowestPrice", "CapacityOptimized", - and "Prioritized". - :vartype allocation_strategy: str or ~azure.mgmt.compute.v2024_11_01.models.AllocationStrategy + based on which the VMs will be allocated. Known values are: "LowestPrice" and + "CapacityOptimized". + :vartype allocation_strategy: str or ~azure.mgmt.compute.v2024_07_01.models.AllocationStrategy """ _attribute_map = { @@ -8275,12 +7927,12 @@ def __init__( ) -> None: """ :keyword vm_sizes: Specifies the VM sizes for the virtual machine scale set. - :paramtype vm_sizes: list[~azure.mgmt.compute.v2024_11_01.models.SkuProfileVMSize] + :paramtype vm_sizes: list[~azure.mgmt.compute.v2024_07_01.models.SkuProfileVMSize] :keyword allocation_strategy: Specifies the allocation strategy for the virtual machine scale - set based on which the VMs will be allocated. Known values are: "LowestPrice", - "CapacityOptimized", and "Prioritized". + set based on which the VMs will be allocated. Known values are: "LowestPrice" and + "CapacityOptimized". :paramtype allocation_strategy: str or - ~azure.mgmt.compute.v2024_11_01.models.AllocationStrategy + ~azure.mgmt.compute.v2024_07_01.models.AllocationStrategy """ super().__init__(**kwargs) self.vm_sizes = vm_sizes @@ -8292,29 +7944,19 @@ class SkuProfileVMSize(_serialization.Model): :ivar name: Specifies the name of the VM Size. :vartype name: str - :ivar rank: Specifies the rank (a.k.a priority) associated with the VM Size. - :vartype rank: int """ - _validation = { - "rank": {"minimum": 0}, - } - _attribute_map = { "name": {"key": "name", "type": "str"}, - "rank": {"key": "rank", "type": "int"}, } - def __init__(self, *, name: Optional[str] = None, rank: Optional[int] = None, **kwargs: Any) -> None: + def __init__(self, *, name: Optional[str] = None, **kwargs: Any) -> None: """ :keyword name: Specifies the name of the VM Size. :paramtype name: str - :keyword rank: Specifies the rank (a.k.a priority) associated with the VM Size. - :paramtype rank: int """ super().__init__(**kwargs) self.name = name - self.rank = rank class SpotRestorePolicy(_serialization.Model): @@ -8354,7 +7996,7 @@ class SshConfiguration(_serialization.Model): """SSH configuration for Linux based VMs running on Azure. :ivar public_keys: The list of SSH public keys used to authenticate with linux based VMs. - :vartype public_keys: list[~azure.mgmt.compute.v2024_11_01.models.SshPublicKey] + :vartype public_keys: list[~azure.mgmt.compute.v2024_07_01.models.SshPublicKey] """ _attribute_map = { @@ -8364,7 +8006,7 @@ class SshConfiguration(_serialization.Model): def __init__(self, *, public_keys: Optional[List["_models.SshPublicKey"]] = None, **kwargs: Any) -> None: """ :keyword public_keys: The list of SSH public keys used to authenticate with linux based VMs. - :paramtype public_keys: list[~azure.mgmt.compute.v2024_11_01.models.SshPublicKey] + :paramtype public_keys: list[~azure.mgmt.compute.v2024_07_01.models.SshPublicKey] """ super().__init__(**kwargs) self.public_keys = public_keys @@ -8376,7 +8018,7 @@ class SshGenerateKeyPairInputParameters(_serialization.Model): :ivar encryption_type: The encryption type of the SSH keys to be generated. See SshEncryptionTypes for possible set of values. If not provided, will default to RSA. Known values are: "RSA" and "Ed25519". - :vartype encryption_type: str or ~azure.mgmt.compute.v2024_11_01.models.SshEncryptionTypes + :vartype encryption_type: str or ~azure.mgmt.compute.v2024_07_01.models.SshEncryptionTypes """ _attribute_map = { @@ -8390,7 +8032,7 @@ def __init__( :keyword encryption_type: The encryption type of the SSH keys to be generated. See SshEncryptionTypes for possible set of values. If not provided, will default to RSA. Known values are: "RSA" and "Ed25519". - :paramtype encryption_type: str or ~azure.mgmt.compute.v2024_11_01.models.SshEncryptionTypes + :paramtype encryption_type: str or ~azure.mgmt.compute.v2024_07_01.models.SshEncryptionTypes """ super().__init__(**kwargs) self.encryption_type = encryption_type @@ -8446,7 +8088,7 @@ class SshPublicKeyGenerateKeyPairResult(_serialization.Model): through ssh. The public key is in ssh-rsa format. Required. :vartype public_key: str :ivar id: The ARM resource id in the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. Required. :vartype id: str """ @@ -8475,7 +8117,7 @@ def __init__( machine through ssh. The public key is in ssh-rsa format. Required. :paramtype public_key: str :keyword id: The ARM resource id in the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}. Required. :paramtype id: str """ @@ -8549,7 +8191,7 @@ class SshPublicKeysGroupListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of SSH public keys. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource] :ivar next_link: The URI to fetch the next page of SSH public keys. Call ListNext() with this URI to fetch the next page of SSH public keys. :vartype next_link: str @@ -8569,7 +8211,7 @@ def __init__( ) -> None: """ :keyword value: The list of SSH public keys. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource] :keyword next_link: The URI to fetch the next page of SSH public keys. Call ListNext() with this URI to fetch the next page of SSH public keys. :paramtype next_link: str @@ -8619,15 +8261,15 @@ class StorageProfile(_serialization.Model): information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations. - :vartype image_reference: ~azure.mgmt.compute.v2024_11_01.models.ImageReference + :vartype image_reference: ~azure.mgmt.compute.v2024_07_01.models.ImageReference :ivar os_disk: Specifies information about the operating system disk used by the virtual machine. For more information about disks, see `About disks and VHDs for Azure virtual machines `_. - :vartype os_disk: ~azure.mgmt.compute.v2024_11_01.models.OSDisk + :vartype os_disk: ~azure.mgmt.compute.v2024_07_01.models.OSDisk :ivar data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. For more information about disks, see `About disks and VHDs for Azure virtual machines `_. - :vartype data_disks: list[~azure.mgmt.compute.v2024_11_01.models.DataDisk] + :vartype data_disks: list[~azure.mgmt.compute.v2024_07_01.models.DataDisk] :ivar disk_controller_type: Specifies the disk controller type configured for the VM. **Note:** This property will be set to the default disk controller type if not specified provided virtual machine is being created with 'hyperVGeneration' set to V2 based on the capabilities of the @@ -8636,11 +8278,7 @@ class StorageProfile(_serialization.Model): in the VM configuration which implicitly deallocates and reallocates the VM. Minimum api-version: 2022-08-01. Known values are: "SCSI" and "NVMe". :vartype disk_controller_type: str or - ~azure.mgmt.compute.v2024_11_01.models.DiskControllerTypes - :ivar align_regional_disks_to_vm_zone: Specifies whether the regional disks should be - aligned/moved to the VM zone. This is applicable only for VMs with placement property set. - Please note that this change is irreversible. Minimum api-version: 2024-11-01. - :vartype align_regional_disks_to_vm_zone: bool + ~azure.mgmt.compute.v2024_07_01.models.DiskControllerTypes """ _attribute_map = { @@ -8648,7 +8286,6 @@ class StorageProfile(_serialization.Model): "os_disk": {"key": "osDisk", "type": "OSDisk"}, "data_disks": {"key": "dataDisks", "type": "[DataDisk]"}, "disk_controller_type": {"key": "diskControllerType", "type": "str"}, - "align_regional_disks_to_vm_zone": {"key": "alignRegionalDisksToVMZone", "type": "bool"}, } def __init__( @@ -8658,7 +8295,6 @@ def __init__( os_disk: Optional["_models.OSDisk"] = None, data_disks: Optional[List["_models.DataDisk"]] = None, disk_controller_type: Optional[Union[str, "_models.DiskControllerTypes"]] = None, - align_regional_disks_to_vm_zone: Optional[bool] = None, **kwargs: Any ) -> None: """ @@ -8666,15 +8302,15 @@ def __init__( information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations. - :paramtype image_reference: ~azure.mgmt.compute.v2024_11_01.models.ImageReference + :paramtype image_reference: ~azure.mgmt.compute.v2024_07_01.models.ImageReference :keyword os_disk: Specifies information about the operating system disk used by the virtual machine. For more information about disks, see `About disks and VHDs for Azure virtual machines `_. - :paramtype os_disk: ~azure.mgmt.compute.v2024_11_01.models.OSDisk + :paramtype os_disk: ~azure.mgmt.compute.v2024_07_01.models.OSDisk :keyword data_disks: Specifies the parameters that are used to add a data disk to a virtual machine. For more information about disks, see `About disks and VHDs for Azure virtual machines `_. - :paramtype data_disks: list[~azure.mgmt.compute.v2024_11_01.models.DataDisk] + :paramtype data_disks: list[~azure.mgmt.compute.v2024_07_01.models.DataDisk] :keyword disk_controller_type: Specifies the disk controller type configured for the VM. **Note:** This property will be set to the default disk controller type if not specified provided virtual machine is being created with 'hyperVGeneration' set to V2 based on the @@ -8683,18 +8319,13 @@ def __init__( updating the VM size in the VM configuration which implicitly deallocates and reallocates the VM. Minimum api-version: 2022-08-01. Known values are: "SCSI" and "NVMe". :paramtype disk_controller_type: str or - ~azure.mgmt.compute.v2024_11_01.models.DiskControllerTypes - :keyword align_regional_disks_to_vm_zone: Specifies whether the regional disks should be - aligned/moved to the VM zone. This is applicable only for VMs with placement property set. - Please note that this change is irreversible. Minimum api-version: 2024-11-01. - :paramtype align_regional_disks_to_vm_zone: bool + ~azure.mgmt.compute.v2024_07_01.models.DiskControllerTypes """ super().__init__(**kwargs) self.image_reference = image_reference self.os_disk = os_disk self.data_disks = data_disks self.disk_controller_type = disk_controller_type - self.align_regional_disks_to_vm_zone = align_regional_disks_to_vm_zone class SubResourceWithColocationStatus(SubResource): @@ -8704,7 +8335,7 @@ class SubResourceWithColocationStatus(SubResource): :vartype id: str :ivar colocation_status: Describes colocation status of a resource in the Proximity Placement Group. - :vartype colocation_status: ~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus + :vartype colocation_status: ~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus """ _attribute_map = { @@ -8724,7 +8355,7 @@ def __init__( :paramtype id: str :keyword colocation_status: Describes colocation status of a resource in the Proximity Placement Group. - :paramtype colocation_status: ~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus + :paramtype colocation_status: ~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus """ super().__init__(id=id, **kwargs) self.colocation_status = colocation_status @@ -8756,8 +8387,8 @@ class SystemData(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.created_at = None - self.last_modified_at = None + self.created_at: Optional[datetime.datetime] = None + self.last_modified_at: Optional[datetime.datetime] = None class TerminateNotificationProfile(_serialization.Model): @@ -8859,7 +8490,7 @@ class UpgradeOperationHistoricalStatusInfo(_serialization.Model): :ivar properties: Information about the properties of the upgrade operation. :vartype properties: - ~azure.mgmt.compute.v2024_11_01.models.UpgradeOperationHistoricalStatusInfoProperties + ~azure.mgmt.compute.v2024_07_01.models.UpgradeOperationHistoricalStatusInfoProperties :ivar type: Resource type. :vartype type: str :ivar location: Resource location. @@ -8881,9 +8512,9 @@ class UpgradeOperationHistoricalStatusInfo(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.properties = None - self.type = None - self.location = None + self.properties: Optional["_models.UpgradeOperationHistoricalStatusInfoProperties"] = None + self.type: Optional[str] = None + self.location: Optional[str] = None class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # pylint: disable=name-too-long @@ -8892,18 +8523,18 @@ class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # p Variables are only populated by the server, and will be ignored when sending a request. :ivar running_status: Information about the overall status of the upgrade operation. - :vartype running_status: ~azure.mgmt.compute.v2024_11_01.models.UpgradeOperationHistoryStatus + :vartype running_status: ~azure.mgmt.compute.v2024_07_01.models.UpgradeOperationHistoryStatus :ivar progress: Counts of the VMs in each state. - :vartype progress: ~azure.mgmt.compute.v2024_11_01.models.RollingUpgradeProgressInfo + :vartype progress: ~azure.mgmt.compute.v2024_07_01.models.RollingUpgradeProgressInfo :ivar error: Error Details for this upgrade if there are any. - :vartype error: ~azure.mgmt.compute.v2024_11_01.models.ApiError + :vartype error: ~azure.mgmt.compute.v2024_07_01.models.ApiError :ivar started_by: Invoker of the Upgrade Operation. Known values are: "Unknown", "User", and "Platform". - :vartype started_by: str or ~azure.mgmt.compute.v2024_11_01.models.UpgradeOperationInvoker + :vartype started_by: str or ~azure.mgmt.compute.v2024_07_01.models.UpgradeOperationInvoker :ivar target_image_reference: Image Reference details. - :vartype target_image_reference: ~azure.mgmt.compute.v2024_11_01.models.ImageReference + :vartype target_image_reference: ~azure.mgmt.compute.v2024_07_01.models.ImageReference :ivar rollback_info: Information about OS rollback if performed. - :vartype rollback_info: ~azure.mgmt.compute.v2024_11_01.models.RollbackStatusInfo + :vartype rollback_info: ~azure.mgmt.compute.v2024_07_01.models.RollbackStatusInfo """ _validation = { @@ -8927,12 +8558,12 @@ class UpgradeOperationHistoricalStatusInfoProperties(_serialization.Model): # p def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.running_status = None - self.progress = None - self.error = None - self.started_by = None - self.target_image_reference = None - self.rollback_info = None + self.running_status: Optional["_models.UpgradeOperationHistoryStatus"] = None + self.progress: Optional["_models.RollingUpgradeProgressInfo"] = None + self.error: Optional["_models.ApiError"] = None + self.started_by: Optional[Union[str, "_models.UpgradeOperationInvoker"]] = None + self.target_image_reference: Optional["_models.ImageReference"] = None + self.rollback_info: Optional["_models.RollbackStatusInfo"] = None class UpgradeOperationHistoryStatus(_serialization.Model): @@ -8942,7 +8573,7 @@ class UpgradeOperationHistoryStatus(_serialization.Model): :ivar code: Code indicating the current status of the upgrade. Known values are: "RollingForward", "Cancelled", "Completed", and "Faulted". - :vartype code: str or ~azure.mgmt.compute.v2024_11_01.models.UpgradeState + :vartype code: str or ~azure.mgmt.compute.v2024_07_01.models.UpgradeState :ivar start_time: Start time of the upgrade. :vartype start_time: ~datetime.datetime :ivar end_time: End time of the upgrade. @@ -8964,9 +8595,9 @@ class UpgradeOperationHistoryStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.start_time = None - self.end_time = None + self.code: Optional[Union[str, "_models.UpgradeState"]] = None + self.start_time: Optional[datetime.datetime] = None + self.end_time: Optional[datetime.datetime] = None class UpgradePolicy(_serialization.Model): @@ -8978,14 +8609,14 @@ class UpgradePolicy(_serialization.Model): the manualUpgrade action.\\ :code:`
    `\\ :code:`
    ` **Automatic** - All virtual machines in the scale set are automatically updated at the same time. Known values are: "Automatic", "Manual", and "Rolling". - :vartype mode: str or ~azure.mgmt.compute.v2024_11_01.models.UpgradeMode + :vartype mode: str or ~azure.mgmt.compute.v2024_07_01.models.UpgradeMode :ivar rolling_upgrade_policy: The configuration parameters used while performing a rolling upgrade. - :vartype rolling_upgrade_policy: ~azure.mgmt.compute.v2024_11_01.models.RollingUpgradePolicy + :vartype rolling_upgrade_policy: ~azure.mgmt.compute.v2024_07_01.models.RollingUpgradePolicy :ivar automatic_os_upgrade_policy: Configuration parameters used for performing automatic OS Upgrade. :vartype automatic_os_upgrade_policy: - ~azure.mgmt.compute.v2024_11_01.models.AutomaticOSUpgradePolicy + ~azure.mgmt.compute.v2024_07_01.models.AutomaticOSUpgradePolicy """ _attribute_map = { @@ -9009,14 +8640,14 @@ def __init__( do this by using the manualUpgrade action.\\ :code:`
    `\\ :code:`
    ` **Automatic** - All virtual machines in the scale set are automatically updated at the same time. Known values are: "Automatic", "Manual", and "Rolling". - :paramtype mode: str or ~azure.mgmt.compute.v2024_11_01.models.UpgradeMode + :paramtype mode: str or ~azure.mgmt.compute.v2024_07_01.models.UpgradeMode :keyword rolling_upgrade_policy: The configuration parameters used while performing a rolling upgrade. - :paramtype rolling_upgrade_policy: ~azure.mgmt.compute.v2024_11_01.models.RollingUpgradePolicy + :paramtype rolling_upgrade_policy: ~azure.mgmt.compute.v2024_07_01.models.RollingUpgradePolicy :keyword automatic_os_upgrade_policy: Configuration parameters used for performing automatic OS Upgrade. :paramtype automatic_os_upgrade_policy: - ~azure.mgmt.compute.v2024_11_01.models.AutomaticOSUpgradePolicy + ~azure.mgmt.compute.v2024_07_01.models.AutomaticOSUpgradePolicy """ super().__init__(**kwargs) self.mode = mode @@ -9039,7 +8670,7 @@ class Usage(_serialization.Model): :ivar limit: The maximum permitted usage of the resource. Required. :vartype limit: int :ivar name: The name of the type of usage. Required. - :vartype name: ~azure.mgmt.compute.v2024_11_01.models.UsageName + :vartype name: ~azure.mgmt.compute.v2024_07_01.models.UsageName """ _validation = { @@ -9065,7 +8696,7 @@ def __init__(self, *, current_value: int, limit: int, name: "_models.UsageName", :keyword limit: The maximum permitted usage of the resource. Required. :paramtype limit: int :keyword name: The name of the type of usage. Required. - :paramtype name: ~azure.mgmt.compute.v2024_11_01.models.UsageName + :paramtype name: ~azure.mgmt.compute.v2024_07_01.models.UsageName """ super().__init__(**kwargs) self.current_value = current_value @@ -9123,8 +8754,8 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None class UserInitiatedReboot(_serialization.Model): @@ -9233,10 +8864,10 @@ class VaultSecretGroup(_serialization.Model): :ivar source_vault: The relative URL of the Key Vault containing all of the certificates in VaultCertificates. - :vartype source_vault: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype source_vault: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar vault_certificates: The list of key vault references in SourceVault which contain certificates. - :vartype vault_certificates: list[~azure.mgmt.compute.v2024_11_01.models.VaultCertificate] + :vartype vault_certificates: list[~azure.mgmt.compute.v2024_07_01.models.VaultCertificate] """ _attribute_map = { @@ -9254,10 +8885,10 @@ def __init__( """ :keyword source_vault: The relative URL of the Key Vault containing all of the certificates in VaultCertificates. - :paramtype source_vault: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype source_vault: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword vault_certificates: The list of key vault references in SourceVault which contain certificates. - :paramtype vault_certificates: list[~azure.mgmt.compute.v2024_11_01.models.VaultCertificate] + :paramtype vault_certificates: list[~azure.mgmt.compute.v2024_07_01.models.VaultCertificate] """ super().__init__(**kwargs) self.source_vault = source_vault @@ -9306,15 +8937,15 @@ class VirtualMachine(Resource): image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - :vartype plan: ~azure.mgmt.compute.v2024_11_01.models.Plan + :vartype plan: ~azure.mgmt.compute.v2024_07_01.models.Plan :ivar resources: The virtual machine child extension resources. - :vartype resources: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + :vartype resources: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :ivar identity: The identity of the virtual machine, if configured. - :vartype identity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineIdentity + :vartype identity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineIdentity :ivar zones: The virtual machine zones. :vartype zones: list[str] :ivar extended_location: The extended location of the Virtual Machine. - :vartype extended_location: ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocation + :vartype extended_location: ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocation :ivar managed_by: ManagedBy is set to Virtual Machine Scale Set(VMSS) flex ARM resourceID, if the VM is part of the VMSS. This property is used by platform for internal resource group delete optimization. @@ -9322,32 +8953,28 @@ class VirtualMachine(Resource): :ivar etag: Etag is property returned in Create/Update/Get response of the VM, so that customer can supply it in the header to ensure optimistic updates. :vartype etag: str - :ivar placement: Placement section specifies the user-defined constraints for virtual machine - hardware placement. This property cannot be changed once VM is provisioned. Minimum - api-version: 2024-11-01. - :vartype placement: ~azure.mgmt.compute.v2024_11_01.models.Placement :ivar hardware_profile: Specifies the hardware settings for the virtual machine. - :vartype hardware_profile: ~azure.mgmt.compute.v2024_11_01.models.HardwareProfile + :vartype hardware_profile: ~azure.mgmt.compute.v2024_07_01.models.HardwareProfile :ivar scheduled_events_policy: Specifies Redeploy, Reboot and ScheduledEventsAdditionalPublishingTargets Scheduled Event related configurations for the virtual machine. - :vartype scheduled_events_policy: ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsPolicy + :vartype scheduled_events_policy: ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsPolicy :ivar storage_profile: Specifies the storage settings for the virtual machine disks. - :vartype storage_profile: ~azure.mgmt.compute.v2024_11_01.models.StorageProfile + :vartype storage_profile: ~azure.mgmt.compute.v2024_07_01.models.StorageProfile :ivar additional_capabilities: Specifies additional capabilities enabled or disabled on the virtual machine. - :vartype additional_capabilities: ~azure.mgmt.compute.v2024_11_01.models.AdditionalCapabilities + :vartype additional_capabilities: ~azure.mgmt.compute.v2024_07_01.models.AdditionalCapabilities :ivar os_profile: Specifies the operating system settings used while creating the virtual machine. Some of the settings cannot be changed once VM is provisioned. - :vartype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfile + :vartype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfile :ivar network_profile: Specifies the network interfaces of the virtual machine. - :vartype network_profile: ~azure.mgmt.compute.v2024_11_01.models.NetworkProfile + :vartype network_profile: ~azure.mgmt.compute.v2024_07_01.models.NetworkProfile :ivar security_profile: Specifies the Security related profile settings for the virtual machine. - :vartype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :vartype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :ivar diagnostics_profile: Specifies the boot diagnostic settings state. Minimum api-version: 2015-06-15. - :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :ivar availability_set: Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability @@ -9359,41 +8986,41 @@ class VirtualMachine(Resource): VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. This property cannot exist along with a non-null properties.virtualMachineScaleSet reference. - :vartype availability_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype availability_set: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar virtual_machine_scale_set: Specifies information about the virtual machine scale set that the virtual machine should be assigned to. Virtual machines specified in the same virtual machine scale set are allocated to different nodes to maximize availability. Currently, a VM can only be added to virtual machine scale set at creation time. An existing VM cannot be added to a virtual machine scale set. This property cannot exist along with a non-null properties.availabilitySet reference. Minimum api‐version: 2019‐03‐01. - :vartype virtual_machine_scale_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype virtual_machine_scale_set: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar proximity_placement_group: Specifies information about the proximity placement group that the virtual machine should be assigned to. Minimum api-version: 2018-04-01. - :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar priority: Specifies the priority for the virtual machine. Minimum api-version: 2019-03-01. Known values are: "Regular", "Low", and "Spot". - :vartype priority: str or ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePriorityTypes + :vartype priority: str or ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePriorityTypes :ivar eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and Azure Spot scale set. For Azure Spot virtual machines, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01. For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2017-10-30-preview. Known values are: "Deallocate" and "Delete". :vartype eviction_policy: str or - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineEvictionPolicyTypes + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineEvictionPolicyTypes :ivar billing_profile: Specifies the billing related details of a Azure Spot virtual machine. Minimum api-version: 2019-03-01. - :vartype billing_profile: ~azure.mgmt.compute.v2024_11_01.models.BillingProfile + :vartype billing_profile: ~azure.mgmt.compute.v2024_07_01.models.BillingProfile :ivar host: Specifies information about the dedicated host that the virtual machine resides in. Minimum api-version: 2018-10-01. - :vartype host: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype host: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar host_group: Specifies information about the dedicated host group that the virtual machine resides in. **Note:** User cannot specify both host and hostGroup properties. Minimum api-version: 2020-06-01. - :vartype host_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype host_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar provisioning_state: The provisioning state, which only appears in the response. :vartype provisioning_state: str :ivar instance_view: The virtual machine instance view. - :vartype instance_view: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstanceView + :vartype instance_view: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstanceView :ivar license_type: Specifies that the image or disk that is being used was licensed on-premises. :code:`
    `\\ :code:`
    ` Possible values for Windows Server operating system are: :code:`
    `\\ :code:`
    ` Windows_Client :code:`
    `\\ :code:`
    ` Windows_Server @@ -9423,17 +9050,17 @@ class VirtualMachine(Resource): :vartype platform_fault_domain: int :ivar scheduled_events_profile: Specifies Scheduled Event related configurations. :vartype scheduled_events_profile: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsProfile + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsProfile :ivar user_data: UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here. Minimum api-version: 2021-03-01. :vartype user_data: str :ivar capacity_reservation: Specifies information about the capacity reservation that is used to allocate virtual machine. Minimum api-version: 2021-04-01. :vartype capacity_reservation: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationProfile + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationProfile :ivar application_profile: Specifies the gallery applications that should be made available to the VM/VMSS. - :vartype application_profile: ~azure.mgmt.compute.v2024_11_01.models.ApplicationProfile + :vartype application_profile: ~azure.mgmt.compute.v2024_07_01.models.ApplicationProfile :ivar time_created: Specifies the time at which the Virtual Machine resource was created. Minimum api-version: 2021-11-01. :vartype time_created: ~datetime.datetime @@ -9466,7 +9093,6 @@ class VirtualMachine(Resource): "extended_location": {"key": "extendedLocation", "type": "ExtendedLocation"}, "managed_by": {"key": "managedBy", "type": "str"}, "etag": {"key": "etag", "type": "str"}, - "placement": {"key": "placement", "type": "Placement"}, "hardware_profile": {"key": "properties.hardwareProfile", "type": "HardwareProfile"}, "scheduled_events_policy": {"key": "properties.scheduledEventsPolicy", "type": "ScheduledEventsPolicy"}, "storage_profile": {"key": "properties.storageProfile", "type": "StorageProfile"}, @@ -9505,7 +9131,6 @@ def __init__( # pylint: disable=too-many-locals identity: Optional["_models.VirtualMachineIdentity"] = None, zones: Optional[List[str]] = None, extended_location: Optional["_models.ExtendedLocation"] = None, - placement: Optional["_models.Placement"] = None, hardware_profile: Optional["_models.HardwareProfile"] = None, scheduled_events_policy: Optional["_models.ScheduledEventsPolicy"] = None, storage_profile: Optional["_models.StorageProfile"] = None, @@ -9541,41 +9166,37 @@ def __init__( # pylint: disable=too-many-locals image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - :paramtype plan: ~azure.mgmt.compute.v2024_11_01.models.Plan + :paramtype plan: ~azure.mgmt.compute.v2024_07_01.models.Plan :keyword identity: The identity of the virtual machine, if configured. - :paramtype identity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineIdentity + :paramtype identity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineIdentity :keyword zones: The virtual machine zones. :paramtype zones: list[str] :keyword extended_location: The extended location of the Virtual Machine. - :paramtype extended_location: ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocation - :keyword placement: Placement section specifies the user-defined constraints for virtual - machine hardware placement. This property cannot be changed once VM is provisioned. Minimum - api-version: 2024-11-01. - :paramtype placement: ~azure.mgmt.compute.v2024_11_01.models.Placement + :paramtype extended_location: ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocation :keyword hardware_profile: Specifies the hardware settings for the virtual machine. - :paramtype hardware_profile: ~azure.mgmt.compute.v2024_11_01.models.HardwareProfile + :paramtype hardware_profile: ~azure.mgmt.compute.v2024_07_01.models.HardwareProfile :keyword scheduled_events_policy: Specifies Redeploy, Reboot and ScheduledEventsAdditionalPublishingTargets Scheduled Event related configurations for the virtual machine. :paramtype scheduled_events_policy: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsPolicy + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsPolicy :keyword storage_profile: Specifies the storage settings for the virtual machine disks. - :paramtype storage_profile: ~azure.mgmt.compute.v2024_11_01.models.StorageProfile + :paramtype storage_profile: ~azure.mgmt.compute.v2024_07_01.models.StorageProfile :keyword additional_capabilities: Specifies additional capabilities enabled or disabled on the virtual machine. :paramtype additional_capabilities: - ~azure.mgmt.compute.v2024_11_01.models.AdditionalCapabilities + ~azure.mgmt.compute.v2024_07_01.models.AdditionalCapabilities :keyword os_profile: Specifies the operating system settings used while creating the virtual machine. Some of the settings cannot be changed once VM is provisioned. - :paramtype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfile + :paramtype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfile :keyword network_profile: Specifies the network interfaces of the virtual machine. - :paramtype network_profile: ~azure.mgmt.compute.v2024_11_01.models.NetworkProfile + :paramtype network_profile: ~azure.mgmt.compute.v2024_07_01.models.NetworkProfile :keyword security_profile: Specifies the Security related profile settings for the virtual machine. - :paramtype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :paramtype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :keyword diagnostics_profile: Specifies the boot diagnostic settings state. Minimum api-version: 2015-06-15. - :paramtype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :paramtype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :keyword availability_set: Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability @@ -9587,37 +9208,37 @@ def __init__( # pylint: disable=too-many-locals VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. This property cannot exist along with a non-null properties.virtualMachineScaleSet reference. - :paramtype availability_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype availability_set: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword virtual_machine_scale_set: Specifies information about the virtual machine scale set that the virtual machine should be assigned to. Virtual machines specified in the same virtual machine scale set are allocated to different nodes to maximize availability. Currently, a VM can only be added to virtual machine scale set at creation time. An existing VM cannot be added to a virtual machine scale set. This property cannot exist along with a non-null properties.availabilitySet reference. Minimum api‐version: 2019‐03‐01. - :paramtype virtual_machine_scale_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype virtual_machine_scale_set: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword proximity_placement_group: Specifies information about the proximity placement group that the virtual machine should be assigned to. Minimum api-version: 2018-04-01. - :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword priority: Specifies the priority for the virtual machine. Minimum api-version: 2019-03-01. Known values are: "Regular", "Low", and "Spot". - :paramtype priority: str or ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePriorityTypes + :paramtype priority: str or ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePriorityTypes :keyword eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and Azure Spot scale set. For Azure Spot virtual machines, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01. For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2017-10-30-preview. Known values are: "Deallocate" and "Delete". :paramtype eviction_policy: str or - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineEvictionPolicyTypes + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineEvictionPolicyTypes :keyword billing_profile: Specifies the billing related details of a Azure Spot virtual machine. Minimum api-version: 2019-03-01. - :paramtype billing_profile: ~azure.mgmt.compute.v2024_11_01.models.BillingProfile + :paramtype billing_profile: ~azure.mgmt.compute.v2024_07_01.models.BillingProfile :keyword host: Specifies information about the dedicated host that the virtual machine resides in. Minimum api-version: 2018-10-01. - :paramtype host: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype host: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword host_group: Specifies information about the dedicated host group that the virtual machine resides in. **Note:** User cannot specify both host and hostGroup properties. Minimum api-version: 2020-06-01. - :paramtype host_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype host_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword license_type: Specifies that the image or disk that is being used was licensed on-premises. :code:`
    `\\ :code:`
    ` Possible values for Windows Server operating system are: :code:`
    `\\ :code:`
    ` Windows_Client :code:`
    `\\ :code:`
    ` Windows_Server @@ -9644,27 +9265,26 @@ def __init__( # pylint: disable=too-many-locals :paramtype platform_fault_domain: int :keyword scheduled_events_profile: Specifies Scheduled Event related configurations. :paramtype scheduled_events_profile: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsProfile + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsProfile :keyword user_data: UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here. Minimum api-version: 2021-03-01. :paramtype user_data: str :keyword capacity_reservation: Specifies information about the capacity reservation that is used to allocate virtual machine. Minimum api-version: 2021-04-01. :paramtype capacity_reservation: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationProfile + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationProfile :keyword application_profile: Specifies the gallery applications that should be made available to the VM/VMSS. - :paramtype application_profile: ~azure.mgmt.compute.v2024_11_01.models.ApplicationProfile + :paramtype application_profile: ~azure.mgmt.compute.v2024_07_01.models.ApplicationProfile """ super().__init__(location=location, tags=tags, **kwargs) self.plan = plan - self.resources = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None self.identity = identity self.zones = zones self.extended_location = extended_location - self.managed_by = None - self.etag = None - self.placement = placement + self.managed_by: Optional[str] = None + self.etag: Optional[str] = None self.hardware_profile = hardware_profile self.scheduled_events_policy = scheduled_events_policy self.storage_profile = storage_profile @@ -9681,17 +9301,17 @@ def __init__( # pylint: disable=too-many-locals self.billing_profile = billing_profile self.host = host self.host_group = host_group - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None self.extensions_time_budget = extensions_time_budget self.platform_fault_domain = platform_fault_domain self.scheduled_events_profile = scheduled_events_profile self.user_data = user_data self.capacity_reservation = capacity_reservation self.application_profile = application_profile - self.time_created = None + self.time_created: Optional[datetime.datetime] = None class VirtualMachineAgentInstanceView(_serialization.Model): @@ -9701,9 +9321,9 @@ class VirtualMachineAgentInstanceView(_serialization.Model): :vartype vm_agent_version: str :ivar extension_handlers: The virtual machine extension handler instance view. :vartype extension_handlers: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionHandlerInstanceView] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionHandlerInstanceView] :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ _attribute_map = { @@ -9725,9 +9345,9 @@ def __init__( :paramtype vm_agent_version: str :keyword extension_handlers: The virtual machine extension handler instance view. :paramtype extension_handlers: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionHandlerInstanceView] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionHandlerInstanceView] :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) self.vm_agent_version = vm_agent_version @@ -9744,7 +9364,7 @@ class VirtualMachineAssessPatchesResult(_serialization.Model): until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded", or "CompletedWithWarnings.". Known values are: "Unknown", "InProgress", "Failed", "Succeeded", and "CompletedWithWarnings". - :vartype status: str or ~azure.mgmt.compute.v2024_11_01.models.PatchOperationStatus + :vartype status: str or ~azure.mgmt.compute.v2024_07_01.models.PatchOperationStatus :ivar assessment_activity_id: The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. :vartype assessment_activity_id: str @@ -9762,10 +9382,10 @@ class VirtualMachineAssessPatchesResult(_serialization.Model): :ivar available_patches: The list of patches that have been detected as available for installation. :vartype available_patches: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSoftwarePatchProperties] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSoftwarePatchProperties] :ivar error: The errors that were encountered during execution of the operation. The details array contains the list of them. - :vartype error: ~azure.mgmt.compute.v2024_11_01.models.ApiError + :vartype error: ~azure.mgmt.compute.v2024_07_01.models.ApiError """ _validation = { @@ -9793,14 +9413,14 @@ class VirtualMachineAssessPatchesResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.assessment_activity_id = None - self.reboot_pending = None - self.critical_and_security_patch_count = None - self.other_patch_count = None - self.start_date_time = None - self.available_patches = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.assessment_activity_id: Optional[str] = None + self.reboot_pending: Optional[bool] = None + self.critical_and_security_patch_count: Optional[int] = None + self.other_patch_count: Optional[int] = None + self.start_date_time: Optional[datetime.datetime] = None + self.available_patches: Optional[List["_models.VirtualMachineSoftwarePatchProperties"]] = None + self.error: Optional["_models.ApiError"] = None class VirtualMachineCaptureParameters(_serialization.Model): @@ -9885,10 +9505,10 @@ def __init__(self, *, id: Optional[str] = None, **kwargs: Any) -> None: # pylin :paramtype id: str """ super().__init__(id=id, **kwargs) - self.schema = None - self.content_version = None - self.parameters = None - self.resources = None + self.schema: Optional[str] = None + self.content_version: Optional[str] = None + self.parameters: Optional[JSON] = None + self.resources: Optional[List[JSON]] = None class VirtualMachineExtension(ResourceWithOptionalLocation): @@ -9932,7 +9552,7 @@ class VirtualMachineExtension(ResourceWithOptionalLocation): :vartype provisioning_state: str :ivar instance_view: The virtual machine extension instance view. :vartype instance_view: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionInstanceView + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionInstanceView :ivar suppress_failures: Indicates whether failures stemming from the extension will be suppressed (Operational failures such as not connecting to the VM will not be suppressed regardless of this value). The default is false. @@ -9940,7 +9560,7 @@ class VirtualMachineExtension(ResourceWithOptionalLocation): :ivar protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :vartype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference :ivar provision_after_extensions: Collection of extension names after which this extension needs to be provisioned. :vartype provision_after_extensions: list[str] @@ -10025,7 +9645,7 @@ def __init__( :paramtype protected_settings: JSON :keyword instance_view: The virtual machine extension instance view. :paramtype instance_view: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionInstanceView + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionInstanceView :keyword suppress_failures: Indicates whether failures stemming from the extension will be suppressed (Operational failures such as not connecting to the VM will not be suppressed regardless of this value). The default is false. @@ -10033,7 +9653,7 @@ def __init__( :keyword protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :paramtype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference :keyword provision_after_extensions: Collection of extension names after which this extension needs to be provisioned. :paramtype provision_after_extensions: list[str] @@ -10047,7 +9667,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view self.suppress_failures = suppress_failures self.protected_settings_from_key_vault = protected_settings_from_key_vault @@ -10062,7 +9682,7 @@ class VirtualMachineExtensionHandlerInstanceView(_serialization.Model): # pylin :ivar type_handler_version: Specifies the version of the script handler. :vartype type_handler_version: str :ivar status: The extension handler status. - :vartype status: ~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus + :vartype status: ~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus """ _attribute_map = { @@ -10085,7 +9705,7 @@ def __init__( :keyword type_handler_version: Specifies the version of the script handler. :paramtype type_handler_version: str :keyword status: The extension handler status. - :paramtype status: ~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus + :paramtype status: ~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus """ super().__init__(**kwargs) self.type = type @@ -10194,9 +9814,9 @@ class VirtualMachineExtensionInstanceView(_serialization.Model): :ivar type_handler_version: Specifies the version of the script handler. :vartype type_handler_version: str :ivar substatuses: The resource status information. - :vartype substatuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype substatuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ _attribute_map = { @@ -10225,9 +9845,9 @@ def __init__( :keyword type_handler_version: Specifies the version of the script handler. :paramtype type_handler_version: str :keyword substatuses: The resource status information. - :paramtype substatuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype substatuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) self.name = name @@ -10241,7 +9861,7 @@ class VirtualMachineExtensionsListResult(_serialization.Model): """The List Extension operation response. :ivar value: The list of extensions. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] """ _attribute_map = { @@ -10251,7 +9871,7 @@ class VirtualMachineExtensionsListResult(_serialization.Model): def __init__(self, *, value: Optional[List["_models.VirtualMachineExtension"]] = None, **kwargs: Any) -> None: """ :keyword value: The list of extensions. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] """ super().__init__(**kwargs) self.value = value @@ -10290,7 +9910,7 @@ class VirtualMachineExtensionUpdate(UpdateResource): :ivar protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :vartype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference """ _attribute_map = { @@ -10357,7 +9977,7 @@ def __init__( :keyword protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :paramtype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference """ super().__init__(tags=tags, **kwargs) self.force_update_tag = force_update_tag @@ -10378,7 +9998,7 @@ class VirtualMachineHealthStatus(_serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar status: The health status information for the VM. - :vartype status: ~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus + :vartype status: ~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus """ _validation = { @@ -10392,7 +10012,7 @@ class VirtualMachineHealthStatus(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None + self.status: Optional["_models.InstanceViewStatus"] = None class VirtualMachineIdentity(_serialization.Model): @@ -10410,12 +10030,12 @@ class VirtualMachineIdentity(_serialization.Model): UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine. Known values are: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned", and "None". - :vartype type: str or ~azure.mgmt.compute.v2024_11_01.models.ResourceIdentityType + :vartype type: str or ~azure.mgmt.compute.v2024_07_01.models.ResourceIdentityType :ivar user_assigned_identities: The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, - ~azure.mgmt.compute.v2024_11_01.models.UserAssignedIdentitiesValue] + ~azure.mgmt.compute.v2024_07_01.models.UserAssignedIdentitiesValue] """ _validation = { @@ -10442,16 +10062,16 @@ def __init__( UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine. Known values are: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned", and "None". - :paramtype type: str or ~azure.mgmt.compute.v2024_11_01.models.ResourceIdentityType + :paramtype type: str or ~azure.mgmt.compute.v2024_07_01.models.ResourceIdentityType :keyword user_assigned_identities: The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, - ~azure.mgmt.compute.v2024_11_01.models.UserAssignedIdentitiesValue] + ~azure.mgmt.compute.v2024_07_01.models.UserAssignedIdentitiesValue] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.user_assigned_identities = user_assigned_identities @@ -10472,7 +10092,7 @@ class VirtualMachineImageResource(SubResource): `_. :vartype tags: dict[str, str] :ivar extended_location: The extended location of the Virtual Machine. - :vartype extended_location: ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocation + :vartype extended_location: ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocation """ _validation = { @@ -10510,7 +10130,7 @@ def __init__( `_. :paramtype tags: dict[str, str] :keyword extended_location: The extended location of the Virtual Machine. - :paramtype extended_location: ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocation + :paramtype extended_location: ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocation """ super().__init__(id=id, **kwargs) self.name = name @@ -10535,30 +10155,30 @@ class VirtualMachineImage(VirtualMachineImageResource): `_. :vartype tags: dict[str, str] :ivar extended_location: The extended location of the Virtual Machine. - :vartype extended_location: ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocation + :vartype extended_location: ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocation :ivar plan: Used for establishing the purchase context of any 3rd Party artifact through MarketPlace. - :vartype plan: ~azure.mgmt.compute.v2024_11_01.models.PurchasePlan + :vartype plan: ~azure.mgmt.compute.v2024_07_01.models.PurchasePlan :ivar os_disk_image: Contains the os disk image information. - :vartype os_disk_image: ~azure.mgmt.compute.v2024_11_01.models.OSDiskImage + :vartype os_disk_image: ~azure.mgmt.compute.v2024_07_01.models.OSDiskImage :ivar data_disk_images: - :vartype data_disk_images: list[~azure.mgmt.compute.v2024_11_01.models.DataDiskImage] + :vartype data_disk_images: list[~azure.mgmt.compute.v2024_07_01.models.DataDiskImage] :ivar automatic_os_upgrade_properties: Describes automatic OS upgrade properties on the image. :vartype automatic_os_upgrade_properties: - ~azure.mgmt.compute.v2024_11_01.models.AutomaticOSUpgradeProperties + ~azure.mgmt.compute.v2024_07_01.models.AutomaticOSUpgradeProperties :ivar hyper_v_generation: Specifies the HyperVGeneration Type. Known values are: "V1" and "V2". :vartype hyper_v_generation: str or - ~azure.mgmt.compute.v2024_11_01.models.HyperVGenerationTypes + ~azure.mgmt.compute.v2024_07_01.models.HyperVGenerationTypes :ivar disallowed: Specifies disallowed configuration for the VirtualMachine created from the image. - :vartype disallowed: ~azure.mgmt.compute.v2024_11_01.models.DisallowedConfiguration + :vartype disallowed: ~azure.mgmt.compute.v2024_07_01.models.DisallowedConfiguration :ivar features: - :vartype features: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageFeature] + :vartype features: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageFeature] :ivar architecture: Specifies the Architecture Type. Known values are: "x64" and "Arm64". - :vartype architecture: str or ~azure.mgmt.compute.v2024_11_01.models.ArchitectureTypes + :vartype architecture: str or ~azure.mgmt.compute.v2024_07_01.models.ArchitectureTypes :ivar image_deprecation_status: Describes image deprecation status properties on the image. :vartype image_deprecation_status: - ~azure.mgmt.compute.v2024_11_01.models.ImageDeprecationStatus + ~azure.mgmt.compute.v2024_07_01.models.ImageDeprecationStatus """ _validation = { @@ -10617,32 +10237,32 @@ def __init__( `_. :paramtype tags: dict[str, str] :keyword extended_location: The extended location of the Virtual Machine. - :paramtype extended_location: ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocation + :paramtype extended_location: ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocation :keyword plan: Used for establishing the purchase context of any 3rd Party artifact through MarketPlace. - :paramtype plan: ~azure.mgmt.compute.v2024_11_01.models.PurchasePlan + :paramtype plan: ~azure.mgmt.compute.v2024_07_01.models.PurchasePlan :keyword os_disk_image: Contains the os disk image information. - :paramtype os_disk_image: ~azure.mgmt.compute.v2024_11_01.models.OSDiskImage + :paramtype os_disk_image: ~azure.mgmt.compute.v2024_07_01.models.OSDiskImage :keyword data_disk_images: - :paramtype data_disk_images: list[~azure.mgmt.compute.v2024_11_01.models.DataDiskImage] + :paramtype data_disk_images: list[~azure.mgmt.compute.v2024_07_01.models.DataDiskImage] :keyword automatic_os_upgrade_properties: Describes automatic OS upgrade properties on the image. :paramtype automatic_os_upgrade_properties: - ~azure.mgmt.compute.v2024_11_01.models.AutomaticOSUpgradeProperties + ~azure.mgmt.compute.v2024_07_01.models.AutomaticOSUpgradeProperties :keyword hyper_v_generation: Specifies the HyperVGeneration Type. Known values are: "V1" and "V2". :paramtype hyper_v_generation: str or - ~azure.mgmt.compute.v2024_11_01.models.HyperVGenerationTypes + ~azure.mgmt.compute.v2024_07_01.models.HyperVGenerationTypes :keyword disallowed: Specifies disallowed configuration for the VirtualMachine created from the image. - :paramtype disallowed: ~azure.mgmt.compute.v2024_11_01.models.DisallowedConfiguration + :paramtype disallowed: ~azure.mgmt.compute.v2024_07_01.models.DisallowedConfiguration :keyword features: - :paramtype features: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageFeature] + :paramtype features: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageFeature] :keyword architecture: Specifies the Architecture Type. Known values are: "x64" and "Arm64". - :paramtype architecture: str or ~azure.mgmt.compute.v2024_11_01.models.ArchitectureTypes + :paramtype architecture: str or ~azure.mgmt.compute.v2024_07_01.models.ArchitectureTypes :keyword image_deprecation_status: Describes image deprecation status properties on the image. :paramtype image_deprecation_status: - ~azure.mgmt.compute.v2024_11_01.models.ImageDeprecationStatus + ~azure.mgmt.compute.v2024_07_01.models.ImageDeprecationStatus """ super().__init__(id=id, name=name, location=location, tags=tags, extended_location=extended_location, **kwargs) self.plan = plan @@ -10682,40 +10302,6 @@ def __init__(self, *, name: Optional[str] = None, value: Optional[str] = None, * self.value = value -class VirtualMachineImagesWithPropertiesListResult(_serialization.Model): # pylint: disable=name-too-long - """The List Virtual Machine Images operation response. - - :ivar value: The list of virtual machine images. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImage] - :ivar next_link: The URI to fetch the next page of virtual machine images. Call ListNext() with - this URI to fetch the next page of virtual machine images. - :vartype next_link: str - """ - - _attribute_map = { - "value": {"key": "value", "type": "[VirtualMachineImage]"}, - "next_link": {"key": "nextLink", "type": "str"}, - } - - def __init__( - self, - *, - value: Optional[List["_models.VirtualMachineImage"]] = None, - next_link: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword value: The list of virtual machine images. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImage] - :keyword next_link: The URI to fetch the next page of virtual machine images. Call ListNext() - with this URI to fetch the next page of virtual machine images. - :paramtype next_link: str - """ - super().__init__(**kwargs) - self.value = value - self.next_link = next_link - - class VirtualMachineInstallPatchesParameters(_serialization.Model): """Input for InstallPatches as directly received by the API. @@ -10727,13 +10313,13 @@ class VirtualMachineInstallPatchesParameters(_serialization.Model): :ivar reboot_setting: Defines when it is acceptable to reboot a VM during a software update operation. Required. Known values are: "IfRequired", "Never", and "Always". :vartype reboot_setting: str or - ~azure.mgmt.compute.v2024_11_01.models.VMGuestPatchRebootSetting + ~azure.mgmt.compute.v2024_07_01.models.VMGuestPatchRebootSetting :ivar windows_parameters: Input for InstallPatches on a Windows VM, as directly received by the API. - :vartype windows_parameters: ~azure.mgmt.compute.v2024_11_01.models.WindowsParameters + :vartype windows_parameters: ~azure.mgmt.compute.v2024_07_01.models.WindowsParameters :ivar linux_parameters: Input for InstallPatches on a Linux VM, as directly received by the API. - :vartype linux_parameters: ~azure.mgmt.compute.v2024_11_01.models.LinuxParameters + :vartype linux_parameters: ~azure.mgmt.compute.v2024_07_01.models.LinuxParameters """ _validation = { @@ -10763,13 +10349,13 @@ def __init__( :keyword reboot_setting: Defines when it is acceptable to reboot a VM during a software update operation. Required. Known values are: "IfRequired", "Never", and "Always". :paramtype reboot_setting: str or - ~azure.mgmt.compute.v2024_11_01.models.VMGuestPatchRebootSetting + ~azure.mgmt.compute.v2024_07_01.models.VMGuestPatchRebootSetting :keyword windows_parameters: Input for InstallPatches on a Windows VM, as directly received by the API. - :paramtype windows_parameters: ~azure.mgmt.compute.v2024_11_01.models.WindowsParameters + :paramtype windows_parameters: ~azure.mgmt.compute.v2024_07_01.models.WindowsParameters :keyword linux_parameters: Input for InstallPatches on a Linux VM, as directly received by the API. - :paramtype linux_parameters: ~azure.mgmt.compute.v2024_11_01.models.LinuxParameters + :paramtype linux_parameters: ~azure.mgmt.compute.v2024_07_01.models.LinuxParameters """ super().__init__(**kwargs) self.maximum_duration = maximum_duration @@ -10787,13 +10373,13 @@ class VirtualMachineInstallPatchesResult(_serialization.Model): until the operation completes. At that point it will become "Failed", "Succeeded", "Unknown" or "CompletedWithWarnings.". Known values are: "Unknown", "InProgress", "Failed", "Succeeded", and "CompletedWithWarnings". - :vartype status: str or ~azure.mgmt.compute.v2024_11_01.models.PatchOperationStatus + :vartype status: str or ~azure.mgmt.compute.v2024_07_01.models.PatchOperationStatus :ivar installation_activity_id: The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. :vartype installation_activity_id: str :ivar reboot_status: The reboot state of the VM following completion of the operation. Known values are: "Unknown", "NotNeeded", "Required", "Started", "Failed", and "Completed". - :vartype reboot_status: str or ~azure.mgmt.compute.v2024_11_01.models.VMGuestPatchRebootStatus + :vartype reboot_status: str or ~azure.mgmt.compute.v2024_07_01.models.VMGuestPatchRebootStatus :ivar maintenance_window_exceeded: Whether the operation ran out of time before it completed all its intended actions. :vartype maintenance_window_exceeded: bool @@ -10813,12 +10399,12 @@ class VirtualMachineInstallPatchesResult(_serialization.Model): See errors for details. :vartype failed_patch_count: int :ivar patches: The patches that were installed during the operation. - :vartype patches: list[~azure.mgmt.compute.v2024_11_01.models.PatchInstallationDetail] + :vartype patches: list[~azure.mgmt.compute.v2024_07_01.models.PatchInstallationDetail] :ivar start_date_time: The UTC timestamp when the operation began. :vartype start_date_time: ~datetime.datetime :ivar error: The errors that were encountered during execution of the operation. The details array contains the list of them. - :vartype error: ~azure.mgmt.compute.v2024_11_01.models.ApiError + :vartype error: ~azure.mgmt.compute.v2024_07_01.models.ApiError """ _validation = { @@ -10854,18 +10440,18 @@ class VirtualMachineInstallPatchesResult(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.status = None - self.installation_activity_id = None - self.reboot_status = None - self.maintenance_window_exceeded = None - self.excluded_patch_count = None - self.not_selected_patch_count = None - self.pending_patch_count = None - self.installed_patch_count = None - self.failed_patch_count = None - self.patches = None - self.start_date_time = None - self.error = None + self.status: Optional[Union[str, "_models.PatchOperationStatus"]] = None + self.installation_activity_id: Optional[str] = None + self.reboot_status: Optional[Union[str, "_models.VMGuestPatchRebootStatus"]] = None + self.maintenance_window_exceeded: Optional[bool] = None + self.excluded_patch_count: Optional[int] = None + self.not_selected_patch_count: Optional[int] = None + self.pending_patch_count: Optional[int] = None + self.installed_patch_count: Optional[int] = None + self.failed_patch_count: Optional[int] = None + self.patches: Optional[List["_models.PatchInstallationDetail"]] = None + self.start_date_time: Optional[datetime.datetime] = None + self.error: Optional["_models.ApiError"] = None class VirtualMachineInstanceView(_serialization.Model): @@ -10885,34 +10471,33 @@ class VirtualMachineInstanceView(_serialization.Model): :vartype os_version: str :ivar hyper_v_generation: Specifies the HyperVGeneration Type associated with a resource. Known values are: "V1" and "V2". - :vartype hyper_v_generation: str or ~azure.mgmt.compute.v2024_11_01.models.HyperVGenerationType + :vartype hyper_v_generation: str or ~azure.mgmt.compute.v2024_07_01.models.HyperVGenerationType :ivar rdp_thumb_print: The Remote desktop certificate thumbprint. :vartype rdp_thumb_print: str :ivar vm_agent: The VM Agent running on the virtual machine. - :vartype vm_agent: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineAgentInstanceView + :vartype vm_agent: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineAgentInstanceView :ivar maintenance_redeploy_status: The Maintenance Operation status on the virtual machine. :vartype maintenance_redeploy_status: - ~azure.mgmt.compute.v2024_11_01.models.MaintenanceRedeployStatus + ~azure.mgmt.compute.v2024_07_01.models.MaintenanceRedeployStatus :ivar disks: The virtual machine disk information. - :vartype disks: list[~azure.mgmt.compute.v2024_11_01.models.DiskInstanceView] + :vartype disks: list[~azure.mgmt.compute.v2024_07_01.models.DiskInstanceView] :ivar extensions: The extensions information. :vartype extensions: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionInstanceView] - :ivar vm_health: The application health status for the VM, provided through Application Health - Extension. - :vartype vm_health: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineHealthStatus + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionInstanceView] + :ivar vm_health: The health status for the VM. + :vartype vm_health: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineHealthStatus :ivar boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. You can easily view the output of your console log. Azure also enables you to see a screenshot of the VM from the hypervisor. - :vartype boot_diagnostics: ~azure.mgmt.compute.v2024_11_01.models.BootDiagnosticsInstanceView + :vartype boot_diagnostics: ~azure.mgmt.compute.v2024_07_01.models.BootDiagnosticsInstanceView :ivar assigned_host: Resource id of the dedicated host, on which the virtual machine is allocated through automatic placement, when the virtual machine is associated with a dedicated host group that has automatic placement enabled. Minimum api-version: 2020-06-01. :vartype assigned_host: str :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :ivar patch_status: [Preview Feature] The status of virtual machine patch operations. - :vartype patch_status: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePatchStatus + :vartype patch_status: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePatchStatus :ivar is_vm_in_standby_pool: [Preview Feature] Specifies whether the VM is currently in or out of the Standby Pool. :vartype is_vm_in_standby_pool: bool @@ -10977,27 +10562,27 @@ def __init__( :keyword hyper_v_generation: Specifies the HyperVGeneration Type associated with a resource. Known values are: "V1" and "V2". :paramtype hyper_v_generation: str or - ~azure.mgmt.compute.v2024_11_01.models.HyperVGenerationType + ~azure.mgmt.compute.v2024_07_01.models.HyperVGenerationType :keyword rdp_thumb_print: The Remote desktop certificate thumbprint. :paramtype rdp_thumb_print: str :keyword vm_agent: The VM Agent running on the virtual machine. - :paramtype vm_agent: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineAgentInstanceView + :paramtype vm_agent: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineAgentInstanceView :keyword maintenance_redeploy_status: The Maintenance Operation status on the virtual machine. :paramtype maintenance_redeploy_status: - ~azure.mgmt.compute.v2024_11_01.models.MaintenanceRedeployStatus + ~azure.mgmt.compute.v2024_07_01.models.MaintenanceRedeployStatus :keyword disks: The virtual machine disk information. - :paramtype disks: list[~azure.mgmt.compute.v2024_11_01.models.DiskInstanceView] + :paramtype disks: list[~azure.mgmt.compute.v2024_07_01.models.DiskInstanceView] :keyword extensions: The extensions information. :paramtype extensions: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionInstanceView] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionInstanceView] :keyword boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. You can easily view the output of your console log. Azure also enables you to see a screenshot of the VM from the hypervisor. - :paramtype boot_diagnostics: ~azure.mgmt.compute.v2024_11_01.models.BootDiagnosticsInstanceView + :paramtype boot_diagnostics: ~azure.mgmt.compute.v2024_07_01.models.BootDiagnosticsInstanceView :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :keyword patch_status: [Preview Feature] The status of virtual machine patch operations. - :paramtype patch_status: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePatchStatus + :paramtype patch_status: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePatchStatus """ super().__init__(**kwargs) self.platform_update_domain = platform_update_domain @@ -11011,12 +10596,12 @@ def __init__( self.maintenance_redeploy_status = maintenance_redeploy_status self.disks = disks self.extensions = extensions - self.vm_health = None + self.vm_health: Optional["_models.VirtualMachineHealthStatus"] = None self.boot_diagnostics = boot_diagnostics - self.assigned_host = None + self.assigned_host: Optional[str] = None self.statuses = statuses self.patch_status = patch_status - self.is_vm_in_standby_pool = None + self.is_vm_in_standby_pool: Optional[bool] = None class VirtualMachineIpTag(_serialization.Model): @@ -11051,7 +10636,7 @@ class VirtualMachineListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of virtual machines. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :ivar next_link: The URI to fetch the next page of VMs. Call ListNext() with this URI to fetch the next page of Virtual Machines. :vartype next_link: str @@ -11071,7 +10656,7 @@ def __init__( ) -> None: """ :keyword value: The list of virtual machines. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :keyword next_link: The URI to fetch the next page of VMs. Call ListNext() with this URI to fetch the next page of Virtual Machines. :paramtype next_link: str @@ -11093,7 +10678,7 @@ class VirtualMachineNetworkInterfaceConfiguration(_serialization.Model): # pyli :vartype primary: bool :ivar delete_option: Specify what happens to the network interface when the VM is deleted. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions :ivar enable_accelerated_networking: Specifies whether the network interface is accelerated networking-enabled. :vartype enable_accelerated_networking: bool @@ -11105,23 +10690,23 @@ class VirtualMachineNetworkInterfaceConfiguration(_serialization.Model): # pyli :ivar enable_ip_forwarding: Whether IP forwarding enabled on this NIC. :vartype enable_ip_forwarding: bool :ivar network_security_group: The network security group. - :vartype network_security_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype network_security_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar dns_settings: The dns settings to be applied on the network interfaces. :vartype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineNetworkInterfaceDnsSettingsConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineNetworkInterfaceDnsSettingsConfiguration :ivar ip_configurations: Specifies the IP configurations of the network interface. :vartype ip_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineNetworkInterfaceIPConfiguration] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineNetworkInterfaceIPConfiguration] :ivar dscp_configuration: - :vartype dscp_configuration: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype dscp_configuration: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar auxiliary_mode: Specifies whether the Auxiliary mode is enabled for the Network Interface resource. Known values are: "None", "AcceleratedConnections", and "Floating". :vartype auxiliary_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliaryMode + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliaryMode :ivar auxiliary_sku: Specifies whether the Auxiliary sku is enabled for the Network Interface resource. Known values are: "None", "A1", "A2", "A4", and "A8". :vartype auxiliary_sku: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliarySku + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliarySku """ _validation = { @@ -11176,7 +10761,7 @@ def __init__( :paramtype primary: bool :keyword delete_option: Specify what happens to the network interface when the VM is deleted. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions :keyword enable_accelerated_networking: Specifies whether the network interface is accelerated networking-enabled. :paramtype enable_accelerated_networking: bool @@ -11188,23 +10773,23 @@ def __init__( :keyword enable_ip_forwarding: Whether IP forwarding enabled on this NIC. :paramtype enable_ip_forwarding: bool :keyword network_security_group: The network security group. - :paramtype network_security_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype network_security_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword dns_settings: The dns settings to be applied on the network interfaces. :paramtype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineNetworkInterfaceDnsSettingsConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineNetworkInterfaceDnsSettingsConfiguration :keyword ip_configurations: Specifies the IP configurations of the network interface. :paramtype ip_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineNetworkInterfaceIPConfiguration] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineNetworkInterfaceIPConfiguration] :keyword dscp_configuration: - :paramtype dscp_configuration: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype dscp_configuration: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword auxiliary_mode: Specifies whether the Auxiliary mode is enabled for the Network Interface resource. Known values are: "None", "AcceleratedConnections", and "Floating". :paramtype auxiliary_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliaryMode + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliaryMode :keyword auxiliary_sku: Specifies whether the Auxiliary sku is enabled for the Network Interface resource. Known values are: "None", "A1", "A2", "A4", and "A8". :paramtype auxiliary_sku: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliarySku + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliarySku """ super().__init__(**kwargs) self.name = name @@ -11250,32 +10835,32 @@ class VirtualMachineNetworkInterfaceIPConfiguration(_serialization.Model): # py :ivar name: The IP configuration name. Required. :vartype name: str :ivar subnet: Specifies the identifier of the subnet. - :vartype subnet: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype subnet: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar primary: Specifies the primary network interface in case the virtual machine has more than 1 network interface. :vartype primary: bool :ivar public_ip_address_configuration: The publicIPAddressConfiguration. :vartype public_ip_address_configuration: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePublicIPAddressConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePublicIPAddressConfiguration :ivar private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Known values are: "IPv4" and "IPv6". - :vartype private_ip_address_version: str or ~azure.mgmt.compute.v2024_11_01.models.IPVersions + :vartype private_ip_address_version: str or ~azure.mgmt.compute.v2024_07_01.models.IPVersions :ivar application_security_groups: Specifies an array of references to application security group. - :vartype application_security_groups: list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + :vartype application_security_groups: list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :ivar application_gateway_backend_address_pools: Specifies an array of references to backend address pools of application gateways. A virtual machine can reference backend address pools of multiple application gateways. Multiple virtual machines cannot use the same application gateway. :vartype application_gateway_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :ivar load_balancer_backend_address_pools: Specifies an array of references to backend address pools of load balancers. A virtual machine can reference backend address pools of one public and one internal load balancer. [Multiple virtual machines cannot use the same basic sku load balancer]. :vartype load_balancer_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] """ _validation = { @@ -11319,33 +10904,33 @@ def __init__( :keyword name: The IP configuration name. Required. :paramtype name: str :keyword subnet: Specifies the identifier of the subnet. - :paramtype subnet: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype subnet: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword primary: Specifies the primary network interface in case the virtual machine has more than 1 network interface. :paramtype primary: bool :keyword public_ip_address_configuration: The publicIPAddressConfiguration. :paramtype public_ip_address_configuration: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePublicIPAddressConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePublicIPAddressConfiguration :keyword private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Known values are: "IPv4" and "IPv6". - :paramtype private_ip_address_version: str or ~azure.mgmt.compute.v2024_11_01.models.IPVersions + :paramtype private_ip_address_version: str or ~azure.mgmt.compute.v2024_07_01.models.IPVersions :keyword application_security_groups: Specifies an array of references to application security group. :paramtype application_security_groups: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :keyword application_gateway_backend_address_pools: Specifies an array of references to backend address pools of application gateways. A virtual machine can reference backend address pools of multiple application gateways. Multiple virtual machines cannot use the same application gateway. :paramtype application_gateway_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :keyword load_balancer_backend_address_pools: Specifies an array of references to backend address pools of load balancers. A virtual machine can reference backend address pools of one public and one internal load balancer. [Multiple virtual machines cannot use the same basic sku load balancer]. :paramtype load_balancer_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] """ super().__init__(**kwargs) self.name = name @@ -11365,14 +10950,14 @@ class VirtualMachinePatchStatus(_serialization.Model): :ivar available_patch_summary: The available patch summary of the latest assessment operation for the virtual machine. - :vartype available_patch_summary: ~azure.mgmt.compute.v2024_11_01.models.AvailablePatchSummary + :vartype available_patch_summary: ~azure.mgmt.compute.v2024_07_01.models.AvailablePatchSummary :ivar last_patch_installation_summary: The installation summary of the latest installation operation for the virtual machine. :vartype last_patch_installation_summary: - ~azure.mgmt.compute.v2024_11_01.models.LastPatchInstallationSummary + ~azure.mgmt.compute.v2024_07_01.models.LastPatchInstallationSummary :ivar configuration_statuses: The enablement status of the specified patchMode. :vartype configuration_statuses: - list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ _validation = { @@ -11399,16 +10984,16 @@ def __init__( :keyword available_patch_summary: The available patch summary of the latest assessment operation for the virtual machine. :paramtype available_patch_summary: - ~azure.mgmt.compute.v2024_11_01.models.AvailablePatchSummary + ~azure.mgmt.compute.v2024_07_01.models.AvailablePatchSummary :keyword last_patch_installation_summary: The installation summary of the latest installation operation for the virtual machine. :paramtype last_patch_installation_summary: - ~azure.mgmt.compute.v2024_11_01.models.LastPatchInstallationSummary + ~azure.mgmt.compute.v2024_07_01.models.LastPatchInstallationSummary """ super().__init__(**kwargs) self.available_patch_summary = available_patch_summary self.last_patch_installation_summary = last_patch_installation_summary - self.configuration_statuses = None + self.configuration_statuses: Optional[List["_models.InstanceViewStatus"]] = None class VirtualMachinePublicIPAddressConfiguration(_serialization.Model): # pylint: disable=name-too-long @@ -11419,27 +11004,27 @@ class VirtualMachinePublicIPAddressConfiguration(_serialization.Model): # pylin :ivar name: The publicIP address configuration name. Required. :vartype name: str :ivar sku: Describes the public IP Sku. It can only be set with OrchestrationMode as Flexible. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.PublicIPAddressSku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.PublicIPAddressSku :ivar idle_timeout_in_minutes: The idle timeout of the public IP address. :vartype idle_timeout_in_minutes: int :ivar delete_option: Specify what happens to the public IP address when the VM is deleted. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions :ivar dns_settings: The dns settings to be applied on the publicIP addresses . :vartype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePublicIPAddressDnsSettingsConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePublicIPAddressDnsSettingsConfiguration :ivar ip_tags: The list of IP tags associated with the public IP address. - :vartype ip_tags: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineIpTag] + :vartype ip_tags: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineIpTag] :ivar public_ip_prefix: The PublicIPPrefix from which to allocate publicIP addresses. - :vartype public_ip_prefix: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype public_ip_prefix: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar public_ip_address_version: Available from Api-Version 2019-07-01 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Known values are: "IPv4" and "IPv6". - :vartype public_ip_address_version: str or ~azure.mgmt.compute.v2024_11_01.models.IPVersions + :vartype public_ip_address_version: str or ~azure.mgmt.compute.v2024_07_01.models.IPVersions :ivar public_ip_allocation_method: Specify the public IP allocation type. Known values are: "Dynamic" and "Static". :vartype public_ip_allocation_method: str or - ~azure.mgmt.compute.v2024_11_01.models.PublicIPAllocationMethod + ~azure.mgmt.compute.v2024_07_01.models.PublicIPAllocationMethod """ _validation = { @@ -11480,27 +11065,27 @@ def __init__( :paramtype name: str :keyword sku: Describes the public IP Sku. It can only be set with OrchestrationMode as Flexible. - :paramtype sku: ~azure.mgmt.compute.v2024_11_01.models.PublicIPAddressSku + :paramtype sku: ~azure.mgmt.compute.v2024_07_01.models.PublicIPAddressSku :keyword idle_timeout_in_minutes: The idle timeout of the public IP address. :paramtype idle_timeout_in_minutes: int :keyword delete_option: Specify what happens to the public IP address when the VM is deleted. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions :keyword dns_settings: The dns settings to be applied on the publicIP addresses . :paramtype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePublicIPAddressDnsSettingsConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePublicIPAddressDnsSettingsConfiguration :keyword ip_tags: The list of IP tags associated with the public IP address. - :paramtype ip_tags: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineIpTag] + :paramtype ip_tags: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineIpTag] :keyword public_ip_prefix: The PublicIPPrefix from which to allocate publicIP addresses. - :paramtype public_ip_prefix: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype public_ip_prefix: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword public_ip_address_version: Available from Api-Version 2019-07-01 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Known values are: "IPv4" and "IPv6". - :paramtype public_ip_address_version: str or ~azure.mgmt.compute.v2024_11_01.models.IPVersions + :paramtype public_ip_address_version: str or ~azure.mgmt.compute.v2024_07_01.models.IPVersions :keyword public_ip_allocation_method: Specify the public IP allocation type. Known values are: "Dynamic" and "Static". :paramtype public_ip_allocation_method: str or - ~azure.mgmt.compute.v2024_11_01.models.PublicIPAllocationMethod + ~azure.mgmt.compute.v2024_07_01.models.PublicIPAllocationMethod """ super().__init__(**kwargs) self.name = name @@ -11528,7 +11113,7 @@ class VirtualMachinePublicIPAddressDnsSettingsConfiguration(_serialization.Model label with policy according to the domain name label scope and vm network profile unique ID. Known values are: "TenantReuse", "SubscriptionReuse", "ResourceGroupReuse", and "NoReuse". :vartype domain_name_label_scope: str or - ~azure.mgmt.compute.v2024_11_01.models.DomainNameLabelScopeTypes + ~azure.mgmt.compute.v2024_07_01.models.DomainNameLabelScopeTypes """ _validation = { @@ -11557,7 +11142,7 @@ def __init__( label with policy according to the domain name label scope and vm network profile unique ID. Known values are: "TenantReuse", "SubscriptionReuse", "ResourceGroupReuse", and "NoReuse". :paramtype domain_name_label_scope: str or - ~azure.mgmt.compute.v2024_11_01.models.DomainNameLabelScopeTypes + ~azure.mgmt.compute.v2024_07_01.models.DomainNameLabelScopeTypes """ super().__init__(**kwargs) self.domain_name_label = domain_name_label @@ -11576,7 +11161,7 @@ class VirtualMachineReimageParameters(_serialization.Model): Disk. :vartype exact_version: str :ivar os_profile: Specifies information required for reimaging the non-ephemeral OS disk. - :vartype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfileProvisioningData + :vartype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfileProvisioningData """ _attribute_map = { @@ -11602,7 +11187,7 @@ def __init__( Disk. :paramtype exact_version: str :keyword os_profile: Specifies information required for reimaging the non-ephemeral OS disk. - :paramtype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfileProvisioningData + :paramtype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfileProvisioningData """ super().__init__(**kwargs) self.temp_disk = temp_disk @@ -11628,12 +11213,12 @@ class VirtualMachineRunCommand(Resource): :ivar tags: Resource tags. :vartype tags: dict[str, str] :ivar source: The source of the run command script. - :vartype source: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandScriptSource + :vartype source: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandScriptSource :ivar parameters: The parameters used by the script. - :vartype parameters: list[~azure.mgmt.compute.v2024_11_01.models.RunCommandInputParameter] + :vartype parameters: list[~azure.mgmt.compute.v2024_07_01.models.RunCommandInputParameter] :ivar protected_parameters: The parameters used by the script. :vartype protected_parameters: - list[~azure.mgmt.compute.v2024_11_01.models.RunCommandInputParameter] + list[~azure.mgmt.compute.v2024_07_01.models.RunCommandInputParameter] :ivar async_execution: Optional. If set to true, provisioning will complete as soon as the script starts and will not wait for script to complete. :vartype async_execution: bool @@ -11659,7 +11244,7 @@ class VirtualMachineRunCommand(Resource): For more info on managed identity and Run Command, refer https://aka.ms/ManagedIdentity and https://aka.ms/RunCommandManaged. :vartype output_blob_managed_identity: - ~azure.mgmt.compute.v2024_11_01.models.RunCommandManagedIdentity + ~azure.mgmt.compute.v2024_07_01.models.RunCommandManagedIdentity :ivar error_blob_managed_identity: User-assigned managed identity that has access to errorBlobUri storage blob. Use an empty object in case of system-assigned identity. Make sure managed identity has been given access to blob's container with 'Storage Blob Data Contributor' @@ -11667,7 +11252,7 @@ class VirtualMachineRunCommand(Resource): For more info on managed identity and Run Command, refer https://aka.ms/ManagedIdentity and https://aka.ms/RunCommandManaged. :vartype error_blob_managed_identity: - ~azure.mgmt.compute.v2024_11_01.models.RunCommandManagedIdentity + ~azure.mgmt.compute.v2024_07_01.models.RunCommandManagedIdentity :ivar provisioning_state: The provisioning state, which only appears in the response. If treatFailureAsDeploymentFailure set to true, any failure in the script will fail the deployment and ProvisioningState will be marked as Failed. If treatFailureAsDeploymentFailure set to @@ -11678,7 +11263,7 @@ class VirtualMachineRunCommand(Resource): :vartype provisioning_state: str :ivar instance_view: The virtual machine run command instance view. :vartype instance_view: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandInstanceView + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandInstanceView :ivar treat_failure_as_deployment_failure: Optional. If set to true, any failure in the script will fail the deployment and ProvisioningState will be marked as Failed. If set to false, ProvisioningState would only reflect whether the run command was run or not by the extensions @@ -11750,12 +11335,12 @@ def __init__( :keyword tags: Resource tags. :paramtype tags: dict[str, str] :keyword source: The source of the run command script. - :paramtype source: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandScriptSource + :paramtype source: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandScriptSource :keyword parameters: The parameters used by the script. - :paramtype parameters: list[~azure.mgmt.compute.v2024_11_01.models.RunCommandInputParameter] + :paramtype parameters: list[~azure.mgmt.compute.v2024_07_01.models.RunCommandInputParameter] :keyword protected_parameters: The parameters used by the script. :paramtype protected_parameters: - list[~azure.mgmt.compute.v2024_11_01.models.RunCommandInputParameter] + list[~azure.mgmt.compute.v2024_07_01.models.RunCommandInputParameter] :keyword async_execution: Optional. If set to true, provisioning will complete as soon as the script starts and will not wait for script to complete. :paramtype async_execution: bool @@ -11781,7 +11366,7 @@ def __init__( For more info on managed identity and Run Command, refer https://aka.ms/ManagedIdentity and https://aka.ms/RunCommandManaged. :paramtype output_blob_managed_identity: - ~azure.mgmt.compute.v2024_11_01.models.RunCommandManagedIdentity + ~azure.mgmt.compute.v2024_07_01.models.RunCommandManagedIdentity :keyword error_blob_managed_identity: User-assigned managed identity that has access to errorBlobUri storage blob. Use an empty object in case of system-assigned identity. Make sure managed identity has been given access to blob's container with 'Storage Blob Data Contributor' @@ -11789,7 +11374,7 @@ def __init__( For more info on managed identity and Run Command, refer https://aka.ms/ManagedIdentity and https://aka.ms/RunCommandManaged. :paramtype error_blob_managed_identity: - ~azure.mgmt.compute.v2024_11_01.models.RunCommandManagedIdentity + ~azure.mgmt.compute.v2024_07_01.models.RunCommandManagedIdentity :keyword treat_failure_as_deployment_failure: Optional. If set to true, any failure in the script will fail the deployment and ProvisioningState will be marked as Failed. If set to false, ProvisioningState would only reflect whether the run command was run or not by the @@ -11810,8 +11395,8 @@ def __init__( self.error_blob_uri = error_blob_uri self.output_blob_managed_identity = output_blob_managed_identity self.error_blob_managed_identity = error_blob_managed_identity - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineRunCommandInstanceView"] = None self.treat_failure_as_deployment_failure = treat_failure_as_deployment_failure @@ -11820,7 +11405,7 @@ class VirtualMachineRunCommandInstanceView(_serialization.Model): :ivar execution_state: Script execution status. Known values are: "Unknown", "Pending", "Running", "Failed", "Succeeded", "TimedOut", and "Canceled". - :vartype execution_state: str or ~azure.mgmt.compute.v2024_11_01.models.ExecutionState + :vartype execution_state: str or ~azure.mgmt.compute.v2024_07_01.models.ExecutionState :ivar execution_message: Communicate script configuration errors or execution messages. :vartype execution_message: str :ivar exit_code: Exit code returned from script execution. @@ -11834,7 +11419,7 @@ class VirtualMachineRunCommandInstanceView(_serialization.Model): :ivar end_time: Script end time. :vartype end_time: ~datetime.datetime :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ _attribute_map = { @@ -11864,7 +11449,7 @@ def __init__( """ :keyword execution_state: Script execution status. Known values are: "Unknown", "Pending", "Running", "Failed", "Succeeded", "TimedOut", and "Canceled". - :paramtype execution_state: str or ~azure.mgmt.compute.v2024_11_01.models.ExecutionState + :paramtype execution_state: str or ~azure.mgmt.compute.v2024_07_01.models.ExecutionState :keyword execution_message: Communicate script configuration errors or execution messages. :paramtype execution_message: str :keyword exit_code: Exit code returned from script execution. @@ -11878,7 +11463,7 @@ def __init__( :keyword end_time: Script end time. :paramtype end_time: ~datetime.datetime :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) self.execution_state = execution_state @@ -11908,7 +11493,7 @@ class VirtualMachineRunCommandScriptSource(_serialization.Model): make sure you add it under VM's identity. For more info on managed identity and Run Command, refer https://aka.ms/ManagedIdentity and https://aka.ms/RunCommandManaged. :vartype script_uri_managed_identity: - ~azure.mgmt.compute.v2024_11_01.models.RunCommandManagedIdentity + ~azure.mgmt.compute.v2024_07_01.models.RunCommandManagedIdentity """ _attribute_map = { @@ -11942,7 +11527,7 @@ def __init__( identity, make sure you add it under VM's identity. For more info on managed identity and Run Command, refer https://aka.ms/ManagedIdentity and https://aka.ms/RunCommandManaged. :paramtype script_uri_managed_identity: - ~azure.mgmt.compute.v2024_11_01.models.RunCommandManagedIdentity + ~azure.mgmt.compute.v2024_07_01.models.RunCommandManagedIdentity """ super().__init__(**kwargs) self.script = script @@ -11957,7 +11542,7 @@ class VirtualMachineRunCommandsListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of run commands. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :ivar next_link: The uri to fetch the next page of run commands. :vartype next_link: str """ @@ -11976,7 +11561,7 @@ def __init__( ) -> None: """ :keyword value: The list of run commands. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :keyword next_link: The uri to fetch the next page of run commands. :paramtype next_link: str """ @@ -11993,12 +11578,12 @@ class VirtualMachineRunCommandUpdate(UpdateResource): :ivar tags: Resource tags. :vartype tags: dict[str, str] :ivar source: The source of the run command script. - :vartype source: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandScriptSource + :vartype source: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandScriptSource :ivar parameters: The parameters used by the script. - :vartype parameters: list[~azure.mgmt.compute.v2024_11_01.models.RunCommandInputParameter] + :vartype parameters: list[~azure.mgmt.compute.v2024_07_01.models.RunCommandInputParameter] :ivar protected_parameters: The parameters used by the script. :vartype protected_parameters: - list[~azure.mgmt.compute.v2024_11_01.models.RunCommandInputParameter] + list[~azure.mgmt.compute.v2024_07_01.models.RunCommandInputParameter] :ivar async_execution: Optional. If set to true, provisioning will complete as soon as the script starts and will not wait for script to complete. :vartype async_execution: bool @@ -12024,7 +11609,7 @@ class VirtualMachineRunCommandUpdate(UpdateResource): For more info on managed identity and Run Command, refer https://aka.ms/ManagedIdentity and https://aka.ms/RunCommandManaged. :vartype output_blob_managed_identity: - ~azure.mgmt.compute.v2024_11_01.models.RunCommandManagedIdentity + ~azure.mgmt.compute.v2024_07_01.models.RunCommandManagedIdentity :ivar error_blob_managed_identity: User-assigned managed identity that has access to errorBlobUri storage blob. Use an empty object in case of system-assigned identity. Make sure managed identity has been given access to blob's container with 'Storage Blob Data Contributor' @@ -12032,7 +11617,7 @@ class VirtualMachineRunCommandUpdate(UpdateResource): For more info on managed identity and Run Command, refer https://aka.ms/ManagedIdentity and https://aka.ms/RunCommandManaged. :vartype error_blob_managed_identity: - ~azure.mgmt.compute.v2024_11_01.models.RunCommandManagedIdentity + ~azure.mgmt.compute.v2024_07_01.models.RunCommandManagedIdentity :ivar provisioning_state: The provisioning state, which only appears in the response. If treatFailureAsDeploymentFailure set to true, any failure in the script will fail the deployment and ProvisioningState will be marked as Failed. If treatFailureAsDeploymentFailure set to @@ -12043,7 +11628,7 @@ class VirtualMachineRunCommandUpdate(UpdateResource): :vartype provisioning_state: str :ivar instance_view: The virtual machine run command instance view. :vartype instance_view: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandInstanceView + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandInstanceView :ivar treat_failure_as_deployment_failure: Optional. If set to true, any failure in the script will fail the deployment and ProvisioningState will be marked as Failed. If set to false, ProvisioningState would only reflect whether the run command was run or not by the extensions @@ -12104,12 +11689,12 @@ def __init__( :keyword tags: Resource tags. :paramtype tags: dict[str, str] :keyword source: The source of the run command script. - :paramtype source: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandScriptSource + :paramtype source: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandScriptSource :keyword parameters: The parameters used by the script. - :paramtype parameters: list[~azure.mgmt.compute.v2024_11_01.models.RunCommandInputParameter] + :paramtype parameters: list[~azure.mgmt.compute.v2024_07_01.models.RunCommandInputParameter] :keyword protected_parameters: The parameters used by the script. :paramtype protected_parameters: - list[~azure.mgmt.compute.v2024_11_01.models.RunCommandInputParameter] + list[~azure.mgmt.compute.v2024_07_01.models.RunCommandInputParameter] :keyword async_execution: Optional. If set to true, provisioning will complete as soon as the script starts and will not wait for script to complete. :paramtype async_execution: bool @@ -12135,7 +11720,7 @@ def __init__( For more info on managed identity and Run Command, refer https://aka.ms/ManagedIdentity and https://aka.ms/RunCommandManaged. :paramtype output_blob_managed_identity: - ~azure.mgmt.compute.v2024_11_01.models.RunCommandManagedIdentity + ~azure.mgmt.compute.v2024_07_01.models.RunCommandManagedIdentity :keyword error_blob_managed_identity: User-assigned managed identity that has access to errorBlobUri storage blob. Use an empty object in case of system-assigned identity. Make sure managed identity has been given access to blob's container with 'Storage Blob Data Contributor' @@ -12143,7 +11728,7 @@ def __init__( For more info on managed identity and Run Command, refer https://aka.ms/ManagedIdentity and https://aka.ms/RunCommandManaged. :paramtype error_blob_managed_identity: - ~azure.mgmt.compute.v2024_11_01.models.RunCommandManagedIdentity + ~azure.mgmt.compute.v2024_07_01.models.RunCommandManagedIdentity :keyword treat_failure_as_deployment_failure: Optional. If set to true, any failure in the script will fail the deployment and ProvisioningState will be marked as Failed. If set to false, ProvisioningState would only reflect whether the run command was run or not by the @@ -12164,8 +11749,8 @@ def __init__( self.error_blob_uri = error_blob_uri self.output_blob_managed_identity = output_blob_managed_identity self.error_blob_managed_identity = error_blob_managed_identity - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineRunCommandInstanceView"] = None self.treat_failure_as_deployment_failure = treat_failure_as_deployment_failure @@ -12187,32 +11772,32 @@ class VirtualMachineScaleSet(Resource): :ivar tags: Resource tags. :vartype tags: dict[str, str] :ivar sku: The virtual machine scale set sku. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :ivar plan: Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - :vartype plan: ~azure.mgmt.compute.v2024_11_01.models.Plan + :vartype plan: ~azure.mgmt.compute.v2024_07_01.models.Plan :ivar identity: The identity of the virtual machine scale set, if configured. - :vartype identity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetIdentity + :vartype identity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetIdentity :ivar zones: The virtual machine scale set zones. :vartype zones: list[str] :ivar extended_location: The extended location of the Virtual Machine Scale Set. - :vartype extended_location: ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocation + :vartype extended_location: ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocation :ivar etag: Etag is property returned in Create/Update/Get response of the VMSS, so that customer can supply it in the header to ensure optimistic updates. :vartype etag: str :ivar upgrade_policy: The upgrade policy. - :vartype upgrade_policy: ~azure.mgmt.compute.v2024_11_01.models.UpgradePolicy + :vartype upgrade_policy: ~azure.mgmt.compute.v2024_07_01.models.UpgradePolicy :ivar scheduled_events_policy: The ScheduledEventsPolicy. - :vartype scheduled_events_policy: ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsPolicy + :vartype scheduled_events_policy: ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsPolicy :ivar automatic_repairs_policy: Policy for automatic repairs. :vartype automatic_repairs_policy: - ~azure.mgmt.compute.v2024_11_01.models.AutomaticRepairsPolicy + ~azure.mgmt.compute.v2024_07_01.models.AutomaticRepairsPolicy :ivar virtual_machine_profile: The virtual machine profile. :vartype virtual_machine_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMProfile :ivar provisioning_state: The provisioning state, which only appears in the response. :vartype provisioning_state: str :ivar overprovision: Specifies whether the Virtual Machine Scale Set should be overprovisioned. @@ -12236,27 +11821,27 @@ class VirtualMachineScaleSet(Resource): :vartype platform_fault_domain_count: int :ivar proximity_placement_group: Specifies information about the proximity placement group that the virtual machine scale set should be assigned to. Minimum api-version: 2018-04-01. - :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar host_group: Specifies information about the dedicated host group that the virtual machine scale set resides in. Minimum api-version: 2020-06-01. - :vartype host_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype host_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar additional_capabilities: Specifies additional capabilities enabled or disabled on the Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines have the capability to support attaching managed data disks with UltraSSD_LRS storage account type. - :vartype additional_capabilities: ~azure.mgmt.compute.v2024_11_01.models.AdditionalCapabilities + :vartype additional_capabilities: ~azure.mgmt.compute.v2024_07_01.models.AdditionalCapabilities :ivar scale_in_policy: Specifies the policies applied when scaling in Virtual Machines in the Virtual Machine Scale Set. - :vartype scale_in_policy: ~azure.mgmt.compute.v2024_11_01.models.ScaleInPolicy + :vartype scale_in_policy: ~azure.mgmt.compute.v2024_07_01.models.ScaleInPolicy :ivar orchestration_mode: Specifies the orchestration mode for the virtual machine scale set. Known values are: "Uniform" and "Flexible". - :vartype orchestration_mode: str or ~azure.mgmt.compute.v2024_11_01.models.OrchestrationMode + :vartype orchestration_mode: str or ~azure.mgmt.compute.v2024_07_01.models.OrchestrationMode :ivar spot_restore_policy: Specifies the Spot Restore properties for the virtual machine scale set. - :vartype spot_restore_policy: ~azure.mgmt.compute.v2024_11_01.models.SpotRestorePolicy + :vartype spot_restore_policy: ~azure.mgmt.compute.v2024_07_01.models.SpotRestorePolicy :ivar priority_mix_policy: Specifies the desired targets for mixing Spot and Regular priority VMs within the same VMSS Flex instance. - :vartype priority_mix_policy: ~azure.mgmt.compute.v2024_11_01.models.PriorityMixPolicy + :vartype priority_mix_policy: ~azure.mgmt.compute.v2024_07_01.models.PriorityMixPolicy :ivar time_created: Specifies the time at which the Virtual Machine Scale Set resource was created. Minimum api-version: 2021-11-01. :vartype time_created: ~datetime.datetime @@ -12264,13 +11849,13 @@ class VirtualMachineScaleSet(Resource): omitted. :vartype constrained_maximum_capacity: bool :ivar resiliency_policy: Policy for Resiliency. - :vartype resiliency_policy: ~azure.mgmt.compute.v2024_11_01.models.ResiliencyPolicy + :vartype resiliency_policy: ~azure.mgmt.compute.v2024_07_01.models.ResiliencyPolicy :ivar zonal_platform_fault_domain_align_mode: Specifies the align mode between Virtual Machine Scale Set compute and storage Fault Domain count. Known values are: "Aligned" and "Unaligned". :vartype zonal_platform_fault_domain_align_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.ZonalPlatformFaultDomainAlignMode + ~azure.mgmt.compute.v2024_07_01.models.ZonalPlatformFaultDomainAlignMode :ivar sku_profile: Specifies the sku profile for the virtual machine scale set. - :vartype sku_profile: ~azure.mgmt.compute.v2024_11_01.models.SkuProfile + :vartype sku_profile: ~azure.mgmt.compute.v2024_07_01.models.SkuProfile """ _validation = { @@ -12370,30 +11955,30 @@ def __init__( # pylint: disable=too-many-locals :keyword tags: Resource tags. :paramtype tags: dict[str, str] :keyword sku: The virtual machine scale set sku. - :paramtype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :paramtype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :keyword plan: Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - :paramtype plan: ~azure.mgmt.compute.v2024_11_01.models.Plan + :paramtype plan: ~azure.mgmt.compute.v2024_07_01.models.Plan :keyword identity: The identity of the virtual machine scale set, if configured. - :paramtype identity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetIdentity + :paramtype identity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetIdentity :keyword zones: The virtual machine scale set zones. :paramtype zones: list[str] :keyword extended_location: The extended location of the Virtual Machine Scale Set. - :paramtype extended_location: ~azure.mgmt.compute.v2024_11_01.models.ExtendedLocation + :paramtype extended_location: ~azure.mgmt.compute.v2024_07_01.models.ExtendedLocation :keyword upgrade_policy: The upgrade policy. - :paramtype upgrade_policy: ~azure.mgmt.compute.v2024_11_01.models.UpgradePolicy + :paramtype upgrade_policy: ~azure.mgmt.compute.v2024_07_01.models.UpgradePolicy :keyword scheduled_events_policy: The ScheduledEventsPolicy. :paramtype scheduled_events_policy: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsPolicy + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsPolicy :keyword automatic_repairs_policy: Policy for automatic repairs. :paramtype automatic_repairs_policy: - ~azure.mgmt.compute.v2024_11_01.models.AutomaticRepairsPolicy + ~azure.mgmt.compute.v2024_07_01.models.AutomaticRepairsPolicy :keyword virtual_machine_profile: The virtual machine profile. :paramtype virtual_machine_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMProfile :keyword overprovision: Specifies whether the Virtual Machine Scale Set should be overprovisioned. :paramtype overprovision: bool @@ -12414,40 +11999,40 @@ def __init__( # pylint: disable=too-many-locals :paramtype platform_fault_domain_count: int :keyword proximity_placement_group: Specifies information about the proximity placement group that the virtual machine scale set should be assigned to. Minimum api-version: 2018-04-01. - :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword host_group: Specifies information about the dedicated host group that the virtual machine scale set resides in. Minimum api-version: 2020-06-01. - :paramtype host_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype host_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword additional_capabilities: Specifies additional capabilities enabled or disabled on the Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines have the capability to support attaching managed data disks with UltraSSD_LRS storage account type. :paramtype additional_capabilities: - ~azure.mgmt.compute.v2024_11_01.models.AdditionalCapabilities + ~azure.mgmt.compute.v2024_07_01.models.AdditionalCapabilities :keyword scale_in_policy: Specifies the policies applied when scaling in Virtual Machines in the Virtual Machine Scale Set. - :paramtype scale_in_policy: ~azure.mgmt.compute.v2024_11_01.models.ScaleInPolicy + :paramtype scale_in_policy: ~azure.mgmt.compute.v2024_07_01.models.ScaleInPolicy :keyword orchestration_mode: Specifies the orchestration mode for the virtual machine scale set. Known values are: "Uniform" and "Flexible". - :paramtype orchestration_mode: str or ~azure.mgmt.compute.v2024_11_01.models.OrchestrationMode + :paramtype orchestration_mode: str or ~azure.mgmt.compute.v2024_07_01.models.OrchestrationMode :keyword spot_restore_policy: Specifies the Spot Restore properties for the virtual machine scale set. - :paramtype spot_restore_policy: ~azure.mgmt.compute.v2024_11_01.models.SpotRestorePolicy + :paramtype spot_restore_policy: ~azure.mgmt.compute.v2024_07_01.models.SpotRestorePolicy :keyword priority_mix_policy: Specifies the desired targets for mixing Spot and Regular priority VMs within the same VMSS Flex instance. - :paramtype priority_mix_policy: ~azure.mgmt.compute.v2024_11_01.models.PriorityMixPolicy + :paramtype priority_mix_policy: ~azure.mgmt.compute.v2024_07_01.models.PriorityMixPolicy :keyword constrained_maximum_capacity: Optional property which must either be set to True or omitted. :paramtype constrained_maximum_capacity: bool :keyword resiliency_policy: Policy for Resiliency. - :paramtype resiliency_policy: ~azure.mgmt.compute.v2024_11_01.models.ResiliencyPolicy + :paramtype resiliency_policy: ~azure.mgmt.compute.v2024_07_01.models.ResiliencyPolicy :keyword zonal_platform_fault_domain_align_mode: Specifies the align mode between Virtual Machine Scale Set compute and storage Fault Domain count. Known values are: "Aligned" and "Unaligned". :paramtype zonal_platform_fault_domain_align_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.ZonalPlatformFaultDomainAlignMode + ~azure.mgmt.compute.v2024_07_01.models.ZonalPlatformFaultDomainAlignMode :keyword sku_profile: Specifies the sku profile for the virtual machine scale set. - :paramtype sku_profile: ~azure.mgmt.compute.v2024_11_01.models.SkuProfile + :paramtype sku_profile: ~azure.mgmt.compute.v2024_07_01.models.SkuProfile """ super().__init__(location=location, tags=tags, **kwargs) self.sku = sku @@ -12455,15 +12040,15 @@ def __init__( # pylint: disable=too-many-locals self.identity = identity self.zones = zones self.extended_location = extended_location - self.etag = None + self.etag: Optional[str] = None self.upgrade_policy = upgrade_policy self.scheduled_events_policy = scheduled_events_policy self.automatic_repairs_policy = automatic_repairs_policy self.virtual_machine_profile = virtual_machine_profile - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.overprovision = overprovision self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms - self.unique_id = None + self.unique_id: Optional[str] = None self.single_placement_group = single_placement_group self.zone_balance = zone_balance self.platform_fault_domain_count = platform_fault_domain_count @@ -12474,7 +12059,7 @@ def __init__( # pylint: disable=too-many-locals self.orchestration_mode = orchestration_mode self.spot_restore_policy = spot_restore_policy self.priority_mix_policy = priority_mix_policy - self.time_created = None + self.time_created: Optional[datetime.datetime] = None self.constrained_maximum_capacity = constrained_maximum_capacity self.resiliency_policy = resiliency_policy self.zonal_platform_fault_domain_align_mode = zonal_platform_fault_domain_align_mode @@ -12495,20 +12080,20 @@ class VirtualMachineScaleSetDataDisk(_serialization.Model): :ivar caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The default values are: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :vartype write_accelerator_enabled: bool :ivar create_option: The create option. Required. Known values are: "FromImage", "Empty", "Attach", "Copy", and "Restore". - :vartype create_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskCreateOptionTypes + :vartype create_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskCreateOptionTypes :ivar disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. The property diskSizeGB is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023. :vartype disk_size_gb: int :ivar managed_disk: The managed disk parameters. :vartype managed_disk: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetManagedDiskParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetManagedDiskParameters :ivar disk_iops_read_write: Specifies the Read-Write IOPS for the managed disk. Should be used only when StorageAccountType is UltraSSD_LRS. If not specified, a default value would be assigned based on diskSizeGB. @@ -12524,7 +12109,7 @@ class VirtualMachineScaleSetDataDisk(_serialization.Model): :code:`
    ` **Detach** If this value is used, the data disk is retained after VMSS Flex VM is deleted.\\ :code:`
    `\\ :code:`
    ` The default value is set to **Delete**. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes """ _validation = { @@ -12570,20 +12155,20 @@ def __init__( :keyword caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The default values are: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :paramtype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :paramtype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :keyword write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :paramtype write_accelerator_enabled: bool :keyword create_option: The create option. Required. Known values are: "FromImage", "Empty", "Attach", "Copy", and "Restore". - :paramtype create_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskCreateOptionTypes + :paramtype create_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskCreateOptionTypes :keyword disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. The property diskSizeGB is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023. :paramtype disk_size_gb: int :keyword managed_disk: The managed disk parameters. :paramtype managed_disk: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetManagedDiskParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetManagedDiskParameters :keyword disk_iops_read_write: Specifies the Read-Write IOPS for the managed disk. Should be used only when StorageAccountType is UltraSSD_LRS. If not specified, a default value would be assigned based on diskSizeGB. @@ -12599,7 +12184,7 @@ def __init__( :code:`
    ` **Detach** If this value is used, the data disk is retained after VMSS Flex VM is deleted.\\ :code:`
    `\\ :code:`
    ` The default value is set to **Delete**. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes """ super().__init__(**kwargs) self.name = name @@ -12659,7 +12244,7 @@ class VirtualMachineScaleSetExtension(SubResourceReadOnly): :ivar protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :vartype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference """ _validation = { @@ -12741,11 +12326,11 @@ def __init__( :keyword protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :paramtype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference """ super().__init__(**kwargs) self.name = name - self.type = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -12754,7 +12339,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.provision_after_extensions = provision_after_extensions self.suppress_failures = suppress_failures self.protected_settings_from_key_vault = protected_settings_from_key_vault @@ -12766,7 +12351,7 @@ class VirtualMachineScaleSetExtensionListResult(_serialization.Model): # pylint All required parameters must be populated in order to send to server. :ivar value: The list of VM scale set extensions. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :ivar next_link: The uri to fetch the next page of VM scale set extensions. Call ListNext() with this to fetch the next page of VM scale set extensions. :vartype next_link: str @@ -12786,7 +12371,7 @@ def __init__( ) -> None: """ :keyword value: The list of VM scale set extensions. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :keyword next_link: The uri to fetch the next page of VM scale set extensions. Call ListNext() with this to fetch the next page of VM scale set extensions. :paramtype next_link: str @@ -12801,7 +12386,7 @@ class VirtualMachineScaleSetExtensionProfile(_serialization.Model): :ivar extensions: The virtual machine scale set child extension resources. :vartype extensions: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :ivar extensions_time_budget: Specifies the time alloted for all extensions to start. The time duration should be between 15 minutes and 120 minutes (inclusive) and should be specified in ISO 8601 format. The default value is 90 minutes (PT1H30M). Minimum api-version: 2020-06-01. @@ -12823,7 +12408,7 @@ def __init__( """ :keyword extensions: The virtual machine scale set child extension resources. :paramtype extensions: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :keyword extensions_time_budget: Specifies the time alloted for all extensions to start. The time duration should be between 15 minutes and 120 minutes (inclusive) and should be specified in ISO 8601 format. The default value is 90 minutes (PT1H30M). Minimum api-version: 2020-06-01. @@ -12879,7 +12464,7 @@ class VirtualMachineScaleSetExtensionUpdate(SubResourceReadOnly): :ivar protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :vartype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference """ _validation = { @@ -12959,11 +12544,11 @@ def __init__( :keyword protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :paramtype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -12972,7 +12557,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.provision_after_extensions = provision_after_extensions self.suppress_failures = suppress_failures self.protected_settings_from_key_vault = protected_settings_from_key_vault @@ -12984,7 +12569,7 @@ class VirtualMachineScaleSetHardwareProfile(_serialization.Model): :ivar vm_size_properties: Specifies the properties for customizing the size of the virtual machine. Minimum api-version: 2021-11-01. Please follow the instructions in `VM Customization `_ for more details. - :vartype vm_size_properties: ~azure.mgmt.compute.v2024_11_01.models.VMSizeProperties + :vartype vm_size_properties: ~azure.mgmt.compute.v2024_07_01.models.VMSizeProperties """ _attribute_map = { @@ -12996,7 +12581,7 @@ def __init__(self, *, vm_size_properties: Optional["_models.VMSizeProperties"] = :keyword vm_size_properties: Specifies the properties for customizing the size of the virtual machine. Minimum api-version: 2021-11-01. Please follow the instructions in `VM Customization `_ for more details. - :paramtype vm_size_properties: ~azure.mgmt.compute.v2024_11_01.models.VMSizeProperties + :paramtype vm_size_properties: ~azure.mgmt.compute.v2024_07_01.models.VMSizeProperties """ super().__init__(**kwargs) self.vm_size_properties = vm_size_properties @@ -13018,12 +12603,12 @@ class VirtualMachineScaleSetIdentity(_serialization.Model): assigned identities. The type 'None' will remove any identities from the virtual machine scale set. Known values are: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned", and "None". - :vartype type: str or ~azure.mgmt.compute.v2024_11_01.models.ResourceIdentityType + :vartype type: str or ~azure.mgmt.compute.v2024_07_01.models.ResourceIdentityType :ivar user_assigned_identities: The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, - ~azure.mgmt.compute.v2024_11_01.models.UserAssignedIdentitiesValue] + ~azure.mgmt.compute.v2024_07_01.models.UserAssignedIdentitiesValue] """ _validation = { @@ -13051,17 +12636,17 @@ def __init__( assigned identities. The type 'None' will remove any identities from the virtual machine scale set. Known values are: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned", and "None". - :paramtype type: str or ~azure.mgmt.compute.v2024_11_01.models.ResourceIdentityType + :paramtype type: str or ~azure.mgmt.compute.v2024_07_01.models.ResourceIdentityType :keyword user_assigned_identities: The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. # pylint: disable=line-too-long + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, - ~azure.mgmt.compute.v2024_11_01.models.UserAssignedIdentitiesValue] + ~azure.mgmt.compute.v2024_07_01.models.UserAssignedIdentitiesValue] """ super().__init__(**kwargs) - self.principal_id = None - self.tenant_id = None + self.principal_id: Optional[str] = None + self.tenant_id: Optional[str] = None self.type = type self.user_assigned_identities = user_assigned_identities @@ -13073,15 +12658,15 @@ class VirtualMachineScaleSetInstanceView(_serialization.Model): :ivar virtual_machine: The instance view status summary for the virtual machine scale set. :vartype virtual_machine: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetInstanceViewStatusesSummary + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetInstanceViewStatusesSummary :ivar extensions: The extensions information. :vartype extensions: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtensionsSummary] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtensionsSummary] :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :ivar orchestration_services: The orchestration services information. :vartype orchestration_services: - list[~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceSummary] + list[~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceSummary] """ _validation = { @@ -13100,13 +12685,13 @@ class VirtualMachineScaleSetInstanceView(_serialization.Model): def __init__(self, *, statuses: Optional[List["_models.InstanceViewStatus"]] = None, **kwargs: Any) -> None: """ :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] """ super().__init__(**kwargs) - self.virtual_machine = None - self.extensions = None + self.virtual_machine: Optional["_models.VirtualMachineScaleSetInstanceViewStatusesSummary"] = None + self.extensions: Optional[List["_models.VirtualMachineScaleSetVMExtensionsSummary"]] = None self.statuses = statuses - self.orchestration_services = None + self.orchestration_services: Optional[List["_models.OrchestrationServiceSummary"]] = None class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): # pylint: disable=name-too-long @@ -13116,7 +12701,7 @@ class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): :ivar statuses_summary: The extensions information. :vartype statuses_summary: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineStatusCodeCount] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineStatusCodeCount] """ _validation = { @@ -13130,7 +12715,7 @@ class VirtualMachineScaleSetInstanceViewStatusesSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.statuses_summary = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetIPConfiguration(_serialization.Model): @@ -13141,35 +12726,35 @@ class VirtualMachineScaleSetIPConfiguration(_serialization.Model): :ivar name: The IP configuration name. Required. :vartype name: str :ivar subnet: Specifies the identifier of the subnet. - :vartype subnet: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + :vartype subnet: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :ivar primary: Specifies the primary network interface in case the virtual machine has more than 1 network interface. :vartype primary: bool :ivar public_ip_address_configuration: The publicIPAddressConfiguration. :vartype public_ip_address_configuration: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetPublicIPAddressConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetPublicIPAddressConfiguration :ivar private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Known values are: "IPv4" and "IPv6". - :vartype private_ip_address_version: str or ~azure.mgmt.compute.v2024_11_01.models.IPVersion + :vartype private_ip_address_version: str or ~azure.mgmt.compute.v2024_07_01.models.IPVersion :ivar application_gateway_backend_address_pools: Specifies an array of references to backend address pools of application gateways. A scale set can reference backend address pools of multiple application gateways. Multiple scale sets cannot use the same application gateway. :vartype application_gateway_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :ivar application_security_groups: Specifies an array of references to application security group. - :vartype application_security_groups: list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + :vartype application_security_groups: list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :ivar load_balancer_backend_address_pools: Specifies an array of references to backend address pools of load balancers. A scale set can reference backend address pools of one public and one internal load balancer. Multiple scale sets cannot use the same basic sku load balancer. :vartype load_balancer_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :ivar load_balancer_inbound_nat_pools: Specifies an array of references to inbound Nat pools of the load balancers. A scale set can reference inbound nat pools of one public and one internal load balancer. Multiple scale sets cannot use the same basic sku load balancer. :vartype load_balancer_inbound_nat_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] """ _validation = { @@ -13215,37 +12800,37 @@ def __init__( :keyword name: The IP configuration name. Required. :paramtype name: str :keyword subnet: Specifies the identifier of the subnet. - :paramtype subnet: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + :paramtype subnet: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :keyword primary: Specifies the primary network interface in case the virtual machine has more than 1 network interface. :paramtype primary: bool :keyword public_ip_address_configuration: The publicIPAddressConfiguration. :paramtype public_ip_address_configuration: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetPublicIPAddressConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetPublicIPAddressConfiguration :keyword private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Known values are: "IPv4" and "IPv6". - :paramtype private_ip_address_version: str or ~azure.mgmt.compute.v2024_11_01.models.IPVersion + :paramtype private_ip_address_version: str or ~azure.mgmt.compute.v2024_07_01.models.IPVersion :keyword application_gateway_backend_address_pools: Specifies an array of references to backend address pools of application gateways. A scale set can reference backend address pools of multiple application gateways. Multiple scale sets cannot use the same application gateway. :paramtype application_gateway_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :keyword application_security_groups: Specifies an array of references to application security group. :paramtype application_security_groups: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :keyword load_balancer_backend_address_pools: Specifies an array of references to backend address pools of load balancers. A scale set can reference backend address pools of one public and one internal load balancer. Multiple scale sets cannot use the same basic sku load balancer. :paramtype load_balancer_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :keyword load_balancer_inbound_nat_pools: Specifies an array of references to inbound Nat pools of the load balancers. A scale set can reference inbound nat pools of one public and one internal load balancer. Multiple scale sets cannot use the same basic sku load balancer. :paramtype load_balancer_inbound_nat_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] """ super().__init__(**kwargs) self.name = name @@ -13292,7 +12877,7 @@ class VirtualMachineScaleSetListOSUpgradeHistory(_serialization.Model): # pylin :ivar value: The list of OS upgrades performed on the virtual machine scale set. Required. :vartype value: - list[~azure.mgmt.compute.v2024_11_01.models.UpgradeOperationHistoricalStatusInfo] + list[~azure.mgmt.compute.v2024_07_01.models.UpgradeOperationHistoricalStatusInfo] :ivar next_link: The uri to fetch the next page of OS Upgrade History. Call ListNext() with this to fetch the next page of history of upgrades. :vartype next_link: str @@ -13317,7 +12902,7 @@ def __init__( """ :keyword value: The list of OS upgrades performed on the virtual machine scale set. Required. :paramtype value: - list[~azure.mgmt.compute.v2024_11_01.models.UpgradeOperationHistoricalStatusInfo] + list[~azure.mgmt.compute.v2024_07_01.models.UpgradeOperationHistoricalStatusInfo] :keyword next_link: The uri to fetch the next page of OS Upgrade History. Call ListNext() with this to fetch the next page of history of upgrades. :paramtype next_link: str @@ -13333,7 +12918,7 @@ class VirtualMachineScaleSetListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of virtual machine scale sets. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :ivar next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of VMSS. :vartype next_link: str @@ -13353,7 +12938,7 @@ def __init__( ) -> None: """ :keyword value: The list of virtual machine scale sets. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :keyword next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of VMSS. :paramtype next_link: str @@ -13369,7 +12954,7 @@ class VirtualMachineScaleSetListSkusResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of skus available for the virtual machine scale set. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetSku] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetSku] :ivar next_link: The uri to fetch the next page of Virtual Machine Scale Set Skus. Call ListNext() with this to fetch the next page of VMSS Skus. :vartype next_link: str @@ -13389,7 +12974,7 @@ def __init__( ) -> None: """ :keyword value: The list of skus available for the virtual machine scale set. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetSku] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetSku] :keyword next_link: The uri to fetch the next page of Virtual Machine Scale Set Skus. Call ListNext() with this to fetch the next page of VMSS Skus. :paramtype next_link: str @@ -13405,7 +12990,7 @@ class VirtualMachineScaleSetListWithLinkResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of virtual machine scale sets. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :ivar next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of Virtual Machine Scale Sets. :vartype next_link: str @@ -13425,7 +13010,7 @@ def __init__( ) -> None: """ :keyword value: The list of virtual machine scale sets. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :keyword next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of Virtual Machine Scale Sets. :paramtype next_link: str @@ -13443,13 +13028,13 @@ class VirtualMachineScaleSetManagedDiskParameters(_serialization.Model): # pyli are: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS", and "PremiumV2_LRS". :vartype storage_account_type: str or - ~azure.mgmt.compute.v2024_11_01.models.StorageAccountTypes + ~azure.mgmt.compute.v2024_07_01.models.StorageAccountTypes :ivar disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed disk. :vartype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :ivar security_profile: Specifies the security profile for the managed disk. - :vartype security_profile: ~azure.mgmt.compute.v2024_11_01.models.VMDiskSecurityProfile + :vartype security_profile: ~azure.mgmt.compute.v2024_07_01.models.VMDiskSecurityProfile """ _attribute_map = { @@ -13472,13 +13057,13 @@ def __init__( are: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS", and "PremiumV2_LRS". :paramtype storage_account_type: str or - ~azure.mgmt.compute.v2024_11_01.models.StorageAccountTypes + ~azure.mgmt.compute.v2024_07_01.models.StorageAccountTypes :keyword disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed disk. :paramtype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters :keyword security_profile: Specifies the security profile for the managed disk. - :paramtype security_profile: ~azure.mgmt.compute.v2024_11_01.models.VMDiskSecurityProfile + :paramtype security_profile: ~azure.mgmt.compute.v2024_07_01.models.VMDiskSecurityProfile """ super().__init__(**kwargs) self.storage_account_type = storage_account_type @@ -13486,43 +13071,6 @@ def __init__( self.security_profile = security_profile -class VirtualMachineScaleSetMigrationInfo(_serialization.Model): - """Describes the Availability Set properties related to migration to Flexible Virtual Machine - Scale Set. - - Variables are only populated by the server, and will be ignored when sending a request. - - :ivar default_virtual_machine_scale_set_info: Indicates the target Virtual Machine ScaleSet - properties upon triggering a seamless migration without downtime of the VMs via the - ConvertToVirtualMachineScaleSet API. - :vartype default_virtual_machine_scale_set_info: - ~azure.mgmt.compute.v2024_11_01.models.DefaultVirtualMachineScaleSetInfo - :ivar migrate_to_virtual_machine_scale_set: Specifies the Virtual Machine Scale Set that the - Availability Set is migrated to. - :vartype migrate_to_virtual_machine_scale_set: - ~azure.mgmt.compute.v2024_11_01.models.SubResource - """ - - _validation = { - "default_virtual_machine_scale_set_info": {"readonly": True}, - "migrate_to_virtual_machine_scale_set": {"readonly": True}, - } - - _attribute_map = { - "default_virtual_machine_scale_set_info": { - "key": "defaultVirtualMachineScaleSetInfo", - "type": "DefaultVirtualMachineScaleSetInfo", - }, - "migrate_to_virtual_machine_scale_set": {"key": "migrateToVirtualMachineScaleSet", "type": "SubResource"}, - } - - def __init__(self, **kwargs: Any) -> None: - """ """ - super().__init__(**kwargs) - self.default_virtual_machine_scale_set_info = None - self.migrate_to_virtual_machine_scale_set = None - - class VirtualMachineScaleSetNetworkConfiguration(_serialization.Model): # pylint: disable=name-too-long """Describes a virtual machine scale set network profile's network configurations. @@ -13542,26 +13090,26 @@ class VirtualMachineScaleSetNetworkConfiguration(_serialization.Model): # pylin :ivar enable_fpga: Specifies whether the network interface is FPGA networking-enabled. :vartype enable_fpga: bool :ivar network_security_group: The network security group. - :vartype network_security_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype network_security_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar dns_settings: The dns settings to be applied on the network interfaces. :vartype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings :ivar ip_configurations: Specifies the IP configurations of the network interface. :vartype ip_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetIPConfiguration] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetIPConfiguration] :ivar enable_ip_forwarding: Whether IP forwarding enabled on this NIC. :vartype enable_ip_forwarding: bool :ivar delete_option: Specify what happens to the network interface when the VM is deleted. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions :ivar auxiliary_mode: Specifies whether the Auxiliary mode is enabled for the Network Interface resource. Known values are: "None", "AcceleratedConnections", and "Floating". :vartype auxiliary_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliaryMode + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliaryMode :ivar auxiliary_sku: Specifies whether the Auxiliary sku is enabled for the Network Interface resource. Known values are: "None", "A1", "A2", "A4", and "A8". :vartype auxiliary_sku: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliarySku + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliarySku """ _validation = { @@ -13618,26 +13166,26 @@ def __init__( :keyword enable_fpga: Specifies whether the network interface is FPGA networking-enabled. :paramtype enable_fpga: bool :keyword network_security_group: The network security group. - :paramtype network_security_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype network_security_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword dns_settings: The dns settings to be applied on the network interfaces. :paramtype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings :keyword ip_configurations: Specifies the IP configurations of the network interface. :paramtype ip_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetIPConfiguration] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetIPConfiguration] :keyword enable_ip_forwarding: Whether IP forwarding enabled on this NIC. :paramtype enable_ip_forwarding: bool :keyword delete_option: Specify what happens to the network interface when the VM is deleted. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions :keyword auxiliary_mode: Specifies whether the Auxiliary mode is enabled for the Network Interface resource. Known values are: "None", "AcceleratedConnections", and "Floating". :paramtype auxiliary_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliaryMode + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliaryMode :keyword auxiliary_sku: Specifies whether the Auxiliary sku is enabled for the Network Interface resource. Known values are: "None", "A1", "A2", "A4", and "A8". :paramtype auxiliary_sku: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliarySku + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliarySku """ super().__init__(**kwargs) self.name = name @@ -13679,16 +13227,15 @@ class VirtualMachineScaleSetNetworkProfile(_serialization.Model): :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long - :vartype health_probe: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. + :vartype health_probe: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetNetworkConfiguration] - :ivar network_api_version: Specifies the Microsoft.Network API version used when creating + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetNetworkConfiguration] + :ivar network_api_version: specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations for Virtual Machine Scale Set with - orchestration mode 'Flexible'. For support of all network properties, use '2022-11-01'. Known - values are: "2020-11-01" and "2022-11-01". - :vartype network_api_version: str or ~azure.mgmt.compute.v2024_11_01.models.NetworkApiVersion + orchestration mode 'Flexible'. "2020-11-01" + :vartype network_api_version: str or ~azure.mgmt.compute.v2024_07_01.models.NetworkApiVersion """ _attribute_map = { @@ -13711,16 +13258,15 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long - :paramtype health_probe: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. + :paramtype health_probe: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetNetworkConfiguration] - :keyword network_api_version: Specifies the Microsoft.Network API version used when creating + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetNetworkConfiguration] + :keyword network_api_version: specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations for Virtual Machine Scale Set with - orchestration mode 'Flexible'. For support of all network properties, use '2022-11-01'. Known - values are: "2020-11-01" and "2022-11-01". - :paramtype network_api_version: str or ~azure.mgmt.compute.v2024_11_01.models.NetworkApiVersion + orchestration mode 'Flexible'. "2020-11-01" + :paramtype network_api_version: str or ~azure.mgmt.compute.v2024_07_01.models.NetworkApiVersion """ super().__init__(**kwargs) self.health_probe = health_probe @@ -13738,7 +13284,7 @@ class VirtualMachineScaleSetOSDisk(_serialization.Model): :ivar caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The default values are: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :vartype write_accelerator_enabled: bool @@ -13748,10 +13294,10 @@ class VirtualMachineScaleSetOSDisk(_serialization.Model): described above. If you are using a marketplace image, you also use the plan element previously described. Required. Known values are: "FromImage", "Empty", "Attach", "Copy", and "Restore". - :vartype create_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskCreateOptionTypes + :vartype create_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskCreateOptionTypes :ivar diff_disk_settings: Specifies the ephemeral disk Settings for the operating system disk used by the virtual machine scale set. - :vartype diff_disk_settings: ~azure.mgmt.compute.v2024_11_01.models.DiffDiskSettings + :vartype diff_disk_settings: ~azure.mgmt.compute.v2024_07_01.models.DiffDiskSettings :ivar disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. The property 'diskSizeGB' is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023. @@ -13759,15 +13305,15 @@ class VirtualMachineScaleSetOSDisk(_serialization.Model): :ivar os_type: This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD. Possible values are: **Windows,** **Linux.**. Known values are: "Windows" and "Linux". - :vartype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :vartype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes :ivar image: Specifies information about the unmanaged user image to base the scale set on. - :vartype image: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :vartype image: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :ivar vhd_containers: Specifies the container urls that are used to store operating system disks for the scale set. :vartype vhd_containers: list[str] :ivar managed_disk: The managed disk parameters. :vartype managed_disk: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetManagedDiskParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetManagedDiskParameters :ivar delete_option: Specifies whether OS Disk should be deleted or detached upon VMSS Flex deletion (This feature is available for VMSS with Flexible OrchestrationMode only). :code:`
    `\\ :code:`
    ` Possible values: :code:`
    `\\ :code:`
    ` **Delete** If this @@ -13776,7 +13322,7 @@ class VirtualMachineScaleSetOSDisk(_serialization.Model): deleted. :code:`
    `\\ :code:`
    ` The default value is set to **Delete**. For an Ephemeral OS Disk, the default value is set to **Delete**. User cannot change the delete option for Ephemeral OS Disk. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes """ _validation = { @@ -13819,7 +13365,7 @@ def __init__( :keyword caching: Specifies the caching requirements. Possible values are: **None,** **ReadOnly,** **ReadWrite.** The default values are: **None for Standard storage. ReadOnly for Premium storage.**. Known values are: "None", "ReadOnly", and "ReadWrite". - :paramtype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :paramtype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :keyword write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :paramtype write_accelerator_enabled: bool @@ -13829,10 +13375,10 @@ def __init__( element described above. If you are using a marketplace image, you also use the plan element previously described. Required. Known values are: "FromImage", "Empty", "Attach", "Copy", and "Restore". - :paramtype create_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskCreateOptionTypes + :paramtype create_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskCreateOptionTypes :keyword diff_disk_settings: Specifies the ephemeral disk Settings for the operating system disk used by the virtual machine scale set. - :paramtype diff_disk_settings: ~azure.mgmt.compute.v2024_11_01.models.DiffDiskSettings + :paramtype diff_disk_settings: ~azure.mgmt.compute.v2024_07_01.models.DiffDiskSettings :keyword disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. The property 'diskSizeGB' is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023. @@ -13840,15 +13386,15 @@ def __init__( :keyword os_type: This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD. Possible values are: **Windows,** **Linux.**. Known values are: "Windows" and "Linux". - :paramtype os_type: str or ~azure.mgmt.compute.v2024_11_01.models.OperatingSystemTypes + :paramtype os_type: str or ~azure.mgmt.compute.v2024_07_01.models.OperatingSystemTypes :keyword image: Specifies information about the unmanaged user image to base the scale set on. - :paramtype image: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :paramtype image: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :keyword vhd_containers: Specifies the container urls that are used to store operating system disks for the scale set. :paramtype vhd_containers: list[str] :keyword managed_disk: The managed disk parameters. :paramtype managed_disk: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetManagedDiskParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetManagedDiskParameters :keyword delete_option: Specifies whether OS Disk should be deleted or detached upon VMSS Flex deletion (This feature is available for VMSS with Flexible OrchestrationMode only). :code:`
    `\\ :code:`
    ` Possible values: :code:`
    `\\ :code:`
    ` **Delete** If this @@ -13857,7 +13403,7 @@ def __init__( deleted. :code:`
    `\\ :code:`
    ` The default value is set to **Delete**. For an Ephemeral OS Disk, the default value is set to **Delete**. User cannot change the delete option for Ephemeral OS Disk. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes """ super().__init__(**kwargs) self.name = name @@ -13911,18 +13457,18 @@ class VirtualMachineScaleSetOSProfile(_serialization.Model): :vartype custom_data: str :ivar windows_configuration: Specifies Windows operating system settings on the virtual machine. - :vartype windows_configuration: ~azure.mgmt.compute.v2024_11_01.models.WindowsConfiguration + :vartype windows_configuration: ~azure.mgmt.compute.v2024_07_01.models.WindowsConfiguration :ivar linux_configuration: Specifies the Linux operating system settings on the virtual machine. For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions `_. - :vartype linux_configuration: ~azure.mgmt.compute.v2024_11_01.models.LinuxConfiguration + :vartype linux_configuration: ~azure.mgmt.compute.v2024_07_01.models.LinuxConfiguration :ivar secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. To install certificates on a virtual machine it is recommended to use the `Azure Key Vault virtual machine extension for Linux `_ or the `Azure Key Vault virtual machine extension for Windows `_. - :vartype secrets: list[~azure.mgmt.compute.v2024_11_01.models.VaultSecretGroup] + :vartype secrets: list[~azure.mgmt.compute.v2024_07_01.models.VaultSecretGroup] :ivar allow_extension_operations: Specifies whether extension operations should be allowed on the virtual machine scale set. This may only be set to False when no extensions are present on the virtual machine scale set. @@ -13994,18 +13540,18 @@ def __init__( :paramtype custom_data: str :keyword windows_configuration: Specifies Windows operating system settings on the virtual machine. - :paramtype windows_configuration: ~azure.mgmt.compute.v2024_11_01.models.WindowsConfiguration + :paramtype windows_configuration: ~azure.mgmt.compute.v2024_07_01.models.WindowsConfiguration :keyword linux_configuration: Specifies the Linux operating system settings on the virtual machine. For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions `_. - :paramtype linux_configuration: ~azure.mgmt.compute.v2024_11_01.models.LinuxConfiguration + :paramtype linux_configuration: ~azure.mgmt.compute.v2024_07_01.models.LinuxConfiguration :keyword secrets: Specifies set of certificates that should be installed onto the virtual machines in the scale set. To install certificates on a virtual machine it is recommended to use the `Azure Key Vault virtual machine extension for Linux `_ or the `Azure Key Vault virtual machine extension for Windows `_. - :paramtype secrets: list[~azure.mgmt.compute.v2024_11_01.models.VaultSecretGroup] + :paramtype secrets: list[~azure.mgmt.compute.v2024_07_01.models.VaultSecretGroup] :keyword allow_extension_operations: Specifies whether extension operations should be allowed on the virtual machine scale set. This may only be set to False when no extensions are present on the virtual machine scale set. @@ -14034,23 +13580,23 @@ class VirtualMachineScaleSetPublicIPAddressConfiguration(_serialization.Model): :ivar name: The publicIP address configuration name. Required. :vartype name: str :ivar sku: Describes the public IP Sku. It can only be set with OrchestrationMode as Flexible. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.PublicIPAddressSku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.PublicIPAddressSku :ivar idle_timeout_in_minutes: The idle timeout of the public IP address. :vartype idle_timeout_in_minutes: int :ivar dns_settings: The dns settings to be applied on the publicIP addresses . :vartype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings :ivar ip_tags: The list of IP tags associated with the public IP address. - :vartype ip_tags: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetIpTag] + :vartype ip_tags: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetIpTag] :ivar public_ip_prefix: The PublicIPPrefix from which to allocate publicIP addresses. - :vartype public_ip_prefix: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype public_ip_prefix: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar public_ip_address_version: Available from Api-Version 2019-07-01 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Known values are: "IPv4" and "IPv6". - :vartype public_ip_address_version: str or ~azure.mgmt.compute.v2024_11_01.models.IPVersion + :vartype public_ip_address_version: str or ~azure.mgmt.compute.v2024_07_01.models.IPVersion :ivar delete_option: Specify what happens to the public IP when the VM is deleted. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions """ _validation = { @@ -14089,23 +13635,23 @@ def __init__( :paramtype name: str :keyword sku: Describes the public IP Sku. It can only be set with OrchestrationMode as Flexible. - :paramtype sku: ~azure.mgmt.compute.v2024_11_01.models.PublicIPAddressSku + :paramtype sku: ~azure.mgmt.compute.v2024_07_01.models.PublicIPAddressSku :keyword idle_timeout_in_minutes: The idle timeout of the public IP address. :paramtype idle_timeout_in_minutes: int :keyword dns_settings: The dns settings to be applied on the publicIP addresses . :paramtype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings :keyword ip_tags: The list of IP tags associated with the public IP address. - :paramtype ip_tags: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetIpTag] + :paramtype ip_tags: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetIpTag] :keyword public_ip_prefix: The PublicIPPrefix from which to allocate publicIP addresses. - :paramtype public_ip_prefix: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype public_ip_prefix: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword public_ip_address_version: Available from Api-Version 2019-07-01 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Known values are: "IPv4" and "IPv6". - :paramtype public_ip_address_version: str or ~azure.mgmt.compute.v2024_11_01.models.IPVersion + :paramtype public_ip_address_version: str or ~azure.mgmt.compute.v2024_07_01.models.IPVersion :keyword delete_option: Specify what happens to the public IP when the VM is deleted. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions """ super().__init__(**kwargs) self.name = name @@ -14134,7 +13680,7 @@ class VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings( index will be the domain name labels of the PublicIPAddress resources that will be created. Known values are: "TenantReuse", "SubscriptionReuse", "ResourceGroupReuse", and "NoReuse". :vartype domain_name_label_scope: str or - ~azure.mgmt.compute.v2024_11_01.models.DomainNameLabelScopeTypes + ~azure.mgmt.compute.v2024_07_01.models.DomainNameLabelScopeTypes """ _validation = { @@ -14163,7 +13709,7 @@ def __init__( index will be the domain name labels of the PublicIPAddress resources that will be created. Known values are: "TenantReuse", "SubscriptionReuse", "ResourceGroupReuse", and "NoReuse". :paramtype domain_name_label_scope: str or - ~azure.mgmt.compute.v2024_11_01.models.DomainNameLabelScopeTypes + ~azure.mgmt.compute.v2024_07_01.models.DomainNameLabelScopeTypes """ super().__init__(**kwargs) self.domain_name_label = domain_name_label @@ -14181,7 +13727,7 @@ class VirtualMachineScaleSetVMReimageParameters(VirtualMachineReimageParameters) Disk. :vartype exact_version: str :ivar os_profile: Specifies information required for reimaging the non-ephemeral OS disk. - :vartype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfileProvisioningData + :vartype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfileProvisioningData :ivar force_update_os_disk_for_ephemeral: Parameter to force update ephemeral OS disk for a virtual machine scale set VM. :vartype force_update_os_disk_for_ephemeral: bool @@ -14212,7 +13758,7 @@ def __init__( Disk. :paramtype exact_version: str :keyword os_profile: Specifies information required for reimaging the non-ephemeral OS disk. - :paramtype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfileProvisioningData + :paramtype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfileProvisioningData :keyword force_update_os_disk_for_ephemeral: Parameter to force update ephemeral OS disk for a virtual machine scale set VM. :paramtype force_update_os_disk_for_ephemeral: bool @@ -14232,7 +13778,7 @@ class VirtualMachineScaleSetReimageParameters(VirtualMachineScaleSetVMReimagePar Disk. :vartype exact_version: str :ivar os_profile: Specifies information required for reimaging the non-ephemeral OS disk. - :vartype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfileProvisioningData + :vartype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfileProvisioningData :ivar force_update_os_disk_for_ephemeral: Parameter to force update ephemeral OS disk for a virtual machine scale set VM. :vartype force_update_os_disk_for_ephemeral: bool @@ -14269,7 +13815,7 @@ def __init__( Disk. :paramtype exact_version: str :keyword os_profile: Specifies information required for reimaging the non-ephemeral OS disk. - :paramtype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfileProvisioningData + :paramtype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfileProvisioningData :keyword force_update_os_disk_for_ephemeral: Parameter to force update ephemeral OS disk for a virtual machine scale set VM. :paramtype force_update_os_disk_for_ephemeral: bool @@ -14296,9 +13842,9 @@ class VirtualMachineScaleSetSku(_serialization.Model): :ivar resource_type: The type of resource the sku applies to. :vartype resource_type: str :ivar sku: The Sku. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :ivar capacity: Specifies the number of virtual machines in the scale set. - :vartype capacity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetSkuCapacity + :vartype capacity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetSkuCapacity """ _validation = { @@ -14316,9 +13862,9 @@ class VirtualMachineScaleSetSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.resource_type = None - self.sku = None - self.capacity = None + self.resource_type: Optional[str] = None + self.sku: Optional["_models.Sku"] = None + self.capacity: Optional["_models.VirtualMachineScaleSetSkuCapacity"] = None class VirtualMachineScaleSetSkuCapacity(_serialization.Model): @@ -14335,7 +13881,7 @@ class VirtualMachineScaleSetSkuCapacity(_serialization.Model): :ivar scale_type: The scale type applicable to the sku. Known values are: "Automatic" and "None". :vartype scale_type: str or - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetSkuScaleType + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetSkuScaleType """ _validation = { @@ -14355,10 +13901,10 @@ class VirtualMachineScaleSetSkuCapacity(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.minimum = None - self.maximum = None - self.default_capacity = None - self.scale_type = None + self.minimum: Optional[int] = None + self.maximum: Optional[int] = None + self.default_capacity: Optional[int] = None + self.scale_type: Optional[Union[str, "_models.VirtualMachineScaleSetSkuScaleType"]] = None class VirtualMachineScaleSetStorageProfile(_serialization.Model): @@ -14368,18 +13914,18 @@ class VirtualMachineScaleSetStorageProfile(_serialization.Model): information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations. - :vartype image_reference: ~azure.mgmt.compute.v2024_11_01.models.ImageReference + :vartype image_reference: ~azure.mgmt.compute.v2024_07_01.models.ImageReference :ivar os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. For more information about disks, see `About disks and VHDs for Azure virtual machines `_. - :vartype os_disk: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetOSDisk + :vartype os_disk: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetOSDisk :ivar data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. For more information about disks, see `About disks and VHDs for Azure virtual machines `_. :vartype data_disks: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetDataDisk] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetDataDisk] :ivar disk_controller_type: :vartype disk_controller_type: str """ @@ -14405,18 +13951,18 @@ def __init__( information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations. - :paramtype image_reference: ~azure.mgmt.compute.v2024_11_01.models.ImageReference + :paramtype image_reference: ~azure.mgmt.compute.v2024_07_01.models.ImageReference :keyword os_disk: Specifies information about the operating system disk used by the virtual machines in the scale set. For more information about disks, see `About disks and VHDs for Azure virtual machines `_. - :paramtype os_disk: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetOSDisk + :paramtype os_disk: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetOSDisk :keyword data_disks: Specifies the parameters that are used to add data disks to the virtual machines in the scale set. For more information about disks, see `About disks and VHDs for Azure virtual machines `_. :paramtype data_disks: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetDataDisk] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetDataDisk] :keyword disk_controller_type: :paramtype disk_controller_type: str """ @@ -14433,22 +13979,22 @@ class VirtualMachineScaleSetUpdate(UpdateResource): :ivar tags: Resource tags. :vartype tags: dict[str, str] :ivar sku: The virtual machine scale set sku. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :ivar plan: The purchase plan when deploying a virtual machine scale set from VM Marketplace images. - :vartype plan: ~azure.mgmt.compute.v2024_11_01.models.Plan + :vartype plan: ~azure.mgmt.compute.v2024_07_01.models.Plan :ivar identity: The identity of the virtual machine scale set, if configured. - :vartype identity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetIdentity + :vartype identity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetIdentity :ivar zones: The virtual machine scale set zones. :vartype zones: list[str] :ivar upgrade_policy: The upgrade policy. - :vartype upgrade_policy: ~azure.mgmt.compute.v2024_11_01.models.UpgradePolicy + :vartype upgrade_policy: ~azure.mgmt.compute.v2024_07_01.models.UpgradePolicy :ivar automatic_repairs_policy: Policy for automatic repairs. :vartype automatic_repairs_policy: - ~azure.mgmt.compute.v2024_11_01.models.AutomaticRepairsPolicy + ~azure.mgmt.compute.v2024_07_01.models.AutomaticRepairsPolicy :ivar virtual_machine_profile: The virtual machine profile. :vartype virtual_machine_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateVMProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateVMProfile :ivar overprovision: Specifies whether the Virtual Machine Scale Set should be overprovisioned. :vartype overprovision: bool :ivar do_not_run_extensions_on_overprovisioned_v_ms: When Overprovision is enabled, extensions @@ -14463,28 +14009,28 @@ class VirtualMachineScaleSetUpdate(UpdateResource): Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines have the capability to support attaching managed data disks with UltraSSD_LRS storage account type. - :vartype additional_capabilities: ~azure.mgmt.compute.v2024_11_01.models.AdditionalCapabilities + :vartype additional_capabilities: ~azure.mgmt.compute.v2024_07_01.models.AdditionalCapabilities :ivar scale_in_policy: Specifies the policies applied when scaling in Virtual Machines in the Virtual Machine Scale Set. - :vartype scale_in_policy: ~azure.mgmt.compute.v2024_11_01.models.ScaleInPolicy + :vartype scale_in_policy: ~azure.mgmt.compute.v2024_07_01.models.ScaleInPolicy :ivar proximity_placement_group: Specifies information about the proximity placement group that the virtual machine scale set should be assigned to. :code:`
    `\\ :code:`
    `Minimum api-version: 2018-04-01. - :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar priority_mix_policy: Specifies the desired targets for mixing Spot and Regular priority VMs within the same VMSS Flex instance. - :vartype priority_mix_policy: ~azure.mgmt.compute.v2024_11_01.models.PriorityMixPolicy + :vartype priority_mix_policy: ~azure.mgmt.compute.v2024_07_01.models.PriorityMixPolicy :ivar spot_restore_policy: Specifies the Spot Restore properties for the virtual machine scale set. - :vartype spot_restore_policy: ~azure.mgmt.compute.v2024_11_01.models.SpotRestorePolicy + :vartype spot_restore_policy: ~azure.mgmt.compute.v2024_07_01.models.SpotRestorePolicy :ivar resiliency_policy: Policy for Resiliency. - :vartype resiliency_policy: ~azure.mgmt.compute.v2024_11_01.models.ResiliencyPolicy + :vartype resiliency_policy: ~azure.mgmt.compute.v2024_07_01.models.ResiliencyPolicy :ivar zonal_platform_fault_domain_align_mode: Specifies the align mode between Virtual Machine Scale Set compute and storage Fault Domain count. Known values are: "Aligned" and "Unaligned". :vartype zonal_platform_fault_domain_align_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.ZonalPlatformFaultDomainAlignMode + ~azure.mgmt.compute.v2024_07_01.models.ZonalPlatformFaultDomainAlignMode :ivar sku_profile: Specifies the sku profile for the virtual machine scale set. - :vartype sku_profile: ~azure.mgmt.compute.v2024_11_01.models.SkuProfile + :vartype sku_profile: ~azure.mgmt.compute.v2024_07_01.models.SkuProfile """ _attribute_map = { @@ -14548,22 +14094,22 @@ def __init__( :keyword tags: Resource tags. :paramtype tags: dict[str, str] :keyword sku: The virtual machine scale set sku. - :paramtype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :paramtype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :keyword plan: The purchase plan when deploying a virtual machine scale set from VM Marketplace images. - :paramtype plan: ~azure.mgmt.compute.v2024_11_01.models.Plan + :paramtype plan: ~azure.mgmt.compute.v2024_07_01.models.Plan :keyword identity: The identity of the virtual machine scale set, if configured. - :paramtype identity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetIdentity + :paramtype identity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetIdentity :keyword zones: The virtual machine scale set zones. :paramtype zones: list[str] :keyword upgrade_policy: The upgrade policy. - :paramtype upgrade_policy: ~azure.mgmt.compute.v2024_11_01.models.UpgradePolicy + :paramtype upgrade_policy: ~azure.mgmt.compute.v2024_07_01.models.UpgradePolicy :keyword automatic_repairs_policy: Policy for automatic repairs. :paramtype automatic_repairs_policy: - ~azure.mgmt.compute.v2024_11_01.models.AutomaticRepairsPolicy + ~azure.mgmt.compute.v2024_07_01.models.AutomaticRepairsPolicy :keyword virtual_machine_profile: The virtual machine profile. :paramtype virtual_machine_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateVMProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateVMProfile :keyword overprovision: Specifies whether the Virtual Machine Scale Set should be overprovisioned. :paramtype overprovision: bool @@ -14580,29 +14126,29 @@ def __init__( have the capability to support attaching managed data disks with UltraSSD_LRS storage account type. :paramtype additional_capabilities: - ~azure.mgmt.compute.v2024_11_01.models.AdditionalCapabilities + ~azure.mgmt.compute.v2024_07_01.models.AdditionalCapabilities :keyword scale_in_policy: Specifies the policies applied when scaling in Virtual Machines in the Virtual Machine Scale Set. - :paramtype scale_in_policy: ~azure.mgmt.compute.v2024_11_01.models.ScaleInPolicy + :paramtype scale_in_policy: ~azure.mgmt.compute.v2024_07_01.models.ScaleInPolicy :keyword proximity_placement_group: Specifies information about the proximity placement group that the virtual machine scale set should be assigned to. :code:`
    `\\ :code:`
    `Minimum api-version: 2018-04-01. - :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword priority_mix_policy: Specifies the desired targets for mixing Spot and Regular priority VMs within the same VMSS Flex instance. - :paramtype priority_mix_policy: ~azure.mgmt.compute.v2024_11_01.models.PriorityMixPolicy + :paramtype priority_mix_policy: ~azure.mgmt.compute.v2024_07_01.models.PriorityMixPolicy :keyword spot_restore_policy: Specifies the Spot Restore properties for the virtual machine scale set. - :paramtype spot_restore_policy: ~azure.mgmt.compute.v2024_11_01.models.SpotRestorePolicy + :paramtype spot_restore_policy: ~azure.mgmt.compute.v2024_07_01.models.SpotRestorePolicy :keyword resiliency_policy: Policy for Resiliency. - :paramtype resiliency_policy: ~azure.mgmt.compute.v2024_11_01.models.ResiliencyPolicy + :paramtype resiliency_policy: ~azure.mgmt.compute.v2024_07_01.models.ResiliencyPolicy :keyword zonal_platform_fault_domain_align_mode: Specifies the align mode between Virtual Machine Scale Set compute and storage Fault Domain count. Known values are: "Aligned" and "Unaligned". :paramtype zonal_platform_fault_domain_align_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.ZonalPlatformFaultDomainAlignMode + ~azure.mgmt.compute.v2024_07_01.models.ZonalPlatformFaultDomainAlignMode :keyword sku_profile: Specifies the sku profile for the virtual machine scale set. - :paramtype sku_profile: ~azure.mgmt.compute.v2024_11_01.models.SkuProfile + :paramtype sku_profile: ~azure.mgmt.compute.v2024_07_01.models.SkuProfile """ super().__init__(tags=tags, **kwargs) self.sku = sku @@ -14633,29 +14179,29 @@ class VirtualMachineScaleSetUpdateIPConfiguration(_serialization.Model): # pyli :ivar name: The IP configuration name. :vartype name: str :ivar subnet: The subnet. - :vartype subnet: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + :vartype subnet: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :ivar primary: Specifies the primary IP Configuration in case the network interface has more than one IP Configuration. :vartype primary: bool :ivar public_ip_address_configuration: The publicIPAddressConfiguration. :vartype public_ip_address_configuration: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdatePublicIPAddressConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdatePublicIPAddressConfiguration :ivar private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Known values are: "IPv4" and "IPv6". - :vartype private_ip_address_version: str or ~azure.mgmt.compute.v2024_11_01.models.IPVersion + :vartype private_ip_address_version: str or ~azure.mgmt.compute.v2024_07_01.models.IPVersion :ivar application_gateway_backend_address_pools: The application gateway backend address pools. :vartype application_gateway_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :ivar application_security_groups: Specifies an array of references to application security group. - :vartype application_security_groups: list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + :vartype application_security_groups: list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :ivar load_balancer_backend_address_pools: The load balancer backend address pools. :vartype load_balancer_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :ivar load_balancer_inbound_nat_pools: The load balancer inbound nat pools. :vartype load_balancer_inbound_nat_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] """ _attribute_map = { @@ -14699,31 +14245,31 @@ def __init__( :keyword name: The IP configuration name. :paramtype name: str :keyword subnet: The subnet. - :paramtype subnet: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + :paramtype subnet: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :keyword primary: Specifies the primary IP Configuration in case the network interface has more than one IP Configuration. :paramtype primary: bool :keyword public_ip_address_configuration: The publicIPAddressConfiguration. :paramtype public_ip_address_configuration: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdatePublicIPAddressConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdatePublicIPAddressConfiguration :keyword private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Known values are: "IPv4" and "IPv6". - :paramtype private_ip_address_version: str or ~azure.mgmt.compute.v2024_11_01.models.IPVersion + :paramtype private_ip_address_version: str or ~azure.mgmt.compute.v2024_07_01.models.IPVersion :keyword application_gateway_backend_address_pools: The application gateway backend address pools. :paramtype application_gateway_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :keyword application_security_groups: Specifies an array of references to application security group. :paramtype application_security_groups: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :keyword load_balancer_backend_address_pools: The load balancer backend address pools. :paramtype load_balancer_backend_address_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] :keyword load_balancer_inbound_nat_pools: The load balancer inbound nat pools. :paramtype load_balancer_inbound_nat_pools: - list[~azure.mgmt.compute.v2024_11_01.models.SubResource] + list[~azure.mgmt.compute.v2024_07_01.models.SubResource] """ super().__init__(**kwargs) self.name = name @@ -14753,26 +14299,26 @@ class VirtualMachineScaleSetUpdateNetworkConfiguration(_serialization.Model): # :ivar enable_fpga: Specifies whether the network interface is FPGA networking-enabled. :vartype enable_fpga: bool :ivar network_security_group: The network security group. - :vartype network_security_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype network_security_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar dns_settings: The dns settings to be applied on the network interfaces. :vartype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings :ivar ip_configurations: The virtual machine scale set IP Configuration. :vartype ip_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateIPConfiguration] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateIPConfiguration] :ivar enable_ip_forwarding: Whether IP forwarding enabled on this NIC. :vartype enable_ip_forwarding: bool :ivar delete_option: Specify what happens to the network interface when the VM is deleted. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions :ivar auxiliary_mode: Specifies whether the Auxiliary mode is enabled for the Network Interface resource. Known values are: "None", "AcceleratedConnections", and "Floating". :vartype auxiliary_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliaryMode + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliaryMode :ivar auxiliary_sku: Specifies whether the Auxiliary sku is enabled for the Network Interface resource. Known values are: "None", "A1", "A2", "A4", and "A8". :vartype auxiliary_sku: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliarySku + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliarySku """ _attribute_map = { @@ -14827,26 +14373,26 @@ def __init__( :keyword enable_fpga: Specifies whether the network interface is FPGA networking-enabled. :paramtype enable_fpga: bool :keyword network_security_group: The network security group. - :paramtype network_security_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype network_security_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword dns_settings: The dns settings to be applied on the network interfaces. :paramtype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings :keyword ip_configurations: The virtual machine scale set IP Configuration. :paramtype ip_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateIPConfiguration] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateIPConfiguration] :keyword enable_ip_forwarding: Whether IP forwarding enabled on this NIC. :paramtype enable_ip_forwarding: bool :keyword delete_option: Specify what happens to the network interface when the VM is deleted. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions :keyword auxiliary_mode: Specifies whether the Auxiliary mode is enabled for the Network Interface resource. Known values are: "None", "AcceleratedConnections", and "Floating". :paramtype auxiliary_mode: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliaryMode + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliaryMode :keyword auxiliary_sku: Specifies whether the Auxiliary sku is enabled for the Network Interface resource. Known values are: "None", "A1", "A2", "A4", and "A8". :paramtype auxiliary_sku: str or - ~azure.mgmt.compute.v2024_11_01.models.NetworkInterfaceAuxiliarySku + ~azure.mgmt.compute.v2024_07_01.models.NetworkInterfaceAuxiliarySku """ super().__init__(**kwargs) self.name = name @@ -14868,16 +14414,15 @@ class VirtualMachineScaleSetUpdateNetworkProfile(_serialization.Model): # pylin :ivar health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long - :vartype health_probe: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. + :vartype health_probe: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateNetworkConfiguration] - :ivar network_api_version: Specifies the Microsoft.Network API version used when creating + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateNetworkConfiguration] + :ivar network_api_version: specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations for Virtual Machine Scale Set with - orchestration mode 'Flexible'. For support of all network properties, use '2022-11-01'. Known - values are: "2020-11-01" and "2022-11-01". - :vartype network_api_version: str or ~azure.mgmt.compute.v2024_11_01.models.NetworkApiVersion + orchestration mode 'Flexible'. "2020-11-01" + :vartype network_api_version: str or ~azure.mgmt.compute.v2024_07_01.models.NetworkApiVersion """ _attribute_map = { @@ -14902,16 +14447,15 @@ def __init__( """ :keyword health_probe: A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: - '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. # pylint: disable=line-too-long - :paramtype health_probe: ~azure.mgmt.compute.v2024_11_01.models.ApiEntityReference + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. + :paramtype health_probe: ~azure.mgmt.compute.v2024_07_01.models.ApiEntityReference :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateNetworkConfiguration] - :keyword network_api_version: Specifies the Microsoft.Network API version used when creating + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateNetworkConfiguration] + :keyword network_api_version: specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations for Virtual Machine Scale Set with - orchestration mode 'Flexible'. For support of all network properties, use '2022-11-01'. Known - values are: "2020-11-01" and "2022-11-01". - :paramtype network_api_version: str or ~azure.mgmt.compute.v2024_11_01.models.NetworkApiVersion + orchestration mode 'Flexible'. "2020-11-01" + :paramtype network_api_version: str or ~azure.mgmt.compute.v2024_07_01.models.NetworkApiVersion """ super().__init__(**kwargs) self.health_probe = health_probe @@ -14924,13 +14468,13 @@ class VirtualMachineScaleSetUpdateOSDisk(_serialization.Model): for Updating VMSS OS Disk. :ivar caching: The caching type. Known values are: "None", "ReadOnly", and "ReadWrite". - :vartype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :vartype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :ivar write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :vartype write_accelerator_enabled: bool :ivar diff_disk_settings: Specifies the ephemeral disk Settings for the operating system disk used by the virtual machine scale set. - :vartype diff_disk_settings: ~azure.mgmt.compute.v2024_11_01.models.DiffDiskSettings + :vartype diff_disk_settings: ~azure.mgmt.compute.v2024_07_01.models.DiffDiskSettings :ivar disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. :code:`
    `\\ :code:`
    ` diskSizeGB is the number of bytes x 1024^3 for the disk and the value cannot be larger than @@ -14939,12 +14483,12 @@ class VirtualMachineScaleSetUpdateOSDisk(_serialization.Model): :ivar image: The Source User Image VirtualHardDisk. This VirtualHardDisk will be copied before using it to attach to the Virtual Machine. If SourceImage is provided, the destination VirtualHardDisk should not exist. - :vartype image: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :vartype image: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :ivar vhd_containers: The list of virtual hard disk container uris. :vartype vhd_containers: list[str] :ivar managed_disk: The managed disk parameters. :vartype managed_disk: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetManagedDiskParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetManagedDiskParameters :ivar delete_option: Specifies whether OS Disk should be deleted or detached upon VMSS Flex deletion (This feature is available for VMSS with Flexible OrchestrationMode only). :code:`
    `\\ :code:`
    ` Possible values: :code:`
    `\\ :code:`
    ` **Delete** If this @@ -14953,7 +14497,7 @@ class VirtualMachineScaleSetUpdateOSDisk(_serialization.Model): deleted. :code:`
    `\\ :code:`
    ` The default value is set to **Delete**. For an Ephemeral OS Disk, the default value is set to **Delete**. User cannot change the delete option for Ephemeral OS Disk. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes """ _attribute_map = { @@ -14982,13 +14526,13 @@ def __init__( ) -> None: """ :keyword caching: The caching type. Known values are: "None", "ReadOnly", and "ReadWrite". - :paramtype caching: str or ~azure.mgmt.compute.v2024_11_01.models.CachingTypes + :paramtype caching: str or ~azure.mgmt.compute.v2024_07_01.models.CachingTypes :keyword write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or disabled on the disk. :paramtype write_accelerator_enabled: bool :keyword diff_disk_settings: Specifies the ephemeral disk Settings for the operating system disk used by the virtual machine scale set. - :paramtype diff_disk_settings: ~azure.mgmt.compute.v2024_11_01.models.DiffDiskSettings + :paramtype diff_disk_settings: ~azure.mgmt.compute.v2024_07_01.models.DiffDiskSettings :keyword disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. :code:`
    `\\ :code:`
    ` diskSizeGB is the number of bytes x 1024^3 for the disk and the value cannot be @@ -14997,12 +14541,12 @@ def __init__( :keyword image: The Source User Image VirtualHardDisk. This VirtualHardDisk will be copied before using it to attach to the Virtual Machine. If SourceImage is provided, the destination VirtualHardDisk should not exist. - :paramtype image: ~azure.mgmt.compute.v2024_11_01.models.VirtualHardDisk + :paramtype image: ~azure.mgmt.compute.v2024_07_01.models.VirtualHardDisk :keyword vhd_containers: The list of virtual hard disk container uris. :paramtype vhd_containers: list[str] :keyword managed_disk: The managed disk parameters. :paramtype managed_disk: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetManagedDiskParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetManagedDiskParameters :keyword delete_option: Specifies whether OS Disk should be deleted or detached upon VMSS Flex deletion (This feature is available for VMSS with Flexible OrchestrationMode only). :code:`
    `\\ :code:`
    ` Possible values: :code:`
    `\\ :code:`
    ` **Delete** If this @@ -15011,7 +14555,7 @@ def __init__( deleted. :code:`
    `\\ :code:`
    ` The default value is set to **Delete**. For an Ephemeral OS Disk, the default value is set to **Delete**. User cannot change the delete option for Ephemeral OS Disk. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DiskDeleteOptionTypes + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DiskDeleteOptionTypes """ super().__init__(**kwargs) self.caching = caching @@ -15030,11 +14574,11 @@ class VirtualMachineScaleSetUpdateOSProfile(_serialization.Model): :ivar custom_data: A base-64 encoded string of custom data. :vartype custom_data: str :ivar windows_configuration: The Windows Configuration of the OS profile. - :vartype windows_configuration: ~azure.mgmt.compute.v2024_11_01.models.WindowsConfiguration + :vartype windows_configuration: ~azure.mgmt.compute.v2024_07_01.models.WindowsConfiguration :ivar linux_configuration: The Linux Configuration of the OS profile. - :vartype linux_configuration: ~azure.mgmt.compute.v2024_11_01.models.LinuxConfiguration + :vartype linux_configuration: ~azure.mgmt.compute.v2024_07_01.models.LinuxConfiguration :ivar secrets: The List of certificates for addition to the VM. - :vartype secrets: list[~azure.mgmt.compute.v2024_11_01.models.VaultSecretGroup] + :vartype secrets: list[~azure.mgmt.compute.v2024_07_01.models.VaultSecretGroup] """ _attribute_map = { @@ -15057,11 +14601,11 @@ def __init__( :keyword custom_data: A base-64 encoded string of custom data. :paramtype custom_data: str :keyword windows_configuration: The Windows Configuration of the OS profile. - :paramtype windows_configuration: ~azure.mgmt.compute.v2024_11_01.models.WindowsConfiguration + :paramtype windows_configuration: ~azure.mgmt.compute.v2024_07_01.models.WindowsConfiguration :keyword linux_configuration: The Linux Configuration of the OS profile. - :paramtype linux_configuration: ~azure.mgmt.compute.v2024_11_01.models.LinuxConfiguration + :paramtype linux_configuration: ~azure.mgmt.compute.v2024_07_01.models.LinuxConfiguration :keyword secrets: The List of certificates for addition to the VM. - :paramtype secrets: list[~azure.mgmt.compute.v2024_11_01.models.VaultSecretGroup] + :paramtype secrets: list[~azure.mgmt.compute.v2024_07_01.models.VaultSecretGroup] """ super().__init__(**kwargs) self.custom_data = custom_data @@ -15079,12 +14623,12 @@ class VirtualMachineScaleSetUpdatePublicIPAddressConfiguration(_serialization.Mo :vartype idle_timeout_in_minutes: int :ivar dns_settings: The dns settings to be applied on the publicIP addresses . :vartype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings :ivar public_ip_prefix: The PublicIPPrefix from which to allocate publicIP addresses. - :vartype public_ip_prefix: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype public_ip_prefix: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar delete_option: Specify what happens to the public IP when the VM is deleted. Known values are: "Delete" and "Detach". - :vartype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :vartype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions """ _attribute_map = { @@ -15115,12 +14659,12 @@ def __init__( :paramtype idle_timeout_in_minutes: int :keyword dns_settings: The dns settings to be applied on the publicIP addresses . :paramtype dns_settings: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings :keyword public_ip_prefix: The PublicIPPrefix from which to allocate publicIP addresses. - :paramtype public_ip_prefix: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype public_ip_prefix: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword delete_option: Specify what happens to the public IP when the VM is deleted. Known values are: "Delete" and "Detach". - :paramtype delete_option: str or ~azure.mgmt.compute.v2024_11_01.models.DeleteOptions + :paramtype delete_option: str or ~azure.mgmt.compute.v2024_07_01.models.DeleteOptions """ super().__init__(**kwargs) self.name = name @@ -15134,12 +14678,12 @@ class VirtualMachineScaleSetUpdateStorageProfile(_serialization.Model): # pylin """Describes a virtual machine scale set storage profile. :ivar image_reference: The image reference. - :vartype image_reference: ~azure.mgmt.compute.v2024_11_01.models.ImageReference + :vartype image_reference: ~azure.mgmt.compute.v2024_07_01.models.ImageReference :ivar os_disk: The OS disk. - :vartype os_disk: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateOSDisk + :vartype os_disk: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateOSDisk :ivar data_disks: The data disks. :vartype data_disks: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetDataDisk] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetDataDisk] :ivar disk_controller_type: :vartype disk_controller_type: str """ @@ -15162,12 +14706,12 @@ def __init__( ) -> None: """ :keyword image_reference: The image reference. - :paramtype image_reference: ~azure.mgmt.compute.v2024_11_01.models.ImageReference + :paramtype image_reference: ~azure.mgmt.compute.v2024_07_01.models.ImageReference :keyword os_disk: The OS disk. - :paramtype os_disk: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateOSDisk + :paramtype os_disk: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateOSDisk :keyword data_disks: The data disks. :paramtype data_disks: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetDataDisk] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetDataDisk] :keyword disk_controller_type: :paramtype disk_controller_type: str """ @@ -15183,38 +14727,38 @@ class VirtualMachineScaleSetUpdateVMProfile(_serialization.Model): :ivar os_profile: The virtual machine scale set OS profile. :vartype os_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateOSProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateOSProfile :ivar storage_profile: The virtual machine scale set storage profile. :vartype storage_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateStorageProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateStorageProfile :ivar network_profile: The virtual machine scale set network profile. :vartype network_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateNetworkProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateNetworkProfile :ivar security_posture_reference: The virtual machine scale set security posture reference. :vartype security_posture_reference: - ~azure.mgmt.compute.v2024_11_01.models.SecurityPostureReferenceUpdate + ~azure.mgmt.compute.v2024_07_01.models.SecurityPostureReferenceUpdate :ivar security_profile: The virtual machine scale set Security profile. - :vartype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :vartype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :ivar diagnostics_profile: The virtual machine scale set diagnostics profile. - :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :ivar extension_profile: The virtual machine scale set extension profile. :vartype extension_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtensionProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtensionProfile :ivar license_type: The license type, which is for bring your own license scenario. :vartype license_type: str :ivar billing_profile: Specifies the billing related details of a Azure Spot VMSS. Minimum api-version: 2019-03-01. - :vartype billing_profile: ~azure.mgmt.compute.v2024_11_01.models.BillingProfile + :vartype billing_profile: ~azure.mgmt.compute.v2024_07_01.models.BillingProfile :ivar scheduled_events_profile: Specifies Scheduled Event related configurations. :vartype scheduled_events_profile: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsProfile + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsProfile :ivar user_data: UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here. :code:`
    `\\ :code:`
    `Minimum api-version: 2021-03-01. :vartype user_data: str :ivar hardware_profile: Specifies the hardware profile related details of a scale set. Minimum api-version: 2021-11-01. :vartype hardware_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetHardwareProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetHardwareProfile """ _attribute_map = { @@ -15252,38 +14796,38 @@ def __init__( """ :keyword os_profile: The virtual machine scale set OS profile. :paramtype os_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateOSProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateOSProfile :keyword storage_profile: The virtual machine scale set storage profile. :paramtype storage_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateStorageProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateStorageProfile :keyword network_profile: The virtual machine scale set network profile. :paramtype network_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdateNetworkProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdateNetworkProfile :keyword security_posture_reference: The virtual machine scale set security posture reference. :paramtype security_posture_reference: - ~azure.mgmt.compute.v2024_11_01.models.SecurityPostureReferenceUpdate + ~azure.mgmt.compute.v2024_07_01.models.SecurityPostureReferenceUpdate :keyword security_profile: The virtual machine scale set Security profile. - :paramtype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :paramtype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :keyword diagnostics_profile: The virtual machine scale set diagnostics profile. - :paramtype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :paramtype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :keyword extension_profile: The virtual machine scale set extension profile. :paramtype extension_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtensionProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtensionProfile :keyword license_type: The license type, which is for bring your own license scenario. :paramtype license_type: str :keyword billing_profile: Specifies the billing related details of a Azure Spot VMSS. Minimum api-version: 2019-03-01. - :paramtype billing_profile: ~azure.mgmt.compute.v2024_11_01.models.BillingProfile + :paramtype billing_profile: ~azure.mgmt.compute.v2024_07_01.models.BillingProfile :keyword scheduled_events_profile: Specifies Scheduled Event related configurations. :paramtype scheduled_events_profile: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsProfile + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsProfile :keyword user_data: UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here. :code:`
    `\\ :code:`
    `Minimum api-version: 2021-03-01. :paramtype user_data: str :keyword hardware_profile: Specifies the hardware profile related details of a scale set. Minimum api-version: 2021-11-01. :paramtype hardware_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetHardwareProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetHardwareProfile """ super().__init__(**kwargs) self.os_profile = os_profile @@ -15320,19 +14864,19 @@ class VirtualMachineScaleSetVM(Resource): :ivar instance_id: The virtual machine instance ID. :vartype instance_id: str :ivar sku: The virtual machine SKU. - :vartype sku: ~azure.mgmt.compute.v2024_11_01.models.Sku + :vartype sku: ~azure.mgmt.compute.v2024_07_01.models.Sku :ivar plan: Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - :vartype plan: ~azure.mgmt.compute.v2024_11_01.models.Plan + :vartype plan: ~azure.mgmt.compute.v2024_07_01.models.Plan :ivar resources: The virtual machine child extension resources. - :vartype resources: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + :vartype resources: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :ivar zones: The virtual machine zones. :vartype zones: list[str] :ivar identity: The identity of the virtual machine, if configured. - :vartype identity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineIdentity + :vartype identity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineIdentity :ivar etag: Etag is property returned in Update/Get response of the VMSS VM, so that customer can supply it in the header to ensure optimistic updates. :vartype etag: str @@ -15343,33 +14887,29 @@ class VirtualMachineScaleSetVM(Resource): :vartype vm_id: str :ivar instance_view: The virtual machine instance view. :vartype instance_view: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceView + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceView :ivar hardware_profile: Specifies the hardware settings for the virtual machine. - :vartype hardware_profile: ~azure.mgmt.compute.v2024_11_01.models.HardwareProfile - :ivar resilient_vm_deletion_status: Specifies the resilient VM deletion status for the virtual - machine. Known values are: "Enabled", "Disabled", "InProgress", and "Failed". - :vartype resilient_vm_deletion_status: str or - ~azure.mgmt.compute.v2024_11_01.models.ResilientVMDeletionStatus + :vartype hardware_profile: ~azure.mgmt.compute.v2024_07_01.models.HardwareProfile :ivar storage_profile: Specifies the storage settings for the virtual machine disks. - :vartype storage_profile: ~azure.mgmt.compute.v2024_11_01.models.StorageProfile + :vartype storage_profile: ~azure.mgmt.compute.v2024_07_01.models.StorageProfile :ivar additional_capabilities: Specifies additional capabilities enabled or disabled on the virtual machine in the scale set. For instance: whether the virtual machine has the capability to support attaching managed data disks with UltraSSD_LRS storage account type. - :vartype additional_capabilities: ~azure.mgmt.compute.v2024_11_01.models.AdditionalCapabilities + :vartype additional_capabilities: ~azure.mgmt.compute.v2024_07_01.models.AdditionalCapabilities :ivar os_profile: Specifies the operating system settings for the virtual machine. - :vartype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfile + :vartype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfile :ivar security_profile: Specifies the Security related profile settings for the virtual machine. - :vartype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :vartype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :ivar network_profile: Specifies the network interfaces of the virtual machine. - :vartype network_profile: ~azure.mgmt.compute.v2024_11_01.models.NetworkProfile + :vartype network_profile: ~azure.mgmt.compute.v2024_07_01.models.NetworkProfile :ivar network_profile_configuration: Specifies the network profile configuration of the virtual machine. :vartype network_profile_configuration: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMNetworkProfileConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMNetworkProfileConfiguration :ivar diagnostics_profile: Specifies the boot diagnostic settings state. Minimum api-version: 2015-06-15. - :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :ivar availability_set: Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability @@ -15379,7 +14919,7 @@ class VirtualMachineScaleSetVM(Resource): Azure `_. Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. - :vartype availability_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype availability_set: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar provisioning_state: The provisioning state, which only appears in the response. :vartype provisioning_state: str :ivar license_type: Specifies that the image or disk that is being used was licensed @@ -15399,7 +14939,7 @@ class VirtualMachineScaleSetVM(Resource): :vartype model_definition_applied: str :ivar protection_policy: Specifies the protection policy of the virtual machine. :vartype protection_policy: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMProtectionPolicy + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMProtectionPolicy :ivar user_data: UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here. Minimum api-version: 2021-03-01. :vartype user_data: str @@ -15443,7 +14983,6 @@ class VirtualMachineScaleSetVM(Resource): "vm_id": {"key": "properties.vmId", "type": "str"}, "instance_view": {"key": "properties.instanceView", "type": "VirtualMachineScaleSetVMInstanceView"}, "hardware_profile": {"key": "properties.hardwareProfile", "type": "HardwareProfile"}, - "resilient_vm_deletion_status": {"key": "properties.resilientVMDeletionStatus", "type": "str"}, "storage_profile": {"key": "properties.storageProfile", "type": "StorageProfile"}, "additional_capabilities": {"key": "properties.additionalCapabilities", "type": "AdditionalCapabilities"}, "os_profile": {"key": "properties.osProfile", "type": "OSProfile"}, @@ -15471,7 +15010,6 @@ def __init__( # pylint: disable=too-many-locals plan: Optional["_models.Plan"] = None, identity: Optional["_models.VirtualMachineIdentity"] = None, hardware_profile: Optional["_models.HardwareProfile"] = None, - resilient_vm_deletion_status: Optional[Union[str, "_models.ResilientVMDeletionStatus"]] = None, storage_profile: Optional["_models.StorageProfile"] = None, additional_capabilities: Optional["_models.AdditionalCapabilities"] = None, os_profile: Optional["_models.OSProfile"] = None, @@ -15495,36 +15033,32 @@ def __init__( # pylint: disable=too-many-locals image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - :paramtype plan: ~azure.mgmt.compute.v2024_11_01.models.Plan + :paramtype plan: ~azure.mgmt.compute.v2024_07_01.models.Plan :keyword identity: The identity of the virtual machine, if configured. - :paramtype identity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineIdentity + :paramtype identity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineIdentity :keyword hardware_profile: Specifies the hardware settings for the virtual machine. - :paramtype hardware_profile: ~azure.mgmt.compute.v2024_11_01.models.HardwareProfile - :keyword resilient_vm_deletion_status: Specifies the resilient VM deletion status for the - virtual machine. Known values are: "Enabled", "Disabled", "InProgress", and "Failed". - :paramtype resilient_vm_deletion_status: str or - ~azure.mgmt.compute.v2024_11_01.models.ResilientVMDeletionStatus + :paramtype hardware_profile: ~azure.mgmt.compute.v2024_07_01.models.HardwareProfile :keyword storage_profile: Specifies the storage settings for the virtual machine disks. - :paramtype storage_profile: ~azure.mgmt.compute.v2024_11_01.models.StorageProfile + :paramtype storage_profile: ~azure.mgmt.compute.v2024_07_01.models.StorageProfile :keyword additional_capabilities: Specifies additional capabilities enabled or disabled on the virtual machine in the scale set. For instance: whether the virtual machine has the capability to support attaching managed data disks with UltraSSD_LRS storage account type. :paramtype additional_capabilities: - ~azure.mgmt.compute.v2024_11_01.models.AdditionalCapabilities + ~azure.mgmt.compute.v2024_07_01.models.AdditionalCapabilities :keyword os_profile: Specifies the operating system settings for the virtual machine. - :paramtype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfile + :paramtype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfile :keyword security_profile: Specifies the Security related profile settings for the virtual machine. - :paramtype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :paramtype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :keyword network_profile: Specifies the network interfaces of the virtual machine. - :paramtype network_profile: ~azure.mgmt.compute.v2024_11_01.models.NetworkProfile + :paramtype network_profile: ~azure.mgmt.compute.v2024_07_01.models.NetworkProfile :keyword network_profile_configuration: Specifies the network profile configuration of the virtual machine. :paramtype network_profile_configuration: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMNetworkProfileConfiguration + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMNetworkProfileConfiguration :keyword diagnostics_profile: Specifies the boot diagnostic settings state. Minimum api-version: 2015-06-15. - :paramtype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :paramtype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :keyword availability_set: Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability @@ -15534,7 +15068,7 @@ def __init__( # pylint: disable=too-many-locals Azure `_. Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. - :paramtype availability_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype availability_set: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword license_type: Specifies that the image or disk that is being used was licensed on-premises. :code:`
    `\\ :code:`
    ` Possible values for Windows Server operating system are: :code:`
    `\\ :code:`
    ` Windows_Client :code:`
    `\\ :code:`
    ` Windows_Server @@ -15549,24 +15083,23 @@ def __init__( # pylint: disable=too-many-locals :paramtype license_type: str :keyword protection_policy: Specifies the protection policy of the virtual machine. :paramtype protection_policy: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMProtectionPolicy + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMProtectionPolicy :keyword user_data: UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here. Minimum api-version: 2021-03-01. :paramtype user_data: str """ super().__init__(location=location, tags=tags, **kwargs) - self.instance_id = None - self.sku = None + self.instance_id: Optional[str] = None + self.sku: Optional["_models.Sku"] = None self.plan = plan - self.resources = None - self.zones = None + self.resources: Optional[List["_models.VirtualMachineExtension"]] = None + self.zones: Optional[List[str]] = None self.identity = identity - self.etag = None - self.latest_model_applied = None - self.vm_id = None - self.instance_view = None + self.etag: Optional[str] = None + self.latest_model_applied: Optional[bool] = None + self.vm_id: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineScaleSetVMInstanceView"] = None self.hardware_profile = hardware_profile - self.resilient_vm_deletion_status = resilient_vm_deletion_status self.storage_profile = storage_profile self.additional_capabilities = additional_capabilities self.os_profile = os_profile @@ -15575,12 +15108,12 @@ def __init__( # pylint: disable=too-many-locals self.network_profile_configuration = network_profile_configuration self.diagnostics_profile = diagnostics_profile self.availability_set = availability_set - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.license_type = license_type - self.model_definition_applied = None + self.model_definition_applied: Optional[str] = None self.protection_policy = protection_policy self.user_data = user_data - self.time_created = None + self.time_created: Optional[datetime.datetime] = None class VirtualMachineScaleSetVMExtension(SubResourceReadOnly): @@ -15622,7 +15155,7 @@ class VirtualMachineScaleSetVMExtension(SubResourceReadOnly): :vartype provisioning_state: str :ivar instance_view: The virtual machine extension instance view. :vartype instance_view: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionInstanceView + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionInstanceView :ivar suppress_failures: Indicates whether failures stemming from the extension will be suppressed (Operational failures such as not connecting to the VM will not be suppressed regardless of this value). The default is false. @@ -15630,7 +15163,7 @@ class VirtualMachineScaleSetVMExtension(SubResourceReadOnly): :ivar protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :vartype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference :ivar provision_after_extensions: Collection of extension names after which this extension needs to be provisioned. :vartype provision_after_extensions: list[str] @@ -15711,7 +15244,7 @@ def __init__( :paramtype protected_settings: JSON :keyword instance_view: The virtual machine extension instance view. :paramtype instance_view: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionInstanceView + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionInstanceView :keyword suppress_failures: Indicates whether failures stemming from the extension will be suppressed (Operational failures such as not connecting to the VM will not be suppressed regardless of this value). The default is false. @@ -15719,14 +15252,14 @@ def __init__( :keyword protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :paramtype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference :keyword provision_after_extensions: Collection of extension names after which this extension needs to be provisioned. :paramtype provision_after_extensions: list[str] """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.force_update_tag = force_update_tag self.publisher = publisher @@ -15736,7 +15269,7 @@ def __init__( self.enable_automatic_upgrade = enable_automatic_upgrade self.settings = settings self.protected_settings = protected_settings - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.instance_view = instance_view self.suppress_failures = suppress_failures self.protected_settings_from_key_vault = protected_settings_from_key_vault @@ -15747,7 +15280,7 @@ class VirtualMachineScaleSetVMExtensionsListResult(_serialization.Model): # pyl """The List VMSS VM Extension operation response. :ivar value: The list of VMSS VM extensions. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] """ _attribute_map = { @@ -15760,7 +15293,7 @@ def __init__( """ :keyword value: The list of VMSS VM extensions. :paramtype value: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] """ super().__init__(**kwargs) self.value = value @@ -15775,7 +15308,7 @@ class VirtualMachineScaleSetVMExtensionsSummary(_serialization.Model): # pylint :vartype name: str :ivar statuses_summary: The extensions information. :vartype statuses_summary: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineStatusCodeCount] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineStatusCodeCount] """ _validation = { @@ -15791,8 +15324,8 @@ class VirtualMachineScaleSetVMExtensionsSummary(_serialization.Model): # pylint def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.statuses_summary = None + self.name: Optional[str] = None + self.statuses_summary: Optional[List["_models.VirtualMachineStatusCodeCount"]] = None class VirtualMachineScaleSetVMExtensionUpdate(SubResourceReadOnly): @@ -15835,7 +15368,7 @@ class VirtualMachineScaleSetVMExtensionUpdate(SubResourceReadOnly): :ivar protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :vartype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference """ _validation = { @@ -15908,11 +15441,11 @@ def __init__( :keyword protected_settings_from_key_vault: The extensions protected settings that are passed by reference, and consumed from key vault. :paramtype protected_settings_from_key_vault: - ~azure.mgmt.compute.v2024_11_01.models.KeyVaultSecretReference + ~azure.mgmt.compute.v2024_07_01.models.KeyVaultSecretReference """ super().__init__(**kwargs) - self.name = None - self.type = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.force_update_tag = force_update_tag self.publisher = publisher self.type_properties_type = type_properties_type @@ -15987,24 +15520,23 @@ class VirtualMachineScaleSetVMInstanceView(_serialization.Model): :ivar rdp_thumb_print: The Remote desktop certificate thumbprint. :vartype rdp_thumb_print: str :ivar vm_agent: The VM Agent running on the virtual machine. - :vartype vm_agent: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineAgentInstanceView + :vartype vm_agent: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineAgentInstanceView :ivar maintenance_redeploy_status: The Maintenance Operation status on the virtual machine. :vartype maintenance_redeploy_status: - ~azure.mgmt.compute.v2024_11_01.models.MaintenanceRedeployStatus + ~azure.mgmt.compute.v2024_07_01.models.MaintenanceRedeployStatus :ivar disks: The disks information. - :vartype disks: list[~azure.mgmt.compute.v2024_11_01.models.DiskInstanceView] + :vartype disks: list[~azure.mgmt.compute.v2024_07_01.models.DiskInstanceView] :ivar extensions: The extensions information. :vartype extensions: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionInstanceView] - :ivar vm_health: The application health status for the VM, provided through Application Health - Extension or Load Balancer Health Probes. - :vartype vm_health: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineHealthStatus + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionInstanceView] + :ivar vm_health: The health status for the VM. + :vartype vm_health: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineHealthStatus :ivar boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. You can easily view the output of your console log. Azure also enables you to see a screenshot of the VM from the hypervisor. - :vartype boot_diagnostics: ~azure.mgmt.compute.v2024_11_01.models.BootDiagnosticsInstanceView + :vartype boot_diagnostics: ~azure.mgmt.compute.v2024_07_01.models.BootDiagnosticsInstanceView :ivar statuses: The resource status information. - :vartype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :vartype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :ivar assigned_host: Resource id of the dedicated host, on which the virtual machine is allocated through automatic placement, when the virtual machine is associated with a dedicated host group that has automatic placement enabled. Minimum api-version: 2020-06-01. @@ -16017,7 +15549,7 @@ class VirtualMachineScaleSetVMInstanceView(_serialization.Model): **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :vartype computer_name: str :ivar os_name: The Operating System running on the hybrid machine. :vartype os_name: str @@ -16025,7 +15557,7 @@ class VirtualMachineScaleSetVMInstanceView(_serialization.Model): :vartype os_version: str :ivar hyper_v_generation: The hypervisor generation of the Virtual Machine [V1, V2]. Known values are: "V1" and "V2". - :vartype hyper_v_generation: str or ~azure.mgmt.compute.v2024_11_01.models.HyperVGeneration + :vartype hyper_v_generation: str or ~azure.mgmt.compute.v2024_07_01.models.HyperVGeneration """ _validation = { @@ -16079,21 +15611,21 @@ def __init__( :keyword rdp_thumb_print: The Remote desktop certificate thumbprint. :paramtype rdp_thumb_print: str :keyword vm_agent: The VM Agent running on the virtual machine. - :paramtype vm_agent: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineAgentInstanceView + :paramtype vm_agent: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineAgentInstanceView :keyword maintenance_redeploy_status: The Maintenance Operation status on the virtual machine. :paramtype maintenance_redeploy_status: - ~azure.mgmt.compute.v2024_11_01.models.MaintenanceRedeployStatus + ~azure.mgmt.compute.v2024_07_01.models.MaintenanceRedeployStatus :keyword disks: The disks information. - :paramtype disks: list[~azure.mgmt.compute.v2024_11_01.models.DiskInstanceView] + :paramtype disks: list[~azure.mgmt.compute.v2024_07_01.models.DiskInstanceView] :keyword extensions: The extensions information. :paramtype extensions: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionInstanceView] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionInstanceView] :keyword boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. You can easily view the output of your console log. Azure also enables you to see a screenshot of the VM from the hypervisor. - :paramtype boot_diagnostics: ~azure.mgmt.compute.v2024_11_01.models.BootDiagnosticsInstanceView + :paramtype boot_diagnostics: ~azure.mgmt.compute.v2024_07_01.models.BootDiagnosticsInstanceView :keyword statuses: The resource status information. - :paramtype statuses: list[~azure.mgmt.compute.v2024_11_01.models.InstanceViewStatus] + :paramtype statuses: list[~azure.mgmt.compute.v2024_07_01.models.InstanceViewStatus] :keyword placement_group_id: The placement group in which the VM is running. If the VM is deallocated it will not have a placementGroupId. :paramtype placement_group_id: str @@ -16102,7 +15634,7 @@ def __init__( **Max-length (Windows):** 15 characters :code:`
    `\\ :code:`
    ` **Max-length (Linux):** 64 characters. :code:`
    `\\ :code:`
    ` For naming conventions and restrictions see `Azure infrastructure services implementation guidelines - `_. # pylint: disable=line-too-long + `_. :paramtype computer_name: str :keyword os_name: The Operating System running on the hybrid machine. :paramtype os_name: str @@ -16110,7 +15642,7 @@ def __init__( :paramtype os_version: str :keyword hyper_v_generation: The hypervisor generation of the Virtual Machine [V1, V2]. Known values are: "V1" and "V2". - :paramtype hyper_v_generation: str or ~azure.mgmt.compute.v2024_11_01.models.HyperVGeneration + :paramtype hyper_v_generation: str or ~azure.mgmt.compute.v2024_07_01.models.HyperVGeneration """ super().__init__(**kwargs) self.platform_update_domain = platform_update_domain @@ -16120,10 +15652,10 @@ def __init__( self.maintenance_redeploy_status = maintenance_redeploy_status self.disks = disks self.extensions = extensions - self.vm_health = None + self.vm_health: Optional["_models.VirtualMachineHealthStatus"] = None self.boot_diagnostics = boot_diagnostics self.statuses = statuses - self.assigned_host = None + self.assigned_host: Optional[str] = None self.placement_group_id = placement_group_id self.computer_name = computer_name self.os_name = os_name @@ -16137,7 +15669,7 @@ class VirtualMachineScaleSetVMListResult(_serialization.Model): All required parameters must be populated in order to send to server. :ivar value: The list of virtual machine scale sets VMs. Required. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM] :ivar next_link: The uri to fetch the next page of Virtual Machine Scale Set VMs. Call ListNext() with this to fetch the next page of VMSS VMs. :vartype next_link: str @@ -16157,7 +15689,7 @@ def __init__( ) -> None: """ :keyword value: The list of virtual machine scale sets VMs. Required. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM] :keyword next_link: The uri to fetch the next page of Virtual Machine Scale Set VMs. Call ListNext() with this to fetch the next page of VMSS VMs. :paramtype next_link: str @@ -16172,7 +15704,7 @@ class VirtualMachineScaleSetVMNetworkProfileConfiguration(_serialization.Model): :ivar network_interface_configurations: The list of network configurations. :vartype network_interface_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetNetworkConfiguration] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetNetworkConfiguration] """ _attribute_map = { @@ -16191,7 +15723,7 @@ def __init__( """ :keyword network_interface_configurations: The list of network configurations. :paramtype network_interface_configurations: - list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetNetworkConfiguration] + list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetNetworkConfiguration] """ super().__init__(**kwargs) self.network_interface_configurations = network_interface_configurations @@ -16204,24 +15736,24 @@ class VirtualMachineScaleSetVMProfile(_serialization.Model): :ivar os_profile: Specifies the operating system settings for the virtual machines in the scale set. - :vartype os_profile: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetOSProfile + :vartype os_profile: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetOSProfile :ivar storage_profile: Specifies the storage settings for the virtual machine disks. :vartype storage_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetStorageProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetStorageProfile :ivar network_profile: Specifies properties of the network interfaces of the virtual machines in the scale set. :vartype network_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetNetworkProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetNetworkProfile :ivar security_profile: Specifies the Security related profile settings for the virtual machines in the scale set. - :vartype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :vartype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :ivar diagnostics_profile: Specifies the boot diagnostic settings state. Minimum api-version: 2015-06-15. - :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :ivar extension_profile: Specifies a collection of settings for extensions installed on virtual machines in the scale set. :vartype extension_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtensionProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtensionProfile :ivar license_type: Specifies that the image or disk that is being used was licensed on-premises. :code:`
    `\\ :code:`
    ` Possible values for Windows Server operating system are: :code:`
    `\\ :code:`
    ` Windows_Client :code:`
    `\\ :code:`
    ` Windows_Server @@ -16236,43 +15768,43 @@ class VirtualMachineScaleSetVMProfile(_serialization.Model): :vartype license_type: str :ivar priority: Specifies the priority for the virtual machines in the scale set. Minimum api-version: 2017-10-30-preview. Known values are: "Regular", "Low", and "Spot". - :vartype priority: str or ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePriorityTypes + :vartype priority: str or ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePriorityTypes :ivar eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and Azure Spot scale set. For Azure Spot virtual machines, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01. For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2017-10-30-preview. Known values are: "Deallocate" and "Delete". :vartype eviction_policy: str or - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineEvictionPolicyTypes + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineEvictionPolicyTypes :ivar billing_profile: Specifies the billing related details of a Azure Spot VMSS. Minimum api-version: 2019-03-01. - :vartype billing_profile: ~azure.mgmt.compute.v2024_11_01.models.BillingProfile + :vartype billing_profile: ~azure.mgmt.compute.v2024_07_01.models.BillingProfile :ivar scheduled_events_profile: Specifies Scheduled Event related configurations. :vartype scheduled_events_profile: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsProfile + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsProfile :ivar user_data: UserData for the virtual machines in the scale set, which must be base-64 encoded. Customer should not pass any secrets in here. Minimum api-version: 2021-03-01. :vartype user_data: str :ivar capacity_reservation: Specifies the capacity reservation related details of a scale set. Minimum api-version: 2021-04-01. :vartype capacity_reservation: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationProfile + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationProfile :ivar application_profile: Specifies the gallery applications that should be made available to the VM/VMSS. - :vartype application_profile: ~azure.mgmt.compute.v2024_11_01.models.ApplicationProfile + :vartype application_profile: ~azure.mgmt.compute.v2024_07_01.models.ApplicationProfile :ivar hardware_profile: Specifies the hardware profile related details of a scale set. Minimum api-version: 2021-11-01. :vartype hardware_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetHardwareProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetHardwareProfile :ivar service_artifact_reference: Specifies the service artifact reference id used to set same image version for all virtual machines in the scale set when using 'latest' image version. Minimum api-version: 2022-11-01. :vartype service_artifact_reference: - ~azure.mgmt.compute.v2024_11_01.models.ServiceArtifactReference + ~azure.mgmt.compute.v2024_07_01.models.ServiceArtifactReference :ivar security_posture_reference: Specifies the security posture to be used in the scale set. Minimum api-version: 2023-03-01. :vartype security_posture_reference: - ~azure.mgmt.compute.v2024_11_01.models.SecurityPostureReference + ~azure.mgmt.compute.v2024_07_01.models.SecurityPostureReference :ivar time_created: Specifies the time in which this VM profile for the Virtual Machine Scale Set was created. This value will be added to VMSS Flex VM tags when creating/updating the VMSS VM Profile. Minimum API version for this property is 2023-09-01. @@ -16329,24 +15861,24 @@ def __init__( """ :keyword os_profile: Specifies the operating system settings for the virtual machines in the scale set. - :paramtype os_profile: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetOSProfile + :paramtype os_profile: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetOSProfile :keyword storage_profile: Specifies the storage settings for the virtual machine disks. :paramtype storage_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetStorageProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetStorageProfile :keyword network_profile: Specifies properties of the network interfaces of the virtual machines in the scale set. :paramtype network_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetNetworkProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetNetworkProfile :keyword security_profile: Specifies the Security related profile settings for the virtual machines in the scale set. - :paramtype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :paramtype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :keyword diagnostics_profile: Specifies the boot diagnostic settings state. Minimum api-version: 2015-06-15. - :paramtype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :paramtype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :keyword extension_profile: Specifies a collection of settings for extensions installed on virtual machines in the scale set. :paramtype extension_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtensionProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtensionProfile :keyword license_type: Specifies that the image or disk that is being used was licensed on-premises. :code:`
    `\\ :code:`
    ` Possible values for Windows Server operating system are: :code:`
    `\\ :code:`
    ` Windows_Client :code:`
    `\\ :code:`
    ` Windows_Server @@ -16361,43 +15893,43 @@ def __init__( :paramtype license_type: str :keyword priority: Specifies the priority for the virtual machines in the scale set. Minimum api-version: 2017-10-30-preview. Known values are: "Regular", "Low", and "Spot". - :paramtype priority: str or ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePriorityTypes + :paramtype priority: str or ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePriorityTypes :keyword eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and Azure Spot scale set. For Azure Spot virtual machines, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01. For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2017-10-30-preview. Known values are: "Deallocate" and "Delete". :paramtype eviction_policy: str or - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineEvictionPolicyTypes + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineEvictionPolicyTypes :keyword billing_profile: Specifies the billing related details of a Azure Spot VMSS. Minimum api-version: 2019-03-01. - :paramtype billing_profile: ~azure.mgmt.compute.v2024_11_01.models.BillingProfile + :paramtype billing_profile: ~azure.mgmt.compute.v2024_07_01.models.BillingProfile :keyword scheduled_events_profile: Specifies Scheduled Event related configurations. :paramtype scheduled_events_profile: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsProfile + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsProfile :keyword user_data: UserData for the virtual machines in the scale set, which must be base-64 encoded. Customer should not pass any secrets in here. Minimum api-version: 2021-03-01. :paramtype user_data: str :keyword capacity_reservation: Specifies the capacity reservation related details of a scale set. Minimum api-version: 2021-04-01. :paramtype capacity_reservation: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationProfile + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationProfile :keyword application_profile: Specifies the gallery applications that should be made available to the VM/VMSS. - :paramtype application_profile: ~azure.mgmt.compute.v2024_11_01.models.ApplicationProfile + :paramtype application_profile: ~azure.mgmt.compute.v2024_07_01.models.ApplicationProfile :keyword hardware_profile: Specifies the hardware profile related details of a scale set. Minimum api-version: 2021-11-01. :paramtype hardware_profile: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetHardwareProfile + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetHardwareProfile :keyword service_artifact_reference: Specifies the service artifact reference id used to set same image version for all virtual machines in the scale set when using 'latest' image version. Minimum api-version: 2022-11-01. :paramtype service_artifact_reference: - ~azure.mgmt.compute.v2024_11_01.models.ServiceArtifactReference + ~azure.mgmt.compute.v2024_07_01.models.ServiceArtifactReference :keyword security_posture_reference: Specifies the security posture to be used in the scale set. Minimum api-version: 2023-03-01. :paramtype security_posture_reference: - ~azure.mgmt.compute.v2024_11_01.models.SecurityPostureReference + ~azure.mgmt.compute.v2024_07_01.models.SecurityPostureReference """ super().__init__(**kwargs) self.os_profile = os_profile @@ -16417,7 +15949,7 @@ def __init__( self.hardware_profile = hardware_profile self.service_artifact_reference = service_artifact_reference self.security_posture_reference = security_posture_reference - self.time_created = None + self.time_created: Optional[datetime.datetime] = None class VirtualMachineScaleSetVMProtectionPolicy(_serialization.Model): @@ -16534,7 +16066,7 @@ class VirtualMachineSizeListResult(_serialization.Model): """The List Virtual Machine operation response. :ivar value: The list of virtual machine sizes. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSize] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSize] """ _attribute_map = { @@ -16544,7 +16076,7 @@ class VirtualMachineSizeListResult(_serialization.Model): def __init__(self, *, value: Optional[List["_models.VirtualMachineSize"]] = None, **kwargs: Any) -> None: """ :keyword value: The list of virtual machine sizes. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSize] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSize] """ super().__init__(**kwargs) self.value = value @@ -16568,7 +16100,7 @@ class VirtualMachineSoftwarePatchProperties(_serialization.Model): :ivar reboot_behavior: Describes the reboot requirements of the patch. Known values are: "Unknown", "NeverReboots", "AlwaysRequiresReboot", and "CanRequestReboot". :vartype reboot_behavior: str or - ~azure.mgmt.compute.v2024_11_01.models.VMGuestPatchRebootBehavior + ~azure.mgmt.compute.v2024_07_01.models.VMGuestPatchRebootBehavior :ivar activity_id: The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. :vartype activity_id: str @@ -16578,7 +16110,7 @@ class VirtualMachineSoftwarePatchProperties(_serialization.Model): :vartype last_modified_date_time: ~datetime.datetime :ivar assessment_state: Describes the availability of a given patch. Known values are: "Unknown" and "Available". - :vartype assessment_state: str or ~azure.mgmt.compute.v2024_11_01.models.PatchAssessmentState + :vartype assessment_state: str or ~azure.mgmt.compute.v2024_07_01.models.PatchAssessmentState """ _validation = { @@ -16610,16 +16142,16 @@ class VirtualMachineSoftwarePatchProperties(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.patch_id = None - self.name = None - self.version = None - self.kb_id = None - self.classifications = None - self.reboot_behavior = None - self.activity_id = None - self.published_date = None - self.last_modified_date_time = None - self.assessment_state = None + self.patch_id: Optional[str] = None + self.name: Optional[str] = None + self.version: Optional[str] = None + self.kb_id: Optional[str] = None + self.classifications: Optional[List[str]] = None + self.reboot_behavior: Optional[Union[str, "_models.VMGuestPatchRebootBehavior"]] = None + self.activity_id: Optional[str] = None + self.published_date: Optional[datetime.datetime] = None + self.last_modified_date_time: Optional[datetime.datetime] = None + self.assessment_state: Optional[Union[str, "_models.PatchAssessmentState"]] = None class VirtualMachineStatusCodeCount(_serialization.Model): @@ -16646,8 +16178,8 @@ class VirtualMachineStatusCodeCount(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.count = None + self.code: Optional[str] = None + self.count: Optional[int] = None class VirtualMachineUpdate(UpdateResource): @@ -16662,33 +16194,33 @@ class VirtualMachineUpdate(UpdateResource): image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - :vartype plan: ~azure.mgmt.compute.v2024_11_01.models.Plan + :vartype plan: ~azure.mgmt.compute.v2024_07_01.models.Plan :ivar identity: The identity of the virtual machine, if configured. - :vartype identity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineIdentity + :vartype identity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineIdentity :ivar zones: The virtual machine zones. :vartype zones: list[str] :ivar hardware_profile: Specifies the hardware settings for the virtual machine. - :vartype hardware_profile: ~azure.mgmt.compute.v2024_11_01.models.HardwareProfile + :vartype hardware_profile: ~azure.mgmt.compute.v2024_07_01.models.HardwareProfile :ivar scheduled_events_policy: Specifies Redeploy, Reboot and ScheduledEventsAdditionalPublishingTargets Scheduled Event related configurations for the virtual machine. - :vartype scheduled_events_policy: ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsPolicy + :vartype scheduled_events_policy: ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsPolicy :ivar storage_profile: Specifies the storage settings for the virtual machine disks. - :vartype storage_profile: ~azure.mgmt.compute.v2024_11_01.models.StorageProfile + :vartype storage_profile: ~azure.mgmt.compute.v2024_07_01.models.StorageProfile :ivar additional_capabilities: Specifies additional capabilities enabled or disabled on the virtual machine. - :vartype additional_capabilities: ~azure.mgmt.compute.v2024_11_01.models.AdditionalCapabilities + :vartype additional_capabilities: ~azure.mgmt.compute.v2024_07_01.models.AdditionalCapabilities :ivar os_profile: Specifies the operating system settings used while creating the virtual machine. Some of the settings cannot be changed once VM is provisioned. - :vartype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfile + :vartype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfile :ivar network_profile: Specifies the network interfaces of the virtual machine. - :vartype network_profile: ~azure.mgmt.compute.v2024_11_01.models.NetworkProfile + :vartype network_profile: ~azure.mgmt.compute.v2024_07_01.models.NetworkProfile :ivar security_profile: Specifies the Security related profile settings for the virtual machine. - :vartype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :vartype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :ivar diagnostics_profile: Specifies the boot diagnostic settings state. Minimum api-version: 2015-06-15. - :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :vartype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :ivar availability_set: Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability @@ -16700,41 +16232,41 @@ class VirtualMachineUpdate(UpdateResource): VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. This property cannot exist along with a non-null properties.virtualMachineScaleSet reference. - :vartype availability_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype availability_set: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar virtual_machine_scale_set: Specifies information about the virtual machine scale set that the virtual machine should be assigned to. Virtual machines specified in the same virtual machine scale set are allocated to different nodes to maximize availability. Currently, a VM can only be added to virtual machine scale set at creation time. An existing VM cannot be added to a virtual machine scale set. This property cannot exist along with a non-null properties.availabilitySet reference. Minimum api‐version: 2019‐03‐01. - :vartype virtual_machine_scale_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype virtual_machine_scale_set: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar proximity_placement_group: Specifies information about the proximity placement group that the virtual machine should be assigned to. Minimum api-version: 2018-04-01. - :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar priority: Specifies the priority for the virtual machine. Minimum api-version: 2019-03-01. Known values are: "Regular", "Low", and "Spot". - :vartype priority: str or ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePriorityTypes + :vartype priority: str or ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePriorityTypes :ivar eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and Azure Spot scale set. For Azure Spot virtual machines, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01. For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2017-10-30-preview. Known values are: "Deallocate" and "Delete". :vartype eviction_policy: str or - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineEvictionPolicyTypes + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineEvictionPolicyTypes :ivar billing_profile: Specifies the billing related details of a Azure Spot virtual machine. Minimum api-version: 2019-03-01. - :vartype billing_profile: ~azure.mgmt.compute.v2024_11_01.models.BillingProfile + :vartype billing_profile: ~azure.mgmt.compute.v2024_07_01.models.BillingProfile :ivar host: Specifies information about the dedicated host that the virtual machine resides in. Minimum api-version: 2018-10-01. - :vartype host: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype host: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar host_group: Specifies information about the dedicated host group that the virtual machine resides in. **Note:** User cannot specify both host and hostGroup properties. Minimum api-version: 2020-06-01. - :vartype host_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :vartype host_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :ivar provisioning_state: The provisioning state, which only appears in the response. :vartype provisioning_state: str :ivar instance_view: The virtual machine instance view. - :vartype instance_view: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstanceView + :vartype instance_view: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstanceView :ivar license_type: Specifies that the image or disk that is being used was licensed on-premises. :code:`
    `\\ :code:`
    ` Possible values for Windows Server operating system are: :code:`
    `\\ :code:`
    ` Windows_Client :code:`
    `\\ :code:`
    ` Windows_Server @@ -16764,17 +16296,17 @@ class VirtualMachineUpdate(UpdateResource): :vartype platform_fault_domain: int :ivar scheduled_events_profile: Specifies Scheduled Event related configurations. :vartype scheduled_events_profile: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsProfile + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsProfile :ivar user_data: UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here. Minimum api-version: 2021-03-01. :vartype user_data: str :ivar capacity_reservation: Specifies information about the capacity reservation that is used to allocate virtual machine. Minimum api-version: 2021-04-01. :vartype capacity_reservation: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationProfile + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationProfile :ivar application_profile: Specifies the gallery applications that should be made available to the VM/VMSS. - :vartype application_profile: ~azure.mgmt.compute.v2024_11_01.models.ApplicationProfile + :vartype application_profile: ~azure.mgmt.compute.v2024_07_01.models.ApplicationProfile :ivar time_created: Specifies the time at which the Virtual Machine resource was created. Minimum api-version: 2021-11-01. :vartype time_created: ~datetime.datetime @@ -16861,35 +16393,35 @@ def __init__( # pylint: disable=too-many-locals image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - :paramtype plan: ~azure.mgmt.compute.v2024_11_01.models.Plan + :paramtype plan: ~azure.mgmt.compute.v2024_07_01.models.Plan :keyword identity: The identity of the virtual machine, if configured. - :paramtype identity: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineIdentity + :paramtype identity: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineIdentity :keyword zones: The virtual machine zones. :paramtype zones: list[str] :keyword hardware_profile: Specifies the hardware settings for the virtual machine. - :paramtype hardware_profile: ~azure.mgmt.compute.v2024_11_01.models.HardwareProfile + :paramtype hardware_profile: ~azure.mgmt.compute.v2024_07_01.models.HardwareProfile :keyword scheduled_events_policy: Specifies Redeploy, Reboot and ScheduledEventsAdditionalPublishingTargets Scheduled Event related configurations for the virtual machine. :paramtype scheduled_events_policy: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsPolicy + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsPolicy :keyword storage_profile: Specifies the storage settings for the virtual machine disks. - :paramtype storage_profile: ~azure.mgmt.compute.v2024_11_01.models.StorageProfile + :paramtype storage_profile: ~azure.mgmt.compute.v2024_07_01.models.StorageProfile :keyword additional_capabilities: Specifies additional capabilities enabled or disabled on the virtual machine. :paramtype additional_capabilities: - ~azure.mgmt.compute.v2024_11_01.models.AdditionalCapabilities + ~azure.mgmt.compute.v2024_07_01.models.AdditionalCapabilities :keyword os_profile: Specifies the operating system settings used while creating the virtual machine. Some of the settings cannot be changed once VM is provisioned. - :paramtype os_profile: ~azure.mgmt.compute.v2024_11_01.models.OSProfile + :paramtype os_profile: ~azure.mgmt.compute.v2024_07_01.models.OSProfile :keyword network_profile: Specifies the network interfaces of the virtual machine. - :paramtype network_profile: ~azure.mgmt.compute.v2024_11_01.models.NetworkProfile + :paramtype network_profile: ~azure.mgmt.compute.v2024_07_01.models.NetworkProfile :keyword security_profile: Specifies the Security related profile settings for the virtual machine. - :paramtype security_profile: ~azure.mgmt.compute.v2024_11_01.models.SecurityProfile + :paramtype security_profile: ~azure.mgmt.compute.v2024_07_01.models.SecurityProfile :keyword diagnostics_profile: Specifies the boot diagnostic settings state. Minimum api-version: 2015-06-15. - :paramtype diagnostics_profile: ~azure.mgmt.compute.v2024_11_01.models.DiagnosticsProfile + :paramtype diagnostics_profile: ~azure.mgmt.compute.v2024_07_01.models.DiagnosticsProfile :keyword availability_set: Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability @@ -16901,37 +16433,37 @@ def __init__( # pylint: disable=too-many-locals VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set. This property cannot exist along with a non-null properties.virtualMachineScaleSet reference. - :paramtype availability_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype availability_set: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword virtual_machine_scale_set: Specifies information about the virtual machine scale set that the virtual machine should be assigned to. Virtual machines specified in the same virtual machine scale set are allocated to different nodes to maximize availability. Currently, a VM can only be added to virtual machine scale set at creation time. An existing VM cannot be added to a virtual machine scale set. This property cannot exist along with a non-null properties.availabilitySet reference. Minimum api‐version: 2019‐03‐01. - :paramtype virtual_machine_scale_set: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype virtual_machine_scale_set: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword proximity_placement_group: Specifies information about the proximity placement group that the virtual machine should be assigned to. Minimum api-version: 2018-04-01. - :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype proximity_placement_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword priority: Specifies the priority for the virtual machine. Minimum api-version: 2019-03-01. Known values are: "Regular", "Low", and "Spot". - :paramtype priority: str or ~azure.mgmt.compute.v2024_11_01.models.VirtualMachinePriorityTypes + :paramtype priority: str or ~azure.mgmt.compute.v2024_07_01.models.VirtualMachinePriorityTypes :keyword eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and Azure Spot scale set. For Azure Spot virtual machines, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01. For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2017-10-30-preview. Known values are: "Deallocate" and "Delete". :paramtype eviction_policy: str or - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineEvictionPolicyTypes + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineEvictionPolicyTypes :keyword billing_profile: Specifies the billing related details of a Azure Spot virtual machine. Minimum api-version: 2019-03-01. - :paramtype billing_profile: ~azure.mgmt.compute.v2024_11_01.models.BillingProfile + :paramtype billing_profile: ~azure.mgmt.compute.v2024_07_01.models.BillingProfile :keyword host: Specifies information about the dedicated host that the virtual machine resides in. Minimum api-version: 2018-10-01. - :paramtype host: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype host: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword host_group: Specifies information about the dedicated host group that the virtual machine resides in. **Note:** User cannot specify both host and hostGroup properties. Minimum api-version: 2020-06-01. - :paramtype host_group: ~azure.mgmt.compute.v2024_11_01.models.SubResource + :paramtype host_group: ~azure.mgmt.compute.v2024_07_01.models.SubResource :keyword license_type: Specifies that the image or disk that is being used was licensed on-premises. :code:`
    `\\ :code:`
    ` Possible values for Windows Server operating system are: :code:`
    `\\ :code:`
    ` Windows_Client :code:`
    `\\ :code:`
    ` Windows_Server @@ -16958,17 +16490,17 @@ def __init__( # pylint: disable=too-many-locals :paramtype platform_fault_domain: int :keyword scheduled_events_profile: Specifies Scheduled Event related configurations. :paramtype scheduled_events_profile: - ~azure.mgmt.compute.v2024_11_01.models.ScheduledEventsProfile + ~azure.mgmt.compute.v2024_07_01.models.ScheduledEventsProfile :keyword user_data: UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here. Minimum api-version: 2021-03-01. :paramtype user_data: str :keyword capacity_reservation: Specifies information about the capacity reservation that is used to allocate virtual machine. Minimum api-version: 2021-04-01. :paramtype capacity_reservation: - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationProfile + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationProfile :keyword application_profile: Specifies the gallery applications that should be made available to the VM/VMSS. - :paramtype application_profile: ~azure.mgmt.compute.v2024_11_01.models.ApplicationProfile + :paramtype application_profile: ~azure.mgmt.compute.v2024_07_01.models.ApplicationProfile """ super().__init__(tags=tags, **kwargs) self.plan = plan @@ -16990,17 +16522,17 @@ def __init__( # pylint: disable=too-many-locals self.billing_profile = billing_profile self.host = host self.host_group = host_group - self.provisioning_state = None - self.instance_view = None + self.provisioning_state: Optional[str] = None + self.instance_view: Optional["_models.VirtualMachineInstanceView"] = None self.license_type = license_type - self.vm_id = None + self.vm_id: Optional[str] = None self.extensions_time_budget = extensions_time_budget self.platform_fault_domain = platform_fault_domain self.scheduled_events_profile = scheduled_events_profile self.user_data = user_data self.capacity_reservation = capacity_reservation self.application_profile = application_profile - self.time_created = None + self.time_created: Optional[datetime.datetime] = None class VMDiskSecurityProfile(_serialization.Model): @@ -17014,12 +16546,12 @@ class VMDiskSecurityProfile(_serialization.Model): Confidential VMs. Known values are: "VMGuestStateOnly", "DiskWithVMGuestState", and "NonPersistedTPM". :vartype security_encryption_type: str or - ~azure.mgmt.compute.v2024_11_01.models.SecurityEncryptionTypes + ~azure.mgmt.compute.v2024_07_01.models.SecurityEncryptionTypes :ivar disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed disk that is used for Customer Managed Key encrypted ConfidentialVM OS Disk and VMGuest blob. :vartype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters """ _attribute_map = { @@ -17042,12 +16574,12 @@ def __init__( Confidential VMs. Known values are: "VMGuestStateOnly", "DiskWithVMGuestState", and "NonPersistedTPM". :paramtype security_encryption_type: str or - ~azure.mgmt.compute.v2024_11_01.models.SecurityEncryptionTypes + ~azure.mgmt.compute.v2024_07_01.models.SecurityEncryptionTypes :keyword disk_encryption_set: Specifies the customer managed disk encryption set resource id for the managed disk that is used for Customer Managed Key encrypted ConfidentialVM OS Disk and VMGuest blob. :paramtype disk_encryption_set: - ~azure.mgmt.compute.v2024_11_01.models.DiskEncryptionSetParameters + ~azure.mgmt.compute.v2024_07_01.models.DiskEncryptionSetParameters """ super().__init__(**kwargs) self.security_encryption_type = security_encryption_type @@ -17064,7 +16596,7 @@ class VMGalleryApplication(_serialization.Model): :ivar order: Optional, Specifies the order in which the packages have to be installed. :vartype order: int :ivar package_reference_id: Specifies the GalleryApplicationVersion resource id on the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version}. Required. :vartype package_reference_id: str :ivar configuration_reference: Optional, Specifies the uri to an azure blob that will replace @@ -17109,7 +16641,7 @@ def __init__( :paramtype order: int :keyword package_reference_id: Specifies the GalleryApplicationVersion resource id on the form of - /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version}. # pylint: disable=line-too-long + /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version}. Required. :paramtype package_reference_id: str :keyword configuration_reference: Optional, Specifies the uri to an azure blob that will @@ -17135,7 +16667,7 @@ class VmImagesInEdgeZoneListResult(_serialization.Model): """The List VmImages in EdgeZone operation response. :ivar value: The list of VMImages in EdgeZone. - :vartype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :vartype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :ivar next_link: The URI to fetch the next page of VMImages in EdgeZone. Call ListNext() with this URI to fetch the next page of VmImages. :vartype next_link: str @@ -17155,7 +16687,7 @@ def __init__( ) -> None: """ :keyword value: The list of VMImages in EdgeZone. - :paramtype value: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :paramtype value: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :keyword next_link: The URI to fetch the next page of VMImages in EdgeZone. Call ListNext() with this URI to fetch the next page of VmImages. :paramtype next_link: str @@ -17256,13 +16788,13 @@ class WindowsConfiguration(_serialization.Model): :ivar additional_unattend_content: Specifies additional base-64 encoded XML formatted information that can be included in the Unattend.xml file, which is used by Windows Setup. :vartype additional_unattend_content: - list[~azure.mgmt.compute.v2024_11_01.models.AdditionalUnattendContent] + list[~azure.mgmt.compute.v2024_07_01.models.AdditionalUnattendContent] :ivar patch_settings: [Preview Feature] Specifies settings related to VM Guest Patching on Windows. - :vartype patch_settings: ~azure.mgmt.compute.v2024_11_01.models.PatchSettings + :vartype patch_settings: ~azure.mgmt.compute.v2024_07_01.models.PatchSettings :ivar win_rm: Specifies the Windows Remote Management listeners. This enables remote Windows PowerShell. - :vartype win_rm: ~azure.mgmt.compute.v2024_11_01.models.WinRMConfiguration + :vartype win_rm: ~azure.mgmt.compute.v2024_07_01.models.WinRMConfiguration :ivar enable_vm_agent_platform_updates: Indicates whether VMAgent Platform Updates are enabled for the Windows Virtual Machine. :vartype enable_vm_agent_platform_updates: bool @@ -17312,13 +16844,13 @@ def __init__( :keyword additional_unattend_content: Specifies additional base-64 encoded XML formatted information that can be included in the Unattend.xml file, which is used by Windows Setup. :paramtype additional_unattend_content: - list[~azure.mgmt.compute.v2024_11_01.models.AdditionalUnattendContent] + list[~azure.mgmt.compute.v2024_07_01.models.AdditionalUnattendContent] :keyword patch_settings: [Preview Feature] Specifies settings related to VM Guest Patching on Windows. - :paramtype patch_settings: ~azure.mgmt.compute.v2024_11_01.models.PatchSettings + :paramtype patch_settings: ~azure.mgmt.compute.v2024_07_01.models.PatchSettings :keyword win_rm: Specifies the Windows Remote Management listeners. This enables remote Windows PowerShell. - :paramtype win_rm: ~azure.mgmt.compute.v2024_11_01.models.WinRMConfiguration + :paramtype win_rm: ~azure.mgmt.compute.v2024_07_01.models.WinRMConfiguration """ super().__init__(**kwargs) self.provision_vm_agent = provision_vm_agent @@ -17327,7 +16859,7 @@ def __init__( self.additional_unattend_content = additional_unattend_content self.patch_settings = patch_settings self.win_rm = win_rm - self.enable_vm_agent_platform_updates = None + self.enable_vm_agent_platform_updates: Optional[bool] = None class WindowsParameters(_serialization.Model): @@ -17336,7 +16868,7 @@ class WindowsParameters(_serialization.Model): :ivar classifications_to_include: The update classifications to select when installing patches for Windows. :vartype classifications_to_include: list[str or - ~azure.mgmt.compute.v2024_11_01.models.VMGuestPatchClassificationWindows] + ~azure.mgmt.compute.v2024_07_01.models.VMGuestPatchClassificationWindows] :ivar kb_numbers_to_include: Kbs to include in the patch operation. :vartype kb_numbers_to_include: list[str] :ivar kb_numbers_to_exclude: Kbs to exclude in the patch operation. @@ -17371,7 +16903,7 @@ def __init__( :keyword classifications_to_include: The update classifications to select when installing patches for Windows. :paramtype classifications_to_include: list[str or - ~azure.mgmt.compute.v2024_11_01.models.VMGuestPatchClassificationWindows] + ~azure.mgmt.compute.v2024_07_01.models.VMGuestPatchClassificationWindows] :keyword kb_numbers_to_include: Kbs to include in the patch operation. :paramtype kb_numbers_to_include: list[str] :keyword kb_numbers_to_exclude: Kbs to exclude in the patch operation. @@ -17398,7 +16930,7 @@ class WindowsVMGuestPatchAutomaticByPlatformSettings(_serialization.Model): # p :ivar reboot_setting: Specifies the reboot setting for all AutomaticByPlatform patch installation operations. Known values are: "Unknown", "IfRequired", "Never", and "Always". :vartype reboot_setting: str or - ~azure.mgmt.compute.v2024_11_01.models.WindowsVMGuestPatchAutomaticByPlatformRebootSetting + ~azure.mgmt.compute.v2024_07_01.models.WindowsVMGuestPatchAutomaticByPlatformRebootSetting :ivar bypass_platform_safety_checks_on_user_schedule: Enables customer to schedule patching without accidental upgrades. :vartype bypass_platform_safety_checks_on_user_schedule: bool @@ -17423,7 +16955,7 @@ def __init__( :keyword reboot_setting: Specifies the reboot setting for all AutomaticByPlatform patch installation operations. Known values are: "Unknown", "IfRequired", "Never", and "Always". :paramtype reboot_setting: str or - ~azure.mgmt.compute.v2024_11_01.models.WindowsVMGuestPatchAutomaticByPlatformRebootSetting + ~azure.mgmt.compute.v2024_07_01.models.WindowsVMGuestPatchAutomaticByPlatformRebootSetting :keyword bypass_platform_safety_checks_on_user_schedule: Enables customer to schedule patching without accidental upgrades. :paramtype bypass_platform_safety_checks_on_user_schedule: bool @@ -17437,7 +16969,7 @@ class WinRMConfiguration(_serialization.Model): """Describes Windows Remote Management configuration of the VM. :ivar listeners: The list of Windows Remote Management listeners. - :vartype listeners: list[~azure.mgmt.compute.v2024_11_01.models.WinRMListener] + :vartype listeners: list[~azure.mgmt.compute.v2024_07_01.models.WinRMListener] """ _attribute_map = { @@ -17447,7 +16979,7 @@ class WinRMConfiguration(_serialization.Model): def __init__(self, *, listeners: Optional[List["_models.WinRMListener"]] = None, **kwargs: Any) -> None: """ :keyword listeners: The list of Windows Remote Management listeners. - :paramtype listeners: list[~azure.mgmt.compute.v2024_11_01.models.WinRMListener] + :paramtype listeners: list[~azure.mgmt.compute.v2024_07_01.models.WinRMListener] """ super().__init__(**kwargs) self.listeners = listeners @@ -17458,7 +16990,7 @@ class WinRMListener(_serialization.Model): :ivar protocol: Specifies the protocol of WinRM listener. Possible values are: **http,** **https.**. Known values are: "Http" and "Https". - :vartype protocol: str or ~azure.mgmt.compute.v2024_11_01.models.ProtocolTypes + :vartype protocol: str or ~azure.mgmt.compute.v2024_07_01.models.ProtocolTypes :ivar certificate_url: This is the URL of a certificate that has been uploaded to Key Vault as a secret. For adding a secret to the Key Vault, see `Add a key or secret to the key vault `_. In this case, your @@ -17489,7 +17021,7 @@ def __init__( """ :keyword protocol: Specifies the protocol of WinRM listener. Possible values are: **http,** **https.**. Known values are: "Http" and "Https". - :paramtype protocol: str or ~azure.mgmt.compute.v2024_11_01.models.ProtocolTypes + :paramtype protocol: str or ~azure.mgmt.compute.v2024_07_01.models.ProtocolTypes :keyword certificate_url: This is the URL of a certificate that has been uploaded to Key Vault as a secret. For adding a secret to the Key Vault, see `Add a key or secret to the key vault `_. In this case, your diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_patch.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/_patch.py similarity index 61% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_patch.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/_patch.py index f7dd32510333..8bcb627aa475 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/_patch.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/models/_patch.py @@ -1,7 +1,8 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# 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. +# -------------------------------------------------------------------------- """Customize generated code here. Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/operations/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/operations/__init__.py similarity index 100% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/operations/__init__.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/operations/__init__.py diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/operations/_operations.py similarity index 92% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/operations/_operations.py rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/operations/_operations.py index de3d9e4964eb..c35883e1b636 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, List, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -48,7 +46,7 @@ def build_operations_list_request(**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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -67,13 +65,13 @@ def build_usage_list_request(location: str, subscription_id: str, **kwargs: Any) _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -94,13 +92,13 @@ def build_virtual_machine_sizes_list_request(location: str, subscription_id: str _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -123,14 +121,14 @@ def build_virtual_machine_scale_sets_list_by_location_request( # pylint: disabl _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachineScaleSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -159,7 +157,7 @@ def build_virtual_machine_scale_sets_create_or_update_request( # pylint: disabl _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -167,7 +165,7 @@ def build_virtual_machine_scale_sets_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -203,7 +201,7 @@ def build_virtual_machine_scale_sets_update_request( # pylint: disable=name-too _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -211,7 +209,7 @@ def build_virtual_machine_scale_sets_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -246,14 +244,14 @@ def build_virtual_machine_scale_sets_delete_request( # pylint: disable=name-too _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -284,14 +282,14 @@ def build_virtual_machine_scale_sets_get_request( # pylint: disable=name-too-lo _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -322,7 +320,7 @@ def build_virtual_machine_scale_sets_deallocate_request( # pylint: disable=name _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -330,7 +328,7 @@ def build_virtual_machine_scale_sets_deallocate_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -363,7 +361,7 @@ def build_virtual_machine_scale_sets_delete_instances_request( # pylint: disabl _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -371,7 +369,7 @@ def build_virtual_machine_scale_sets_delete_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -399,14 +397,14 @@ def build_virtual_machine_scale_sets_get_instance_view_request( # pylint: disab _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -430,14 +428,14 @@ def build_virtual_machine_scale_sets_list_request( # pylint: disable=name-too-l _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -460,7 +458,7 @@ def build_virtual_machine_scale_sets_list_all_request( # pylint: disable=name-t _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -488,14 +486,14 @@ def build_virtual_machine_scale_sets_list_skus_request( # pylint: disable=name- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -519,14 +517,14 @@ def build_virtual_machine_scale_sets_get_os_upgrade_history_request( # pylint: _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -555,7 +553,7 @@ def build_virtual_machine_scale_sets_power_off_request( # pylint: disable=name- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -563,7 +561,7 @@ def build_virtual_machine_scale_sets_power_off_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -591,7 +589,7 @@ def build_virtual_machine_scale_sets_restart_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -599,7 +597,7 @@ def build_virtual_machine_scale_sets_restart_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -625,7 +623,7 @@ def build_virtual_machine_scale_sets_start_request( # pylint: disable=name-too- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -633,7 +631,7 @@ def build_virtual_machine_scale_sets_start_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -659,14 +657,14 @@ def build_virtual_machine_scale_sets_reapply_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reapply", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -690,7 +688,7 @@ def build_virtual_machine_scale_sets_redeploy_request( # pylint: disable=name-t _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -698,7 +696,7 @@ def build_virtual_machine_scale_sets_redeploy_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -724,7 +722,7 @@ def build_virtual_machine_scale_sets_perform_maintenance_request( # pylint: dis _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -732,7 +730,7 @@ def build_virtual_machine_scale_sets_perform_maintenance_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -758,7 +756,7 @@ def build_virtual_machine_scale_sets_update_instances_request( # pylint: disabl _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -766,7 +764,7 @@ def build_virtual_machine_scale_sets_update_instances_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -792,7 +790,7 @@ def build_virtual_machine_scale_sets_reimage_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -800,7 +798,7 @@ def build_virtual_machine_scale_sets_reimage_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -826,7 +824,7 @@ def build_virtual_machine_scale_sets_reimage_all_request( # pylint: disable=nam _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -834,7 +832,7 @@ def build_virtual_machine_scale_sets_reimage_all_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -860,7 +858,7 @@ def build_virtual_machine_scale_sets_approve_rolling_upgrade_request( # pylint: _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -868,7 +866,7 @@ def build_virtual_machine_scale_sets_approve_rolling_upgrade_request( # pylint: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/approveRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -901,14 +899,14 @@ def build_virtual_machine_scale_sets_force_recovery_service_fabric_platform_upda _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -937,7 +935,7 @@ def build_virtual_machine_scale_sets_convert_to_single_placement_group_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -945,7 +943,7 @@ def build_virtual_machine_scale_sets_convert_to_single_placement_group_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/convertToSinglePlacementGroup", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -971,7 +969,7 @@ def build_virtual_machine_scale_sets_set_orchestration_service_state_request( # _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -979,7 +977,7 @@ def build_virtual_machine_scale_sets_set_orchestration_service_state_request( # _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/setOrchestrationServiceState", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1005,7 +1003,7 @@ def build_virtual_machine_scale_set_extensions_create_or_update_request( # pyli _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -1013,7 +1011,7 @@ def build_virtual_machine_scale_set_extensions_create_or_update_request( # pyli _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1040,7 +1038,7 @@ def build_virtual_machine_scale_set_extensions_update_request( # pylint: disabl _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -1048,7 +1046,7 @@ def build_virtual_machine_scale_set_extensions_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1075,14 +1073,14 @@ def build_virtual_machine_scale_set_extensions_delete_request( # pylint: disabl _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1113,14 +1111,14 @@ def build_virtual_machine_scale_set_extensions_get_request( # pylint: disable=n _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1147,14 +1145,14 @@ def build_virtual_machine_scale_set_extensions_list_request( # pylint: disable= _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1178,14 +1176,14 @@ def build_virtual_machine_scale_set_rolling_upgrades_cancel_request( # pylint: _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1209,14 +1207,14 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_os_upgrade_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1240,14 +1238,14 @@ def build_virtual_machine_scale_set_rolling_upgrades_start_extension_upgrade_req _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensionRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1271,14 +1269,14 @@ def build_virtual_machine_scale_set_rolling_upgrades_get_latest_request( # pyli _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1307,7 +1305,7 @@ def build_virtual_machine_scale_set_vm_extensions_create_or_update_request( # p _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -1315,7 +1313,7 @@ def build_virtual_machine_scale_set_vm_extensions_create_or_update_request( # p _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1348,7 +1346,7 @@ def build_virtual_machine_scale_set_vm_extensions_update_request( # pylint: dis _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -1356,7 +1354,7 @@ def build_virtual_machine_scale_set_vm_extensions_update_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1389,14 +1387,14 @@ def build_virtual_machine_scale_set_vm_extensions_delete_request( # pylint: dis _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1429,14 +1427,14 @@ def build_virtual_machine_scale_set_vm_extensions_get_request( # pylint: disabl _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1470,14 +1468,14 @@ def build_virtual_machine_scale_set_vm_extensions_list_request( # pylint: disab _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1504,7 +1502,7 @@ def build_virtual_machine_scale_set_vms_reimage_request( # pylint: disable=name _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -1512,7 +1510,7 @@ def build_virtual_machine_scale_set_vms_reimage_request( # pylint: disable=name _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1539,14 +1537,14 @@ def build_virtual_machine_scale_set_vms_reimage_all_request( # pylint: disable= _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/reimageall", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1571,14 +1569,14 @@ def build_virtual_machine_scale_set_vms_approve_rolling_upgrade_request( # pyli _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/approveRollingUpgrade", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1603,14 +1601,14 @@ def build_virtual_machine_scale_set_vms_deallocate_request( # pylint: disable=n _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1642,7 +1640,7 @@ def build_virtual_machine_scale_set_vms_update_request( # pylint: disable=name- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -1650,7 +1648,7 @@ def build_virtual_machine_scale_set_vms_update_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1687,14 +1685,14 @@ def build_virtual_machine_scale_set_vms_delete_request( # pylint: disable=name- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1727,14 +1725,14 @@ def build_virtual_machine_scale_set_vms_get_request( # pylint: disable=name-too _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1761,14 +1759,14 @@ def build_virtual_machine_scale_set_vms_get_instance_view_request( # pylint: di _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1800,14 +1798,14 @@ def build_virtual_machine_scale_set_vms_list_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "virtualMachineScaleSetName": _SERIALIZER.url( @@ -1845,14 +1843,14 @@ def build_virtual_machine_scale_set_vms_power_off_request( # pylint: disable=na _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1879,14 +1877,14 @@ def build_virtual_machine_scale_set_vms_restart_request( # pylint: disable=name _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1911,14 +1909,14 @@ def build_virtual_machine_scale_set_vms_start_request( # pylint: disable=name-t _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1943,14 +1941,14 @@ def build_virtual_machine_scale_set_vms_redeploy_request( # pylint: disable=nam _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -1981,14 +1979,14 @@ def build_virtual_machine_scale_set_vms_retrieve_boot_diagnostics_data_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/retrieveBootDiagnosticsData", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2017,14 +2015,14 @@ def build_virtual_machine_scale_set_vms_perform_maintenance_request( # pylint: _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2049,14 +2047,14 @@ def build_virtual_machine_scale_set_vms_simulate_eviction_request( # pylint: di _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/simulateEviction", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2081,7 +2079,7 @@ def build_virtual_machine_scale_set_vms_attach_detach_data_disks_request( # pyl _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -2089,7 +2087,7 @@ def build_virtual_machine_scale_set_vms_attach_detach_data_disks_request( # pyl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/attachDetachDataDisks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2116,7 +2114,7 @@ def build_virtual_machine_scale_set_vms_run_command_request( # pylint: disable= _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json, text/json") @@ -2124,7 +2122,7 @@ def build_virtual_machine_scale_set_vms_run_command_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -2151,7 +2149,7 @@ def build_virtual_machine_extensions_create_or_update_request( # pylint: disabl _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -2159,7 +2157,7 @@ def build_virtual_machine_extensions_create_or_update_request( # pylint: disabl _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2186,7 +2184,7 @@ def build_virtual_machine_extensions_update_request( # pylint: disable=name-too _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -2194,7 +2192,7 @@ def build_virtual_machine_extensions_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2221,14 +2219,14 @@ def build_virtual_machine_extensions_delete_request( # pylint: disable=name-too _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2259,14 +2257,14 @@ def build_virtual_machine_extensions_get_request( # pylint: disable=name-too-lo _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2293,14 +2291,14 @@ def build_virtual_machine_extensions_list_request( # pylint: disable=name-too-l _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2326,14 +2324,14 @@ def build_virtual_machines_list_by_location_request( # pylint: disable=name-too _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2356,7 +2354,7 @@ def build_virtual_machines_capture_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -2364,7 +2362,7 @@ def build_virtual_machines_capture_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2396,7 +2394,7 @@ def build_virtual_machines_create_or_update_request( # pylint: disable=name-too _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -2404,7 +2402,7 @@ def build_virtual_machines_create_or_update_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2440,7 +2438,7 @@ def build_virtual_machines_update_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -2448,7 +2446,7 @@ def build_virtual_machines_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2483,14 +2481,14 @@ def build_virtual_machines_delete_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2521,14 +2519,14 @@ def build_virtual_machines_get_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2554,14 +2552,14 @@ def build_virtual_machines_instance_view_request( # pylint: disable=name-too-lo _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2585,14 +2583,14 @@ def build_virtual_machines_convert_to_managed_disks_request( # pylint: disable= _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2616,14 +2614,14 @@ def build_virtual_machines_deallocate_request( # pylint: disable=name-too-long _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2649,14 +2647,14 @@ def build_virtual_machines_generalize_request( # pylint: disable=name-too-long _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2685,14 +2683,14 @@ def build_virtual_machines_list_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -2724,7 +2722,7 @@ def build_virtual_machines_list_all_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2756,14 +2754,14 @@ def build_virtual_machines_list_available_sizes_request( # pylint: disable=name _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2787,14 +2785,14 @@ def build_virtual_machines_power_off_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2820,14 +2818,14 @@ def build_virtual_machines_reapply_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reapply", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2851,14 +2849,14 @@ def build_virtual_machines_restart_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2882,14 +2880,14 @@ def build_virtual_machines_start_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2913,14 +2911,14 @@ def build_virtual_machines_redeploy_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2944,7 +2942,7 @@ def build_virtual_machines_reimage_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -2952,7 +2950,7 @@ def build_virtual_machines_reimage_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -2983,14 +2981,14 @@ def build_virtual_machines_retrieve_boot_diagnostics_data_request( # pylint: di _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/retrieveBootDiagnosticsData", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -3018,14 +3016,14 @@ def build_virtual_machines_perform_maintenance_request( # pylint: disable=name- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -3049,14 +3047,14 @@ def build_virtual_machines_simulate_eviction_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -3080,14 +3078,14 @@ def build_virtual_machines_assess_patches_request( # pylint: disable=name-too-l _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/assessPatches", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -3111,7 +3109,7 @@ def build_virtual_machines_install_patches_request( # pylint: disable=name-too- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -3119,7 +3117,7 @@ def build_virtual_machines_install_patches_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/installPatches", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -3145,7 +3143,7 @@ def build_virtual_machines_attach_detach_data_disks_request( # pylint: disable= _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -3153,41 +3151,7 @@ def build_virtual_machines_attach_detach_data_disks_request( # pylint: disable= _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/attachDetachDataDisks", - ) # pylint: disable=line-too-long - path_format_arguments = { - "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), - "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) - - -def build_virtual_machines_migrate_to_vm_scale_set_request( # pylint: disable=name-too-long - resource_group_name: str, vm_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-01")) - 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/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/migrateToVirtualMachineScaleSet", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -3213,7 +3177,7 @@ def build_virtual_machines_run_command_request( # pylint: disable=name-too-long _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json, text/json") @@ -3221,7 +3185,7 @@ def build_virtual_machines_run_command_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -3247,14 +3211,14 @@ def build_virtual_machine_images_get_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -3290,14 +3254,14 @@ def build_virtual_machine_images_list_request( # pylint: disable=name-too-long _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -3329,14 +3293,14 @@ def build_virtual_machine_images_list_offers_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -3360,13 +3324,13 @@ def build_virtual_machine_images_list_publishers_request( # pylint: disable=nam _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -3389,14 +3353,14 @@ def build_virtual_machine_images_list_skus_request( # pylint: disable=name-too- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -3421,14 +3385,14 @@ def build_virtual_machine_images_list_by_edge_zone_request( # pylint: disable=n _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/vmimages", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -3446,53 +3410,6 @@ def build_virtual_machine_images_list_by_edge_zone_request( # pylint: disable=n return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_virtual_machine_images_list_with_properties_request( # pylint: disable=name-too-long - location: str, - publisher_name: str, - offer: str, - skus: str, - subscription_id: str, - *, - expand: Union[str, _models.Expand], - top: Optional[int] = None, - orderby: 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-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = kwargs.pop( - "template_url", - "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long - path_format_arguments = { - "location": _SERIALIZER.url("location", location, "str"), - "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), - "offer": _SERIALIZER.url("offer", offer, "str"), - "skus": _SERIALIZER.url("skus", skus, "str"), - "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["$expand"] = _SERIALIZER.query("expand", expand, "str") - if top is not None: - _params["$top"] = _SERIALIZER.query("top", top, "int") - if orderby is not None: - _params["$orderby"] = _SERIALIZER.query("orderby", orderby, "str") - _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_virtual_machine_images_edge_zone_get_request( # pylint: disable=name-too-long location: str, edge_zone: str, @@ -3506,14 +3423,14 @@ def build_virtual_machine_images_edge_zone_get_request( # pylint: disable=name- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -3551,14 +3468,14 @@ def build_virtual_machine_images_edge_zone_list_request( # pylint: disable=name _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -3591,14 +3508,14 @@ def build_virtual_machine_images_edge_zone_list_offers_request( # pylint: disab _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -3623,14 +3540,14 @@ def build_virtual_machine_images_edge_zone_list_publishers_request( # pylint: d _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -3654,14 +3571,14 @@ def build_virtual_machine_images_edge_zone_list_skus_request( # pylint: disable _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "edgeZone": _SERIALIZER.url("edge_zone", edge_zone, "str"), @@ -3687,14 +3604,14 @@ def build_virtual_machine_extension_images_get_request( # pylint: disable=name- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -3720,14 +3637,14 @@ def build_virtual_machine_extension_images_list_types_request( # pylint: disabl _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -3759,14 +3676,14 @@ def build_virtual_machine_extension_images_list_versions_request( # pylint: dis _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "publisherName": _SERIALIZER.url("publisher_name", publisher_name, "str"), @@ -3797,7 +3714,7 @@ def build_availability_sets_create_or_update_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -3805,7 +3722,7 @@ def build_availability_sets_create_or_update_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -3831,7 +3748,7 @@ def build_availability_sets_update_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -3839,7 +3756,7 @@ def build_availability_sets_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -3865,14 +3782,14 @@ def build_availability_sets_delete_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -3896,14 +3813,14 @@ def build_availability_sets_get_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -3927,7 +3844,7 @@ def build_availability_sets_list_by_subscription_request( # pylint: disable=nam _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -3953,14 +3870,14 @@ def build_availability_sets_list_request(resource_group_name: str, subscription_ _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -3983,14 +3900,14 @@ def build_availability_sets_list_available_sizes_request( # pylint: disable=nam _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), @@ -4008,24 +3925,26 @@ def build_availability_sets_list_available_sizes_request( # pylint: disable=nam return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_availability_sets_start_migration_to_virtual_machine_scale_set_request( # pylint: disable=name-too-long - resource_group_name: str, availability_set_name: str, subscription_id: str, **kwargs: Any +def build_proximity_placement_groups_create_or_update_request( # pylint: disable=name-too-long + resource_group_name: str, proximity_placement_group_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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) 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/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/startMigrationToVirtualMachineScaleSet", - ) # pylint: disable=line-too-long + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), + "proximityPlacementGroupName": _SERIALIZER.url( + "proximity_placement_group_name", proximity_placement_group_name, "str" + ), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } @@ -4039,26 +3958,29 @@ def build_availability_sets_start_migration_to_virtual_machine_scale_set_request _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) + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) -def build_availability_sets_cancel_migration_to_virtual_machine_scale_set_request( # pylint: disable=name-too-long - resource_group_name: str, availability_set_name: str, subscription_id: str, **kwargs: Any +def build_proximity_placement_groups_update_request( # pylint: disable=name-too-long + resource_group_name: str, proximity_placement_group_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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) + 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/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/cancelMigrationToVirtualMachineScaleSet", - ) # pylint: disable=line-too-long + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), + "proximityPlacementGroupName": _SERIALIZER.url( + "proximity_placement_group_name", proximity_placement_group_name, "str" + ), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } @@ -4068,29 +3990,32 @@ def build_availability_sets_cancel_migration_to_virtual_machine_scale_set_reques _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) + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) -def build_availability_sets_validate_migration_to_virtual_machine_scale_set_request( # pylint: disable=name-too-long - resource_group_name: str, availability_set_name: str, subscription_id: str, **kwargs: Any +def build_proximity_placement_groups_delete_request( # pylint: disable=name-too-long + resource_group_name: str, proximity_placement_group_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-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/validateMigrationToVirtualMachineScaleSet", - ) # pylint: disable=line-too-long + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), + "proximityPlacementGroupName": _SERIALIZER.url( + "proximity_placement_group_name", proximity_placement_group_name, "str" + ), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } @@ -4100,207 +4025,66 @@ def build_availability_sets_validate_migration_to_virtual_machine_scale_set_requ _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) + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) -def build_availability_sets_convert_to_virtual_machine_scale_set_request( # pylint: disable=name-too-long - resource_group_name: str, availability_set_name: str, subscription_id: str, **kwargs: Any +def build_proximity_placement_groups_get_request( # pylint: disable=name-too-long + resource_group_name: str, + proximity_placement_group_name: str, + subscription_id: str, + *, + include_colocation_status: 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-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/convertToVirtualMachineScaleSet", - ) # pylint: disable=line-too-long + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "availabilitySetName": _SERIALIZER.url("availability_set_name", availability_set_name, "str"), + "proximityPlacementGroupName": _SERIALIZER.url( + "proximity_placement_group_name", proximity_placement_group_name, "str" + ), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore # Construct parameters + if include_colocation_status is not None: + _params["includeColocationStatus"] = _SERIALIZER.query( + "include_colocation_status", include_colocation_status, "str" + ) _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) + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_proximity_placement_groups_create_or_update_request( # pylint: disable=name-too-long - resource_group_name: str, proximity_placement_group_name: str, subscription_id: str, **kwargs: Any +def build_proximity_placement_groups_list_by_subscription_request( # pylint: disable=name-too-long + 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-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( - "template_url", - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long - path_format_arguments = { - "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "proximityPlacementGroupName": _SERIALIZER.url( - "proximity_placement_group_name", proximity_placement_group_name, "str" - ), - "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="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_proximity_placement_groups_update_request( # pylint: disable=name-too-long - resource_group_name: str, proximity_placement_group_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-01")) - 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/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long - path_format_arguments = { - "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "proximityPlacementGroupName": _SERIALIZER.url( - "proximity_placement_group_name", proximity_placement_group_name, "str" - ), - "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="PATCH", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_proximity_placement_groups_delete_request( # pylint: disable=name-too-long - resource_group_name: str, proximity_placement_group_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-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = kwargs.pop( - "template_url", - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long - path_format_arguments = { - "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "proximityPlacementGroupName": _SERIALIZER.url( - "proximity_placement_group_name", proximity_placement_group_name, "str" - ), - "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="DELETE", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_proximity_placement_groups_get_request( # pylint: disable=name-too-long - resource_group_name: str, - proximity_placement_group_name: str, - subscription_id: str, - *, - include_colocation_status: 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-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = kwargs.pop( - "template_url", - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", - ) # pylint: disable=line-too-long - path_format_arguments = { - "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "proximityPlacementGroupName": _SERIALIZER.url( - "proximity_placement_group_name", proximity_placement_group_name, "str" - ), - "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - if include_colocation_status is not None: - _params["includeColocationStatus"] = _SERIALIZER.query( - "include_colocation_status", include_colocation_status, "str" - ) - _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_proximity_placement_groups_list_by_subscription_request( # pylint: disable=name-too-long - 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-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = kwargs.pop( - "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/proximityPlacementGroups" - ) + "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/proximityPlacementGroups" + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } @@ -4322,14 +4106,14 @@ def build_proximity_placement_groups_list_by_resource_group_request( # pylint: _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -4352,7 +4136,7 @@ def build_dedicated_host_groups_create_or_update_request( # pylint: disable=nam _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -4360,7 +4144,7 @@ def build_dedicated_host_groups_create_or_update_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -4386,7 +4170,7 @@ def build_dedicated_host_groups_update_request( # pylint: disable=name-too-long _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -4394,7 +4178,7 @@ def build_dedicated_host_groups_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -4420,14 +4204,14 @@ def build_dedicated_host_groups_delete_request( # pylint: disable=name-too-long _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -4456,14 +4240,14 @@ def build_dedicated_host_groups_get_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -4489,14 +4273,14 @@ def build_dedicated_host_groups_list_by_resource_group_request( # pylint: disab _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -4519,7 +4303,7 @@ def build_dedicated_host_groups_list_by_subscription_request( # pylint: disable _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -4545,7 +4329,7 @@ def build_dedicated_hosts_create_or_update_request( # pylint: disable=name-too- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -4553,7 +4337,7 @@ def build_dedicated_hosts_create_or_update_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -4580,7 +4364,7 @@ def build_dedicated_hosts_update_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -4588,7 +4372,7 @@ def build_dedicated_hosts_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -4615,14 +4399,14 @@ def build_dedicated_hosts_delete_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -4653,14 +4437,14 @@ def build_dedicated_hosts_get_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -4687,14 +4471,14 @@ def build_dedicated_hosts_list_by_host_group_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -4718,14 +4502,14 @@ def build_dedicated_hosts_restart_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str"), @@ -4750,14 +4534,14 @@ def build_dedicated_hosts_redeploy_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}/redeploy", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str", pattern=r"^[-\w\._]+$"), @@ -4782,14 +4566,14 @@ def build_dedicated_hosts_list_available_sizes_request( # pylint: disable=name- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}/hostSizes", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "hostGroupName": _SERIALIZER.url("host_group_name", host_group_name, "str", pattern=r"^[-\w\._]+$"), @@ -4814,7 +4598,7 @@ def build_ssh_public_keys_list_by_subscription_request( # pylint: disable=name- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -4840,14 +4624,14 @@ def build_ssh_public_keys_list_by_resource_group_request( # pylint: disable=nam _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -4870,7 +4654,7 @@ def build_ssh_public_keys_create_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -4878,7 +4662,7 @@ def build_ssh_public_keys_create_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -4904,7 +4688,7 @@ def build_ssh_public_keys_update_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -4912,7 +4696,7 @@ def build_ssh_public_keys_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -4938,14 +4722,14 @@ def build_ssh_public_keys_delete_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -4969,14 +4753,14 @@ def build_ssh_public_keys_get_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -5000,7 +4784,7 @@ def build_ssh_public_keys_generate_key_pair_request( # pylint: disable=name-too _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5008,7 +4792,7 @@ def build_ssh_public_keys_generate_key_pair_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}/generateKeyPair", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "sshPublicKeyName": _SERIALIZER.url("ssh_public_key_name", ssh_public_key_name, "str"), @@ -5034,7 +4818,7 @@ def build_images_create_or_update_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5042,7 +4826,7 @@ def build_images_create_or_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -5068,7 +4852,7 @@ def build_images_update_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5076,7 +4860,7 @@ def build_images_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -5102,14 +4886,14 @@ def build_images_delete_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -5133,14 +4917,14 @@ def build_images_get_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "imageName": _SERIALIZER.url("image_name", image_name, "str"), @@ -5166,14 +4950,14 @@ def build_images_list_by_resource_group_request( # pylint: disable=name-too-lon _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -5194,7 +4978,7 @@ def build_images_list_request(subscription_id: str, **kwargs: Any) -> HttpReques _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -5220,7 +5004,7 @@ def build_restore_point_collections_create_or_update_request( # pylint: disable _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5228,7 +5012,7 @@ def build_restore_point_collections_create_or_update_request( # pylint: disable _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5256,7 +5040,7 @@ def build_restore_point_collections_update_request( # pylint: disable=name-too- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5264,7 +5048,7 @@ def build_restore_point_collections_update_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5292,14 +5076,14 @@ def build_restore_point_collections_delete_request( # pylint: disable=name-too- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5330,14 +5114,14 @@ def build_restore_point_collections_get_request( # pylint: disable=name-too-lon _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5365,14 +5149,14 @@ def build_restore_point_collections_list_request( # pylint: disable=name-too-lo _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5395,7 +5179,7 @@ def build_restore_point_collections_list_all_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -5427,7 +5211,7 @@ def build_restore_points_create_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5435,7 +5219,7 @@ def build_restore_points_create_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5468,14 +5252,14 @@ def build_restore_points_delete_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5508,14 +5292,14 @@ def build_restore_points_get_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -5544,7 +5328,7 @@ def build_capacity_reservation_groups_create_or_update_request( # pylint: disab _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5552,7 +5336,7 @@ def build_capacity_reservation_groups_create_or_update_request( # pylint: disab _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -5580,7 +5364,7 @@ def build_capacity_reservation_groups_update_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5588,7 +5372,7 @@ def build_capacity_reservation_groups_update_request( # pylint: disable=name-to _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -5616,14 +5400,14 @@ def build_capacity_reservation_groups_delete_request( # pylint: disable=name-to _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -5654,14 +5438,14 @@ def build_capacity_reservation_groups_get_request( # pylint: disable=name-too-l _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -5693,14 +5477,14 @@ def build_capacity_reservation_groups_list_by_resource_group_request( # pylint: _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -5729,13 +5513,13 @@ def build_capacity_reservation_groups_list_by_subscription_request( # pylint: d _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/capacityReservationGroups" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), } @@ -5765,7 +5549,7 @@ def build_capacity_reservations_create_or_update_request( # pylint: disable=nam _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5773,7 +5557,7 @@ def build_capacity_reservations_create_or_update_request( # pylint: disable=nam _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -5806,7 +5590,7 @@ def build_capacity_reservations_update_request( # pylint: disable=name-too-long _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5814,7 +5598,7 @@ def build_capacity_reservations_update_request( # pylint: disable=name-too-long _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -5847,14 +5631,14 @@ def build_capacity_reservations_delete_request( # pylint: disable=name-too-long _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -5887,14 +5671,14 @@ def build_capacity_reservations_get_request( _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -5923,14 +5707,14 @@ def build_capacity_reservations_list_by_capacity_reservation_group_request( # p _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "capacityReservationGroupName": _SERIALIZER.url( @@ -5956,7 +5740,7 @@ def build_log_analytics_export_request_rate_by_interval_request( # pylint: disa _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5964,7 +5748,7 @@ def build_log_analytics_export_request_rate_by_interval_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -5989,7 +5773,7 @@ def build_log_analytics_export_throttled_requests_request( # pylint: disable=na _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json") @@ -5997,7 +5781,7 @@ def build_log_analytics_export_throttled_requests_request( # pylint: disable=na _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -6022,13 +5806,13 @@ def build_virtual_machine_run_commands_list_request( # pylint: disable=name-too _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json, text/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands" - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -6051,14 +5835,14 @@ def build_virtual_machine_run_commands_get_request( # pylint: disable=name-too- _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json, text/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str", pattern=r"^[-\w\._]+$"), "commandId": _SERIALIZER.url("command_id", command_id, "str"), @@ -6082,7 +5866,7 @@ def build_virtual_machine_run_commands_create_or_update_request( # pylint: disa _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json, text/json") @@ -6090,7 +5874,7 @@ def build_virtual_machine_run_commands_create_or_update_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -6117,7 +5901,7 @@ def build_virtual_machine_run_commands_update_request( # pylint: disable=name-t _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json, text/json") @@ -6125,7 +5909,7 @@ def build_virtual_machine_run_commands_update_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -6152,14 +5936,14 @@ def build_virtual_machine_run_commands_delete_request( # pylint: disable=name-t _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json, text/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -6190,14 +5974,14 @@ def build_virtual_machine_run_commands_get_by_virtual_machine_request( # pylint _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json, text/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -6224,14 +6008,14 @@ def build_virtual_machine_run_commands_list_by_virtual_machine_request( # pylin _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json, text/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmName": _SERIALIZER.url("vm_name", vm_name, "str"), @@ -6262,7 +6046,7 @@ def build_virtual_machine_scale_set_vm_run_commands_create_or_update_request( # _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json, text/json") @@ -6270,7 +6054,7 @@ def build_virtual_machine_scale_set_vm_run_commands_create_or_update_request( # _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -6303,7 +6087,7 @@ def build_virtual_machine_scale_set_vm_run_commands_update_request( # pylint: d _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) accept = _headers.pop("Accept", "application/json, text/json") @@ -6311,7 +6095,7 @@ def build_virtual_machine_scale_set_vm_run_commands_update_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -6344,14 +6128,14 @@ def build_virtual_machine_scale_set_vm_run_commands_delete_request( # pylint: d _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json, text/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -6384,14 +6168,14 @@ def build_virtual_machine_scale_set_vm_run_commands_get_request( # pylint: disa _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json, text/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -6425,14 +6209,14 @@ def build_virtual_machine_scale_set_vm_run_commands_list_request( # pylint: dis _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-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-07-01")) accept = _headers.pop("Accept", "application/json, text/json") # Construct URL _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "vmScaleSetName": _SERIALIZER.url("vm_scale_set_name", vm_scale_set_name, "str"), @@ -6459,7 +6243,7 @@ class Operations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`operations` attribute. """ @@ -6467,10 +6251,10 @@ 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6480,13 +6264,13 @@ def list(self, **kwargs: Any) -> Iterable["_models.ComputeOperationValue"]: :return: An iterator like instance of either ComputeOperationValue or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.ComputeOperationValue] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.ComputeOperationValue] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ComputeOperationListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -6555,7 +6339,7 @@ class UsageOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`usage` attribute. """ @@ -6563,10 +6347,10 @@ class UsageOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6577,13 +6361,13 @@ def list(self, location: str, **kwargs: Any) -> Iterable["_models.Usage"]: :param location: The location for which resource usage is queried. Required. :type location: str :return: An iterator like instance of either Usage or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.Usage] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.Usage] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ListUsagesResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -6654,7 +6438,7 @@ class VirtualMachineSizesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_sizes` attribute. """ @@ -6662,10 +6446,10 @@ class VirtualMachineSizesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6676,13 +6460,13 @@ def list(self, location: str, **kwargs: Any) -> Iterable["_models.VirtualMachine :param location: The location upon which virtual-machine-sizes is queried. Required. :type location: str :return: An iterator like instance of either VirtualMachineSize or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSize] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSize] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineSizeListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -6753,7 +6537,7 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_scale_sets` attribute. """ @@ -6761,10 +6545,10 @@ class VirtualMachineScaleSetsOperations: # pylint: disable=too-many-public-meth 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -6777,13 +6561,13 @@ def list_by_location(self, location: str, **kwargs: Any) -> Iterable["_models.Vi :return: An iterator like instance of either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -6868,7 +6652,7 @@ def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -6937,7 +6721,7 @@ def begin_create_or_update( :param vm_scale_set_name: The name of the VM scale set to create or update. Required. :type vm_scale_set_name: str :param parameters: The scale set object. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -6952,7 +6736,7 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -6990,7 +6774,7 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -7013,7 +6797,7 @@ def begin_create_or_update( :type vm_scale_set_name: str :param parameters: The scale set object. Is either a VirtualMachineScaleSet type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet or IO[bytes] :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -7025,13 +6809,13 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSet] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -7098,7 +6882,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -7167,7 +6951,7 @@ def begin_update( :param vm_scale_set_name: The name of the VM scale set to create or update. Required. :type vm_scale_set_name: str :param parameters: The scale set object. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdate :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -7182,7 +6966,7 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -7220,7 +7004,7 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -7243,7 +7027,7 @@ def begin_update( :type vm_scale_set_name: str :param parameters: The scale set object. Is either a VirtualMachineScaleSetUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetUpdate or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetUpdate or IO[bytes] :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting @@ -7256,13 +7040,13 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSet] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -7322,7 +7106,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_sets_delete_request( @@ -7379,7 +7163,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -7435,9 +7219,9 @@ def get( :keyword expand: The expand expression to apply on the operation. 'UserData' retrieves the UserData property of the VM scale set that was provided by the user during the VM scale set Create/Update operation. "userData" Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.ExpandTypesForGetVMScaleSets + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.ExpandTypesForGetVMScaleSets :return: VirtualMachineScaleSet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -7451,7 +7235,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSet] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_sets_get_request( @@ -7503,7 +7287,7 @@ def _deallocate_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -7577,7 +7361,7 @@ def begin_deallocate( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword hibernate: Optional parameter to hibernate a virtual machine from the VM scale set. (This feature is available for VMSS with Flexible OrchestrationMode only). Default value is None. @@ -7645,7 +7429,7 @@ def begin_deallocate( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :keyword hibernate: Optional parameter to hibernate a virtual machine from the VM scale set. (This feature is available for VMSS with Flexible OrchestrationMode only). Default value is None. @@ -7657,7 +7441,7 @@ def begin_deallocate( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -7718,7 +7502,7 @@ def _delete_instances_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -7787,7 +7571,7 @@ def begin_delete_instances( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Required. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs :keyword force_deletion: Optional parameter to force delete virtual machines from the VM scale set. (Feature in Preview). Default value is None. :paramtype force_deletion: bool @@ -7849,7 +7633,7 @@ def begin_delete_instances( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceRequiredIDs type or a IO[bytes] type. Required. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs or IO[bytes] :keyword force_deletion: Optional parameter to force delete virtual machines from the VM scale set. (Feature in Preview). Default value is None. :paramtype force_deletion: bool @@ -7860,7 +7644,7 @@ def begin_delete_instances( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -7912,7 +7696,7 @@ def get_instance_view( :param vm_scale_set_name: The name of the VM scale set. Required. :type vm_scale_set_name: str :return: VirtualMachineScaleSetInstanceView or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetInstanceView + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetInstanceView :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -7926,7 +7710,7 @@ def get_instance_view( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetInstanceView] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_sets_get_instance_view_request( @@ -7966,13 +7750,13 @@ def list(self, resource_group_name: str, **kwargs: Any) -> Iterable["_models.Vir :return: An iterator like instance of either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -8045,13 +7829,13 @@ def list_all(self, **kwargs: Any) -> Iterable["_models.VirtualMachineScaleSet"]: :return: An iterator like instance of either VirtualMachineScaleSet or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSet] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSet] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetListWithLinkResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -8128,13 +7912,13 @@ def list_skus( :return: An iterator like instance of either VirtualMachineScaleSetSku or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetSku] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetSku] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetListSkusResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -8212,13 +7996,13 @@ def get_os_upgrade_history( :return: An iterator like instance of either UpgradeOperationHistoricalStatusInfo or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.UpgradeOperationHistoricalStatusInfo] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.UpgradeOperationHistoricalStatusInfo] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetListOSUpgradeHistory] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -8303,7 +8087,7 @@ def _power_off_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -8378,7 +8162,7 @@ def begin_power_off( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword skip_shutdown: The parameter to request non-graceful VM shutdown. True value for this flag indicates non-graceful shutdown whereas false indicates otherwise. Default value for this flag is false if not specified. Default value is False. @@ -8448,7 +8232,7 @@ def begin_power_off( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :keyword skip_shutdown: The parameter to request non-graceful VM shutdown. True value for this flag indicates non-graceful shutdown whereas false indicates otherwise. Default value for this flag is false if not specified. Default value is False. @@ -8460,7 +8244,7 @@ def begin_power_off( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -8519,7 +8303,7 @@ def _restart_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -8589,7 +8373,7 @@ def begin_restart( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -8642,7 +8426,7 @@ def begin_restart( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -8650,7 +8434,7 @@ def begin_restart( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -8708,7 +8492,7 @@ def _start_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -8778,7 +8562,7 @@ def begin_start( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -8831,7 +8615,7 @@ def begin_start( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -8839,7 +8623,7 @@ def begin_start( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -8891,7 +8675,7 @@ def _reapply_initial(self, resource_group_name: str, vm_scale_set_name: str, **k _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_sets_reapply_request( @@ -8947,7 +8731,7 @@ def begin_reapply(self, resource_group_name: str, vm_scale_set_name: str, **kwar _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -9004,7 +8788,7 @@ def _redeploy_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -9075,7 +8859,7 @@ def begin_redeploy( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -9130,7 +8914,7 @@ def begin_redeploy( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -9138,7 +8922,7 @@ def begin_redeploy( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -9196,7 +8980,7 @@ def _perform_maintenance_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -9269,7 +9053,7 @@ def begin_perform_maintenance( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -9328,7 +9112,7 @@ def begin_perform_maintenance( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -9336,7 +9120,7 @@ def begin_perform_maintenance( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -9394,7 +9178,7 @@ def _update_instances_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -9461,7 +9245,7 @@ def begin_update_instances( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Required. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -9514,7 +9298,7 @@ def begin_update_instances( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceRequiredIDs type or a IO[bytes] type. Required. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceRequiredIDs or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -9522,7 +9306,7 @@ def begin_update_instances( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -9580,7 +9364,7 @@ def _reimage_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -9651,7 +9435,7 @@ def begin_reimage( :type vm_scale_set_name: str :param vm_scale_set_reimage_input: Parameters for Reimaging VM ScaleSet. Default value is None. :type vm_scale_set_reimage_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetReimageParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetReimageParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -9707,7 +9491,7 @@ def begin_reimage( :param vm_scale_set_reimage_input: Parameters for Reimaging VM ScaleSet. Is either a VirtualMachineScaleSetReimageParameters type or a IO[bytes] type. Default value is None. :type vm_scale_set_reimage_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetReimageParameters or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetReimageParameters or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -9715,7 +9499,7 @@ def begin_reimage( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -9773,7 +9557,7 @@ def _reimage_all_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -9844,7 +9628,7 @@ def begin_reimage_all( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -9899,7 +9683,7 @@ def begin_reimage_all( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -9907,7 +9691,7 @@ def begin_reimage_all( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -9965,7 +9749,7 @@ def _approve_rolling_upgrade_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -10039,7 +9823,7 @@ def begin_approve_rolling_upgrade( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -10094,7 +9878,7 @@ def begin_approve_rolling_upgrade( :param vm_instance_i_ds: A list of virtual machine instance IDs from the VM scale set. Is either a VirtualMachineScaleSetVMInstanceIDs type or a IO[bytes] type. Default value is None. :type vm_instance_i_ds: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceIDs or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -10102,7 +9886,7 @@ def begin_approve_rolling_upgrade( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -10170,7 +9954,7 @@ def force_recovery_service_fabric_platform_update_domain_walk( # pylint: disabl requested. Default value is None. :paramtype placement_group_id: str :return: RecoveryWalkResponse or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RecoveryWalkResponse + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RecoveryWalkResponse :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -10184,7 +9968,7 @@ def force_recovery_service_fabric_platform_update_domain_walk( # pylint: disabl _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RecoveryWalkResponse] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_sets_force_recovery_service_fabric_platform_update_domain_walk_request( @@ -10237,7 +10021,7 @@ def convert_to_single_placement_group( :type vm_scale_set_name: str :param parameters: The input object for ConvertToSinglePlacementGroup API. Required. :type parameters: - ~azure.mgmt.compute.v2024_11_01.models.VMScaleSetConvertToSinglePlacementGroupInput + ~azure.mgmt.compute.v2024_07_01.models.VMScaleSetConvertToSinglePlacementGroupInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -10291,7 +10075,7 @@ def convert_to_single_placement_group( # pylint: disable=inconsistent-return-st :param parameters: The input object for ConvertToSinglePlacementGroup API. Is either a VMScaleSetConvertToSinglePlacementGroupInput type or a IO[bytes] type. Required. :type parameters: - ~azure.mgmt.compute.v2024_11_01.models.VMScaleSetConvertToSinglePlacementGroupInput or + ~azure.mgmt.compute.v2024_07_01.models.VMScaleSetConvertToSinglePlacementGroupInput or IO[bytes] :return: None or the result of cls(response) :rtype: None @@ -10308,7 +10092,7 @@ def convert_to_single_placement_group( # pylint: disable=inconsistent-return-st _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) @@ -10365,7 +10149,7 @@ def _set_orchestration_service_state_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -10431,7 +10215,7 @@ def begin_set_orchestration_service_state( Required. :type vm_scale_set_name: str :param parameters: The input object for SetOrchestrationServiceState API. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceStateInput + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceStateInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -10484,7 +10268,7 @@ def begin_set_orchestration_service_state( :type vm_scale_set_name: str :param parameters: The input object for SetOrchestrationServiceState API. Is either a OrchestrationServiceStateInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.OrchestrationServiceStateInput or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.OrchestrationServiceStateInput or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] @@ -10493,7 +10277,7 @@ def begin_set_orchestration_service_state( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -10540,7 +10324,7 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_scale_set_extensions` attribute. """ @@ -10548,10 +10332,10 @@ class VirtualMachineScaleSetExtensionsOperations: # pylint: disable=name-too-lo 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -10573,7 +10357,7 @@ def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -10645,14 +10429,14 @@ def begin_create_or_update( :param extension_parameters: Parameters supplied to the Create VM scale set Extension operation. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -10685,7 +10469,7 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -10710,17 +10494,17 @@ def begin_create_or_update( :param extension_parameters: Parameters supplied to the Create VM scale set Extension operation. Is either a VirtualMachineScaleSetExtension type or a IO[bytes] type. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSetExtension] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -10784,7 +10568,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -10856,14 +10640,14 @@ def begin_update( :param extension_parameters: Parameters supplied to the Update VM scale set Extension operation. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtensionUpdate + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtensionUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -10896,7 +10680,7 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -10922,17 +10706,17 @@ def begin_update( operation. Is either a VirtualMachineScaleSetExtensionUpdate type or a IO[bytes] type. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtensionUpdate or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtensionUpdate or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSetExtension] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -10991,7 +10775,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_extensions_delete_request( @@ -11048,7 +10832,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -11107,7 +10891,7 @@ def get( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineScaleSetExtension or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -11121,7 +10905,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetExtension] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_extensions_get_request( @@ -11167,13 +10951,13 @@ def list( :return: An iterator like instance of either VirtualMachineScaleSetExtension or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetExtension] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetExtension] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetExtensionListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -11245,7 +11029,7 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_scale_set_rolling_upgrades` attribute. """ @@ -11253,10 +11037,10 @@ class VirtualMachineScaleSetRollingUpgradesOperations: # pylint: disable=name-t 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _cancel_initial(self, resource_group_name: str, vm_scale_set_name: str, **kwargs: Any) -> Iterator[bytes]: @@ -11271,7 +11055,7 @@ def _cancel_initial(self, resource_group_name: str, vm_scale_set_name: str, **kw _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_rolling_upgrades_cancel_request( @@ -11322,7 +11106,7 @@ def begin_cancel(self, resource_group_name: str, vm_scale_set_name: str, **kwarg _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -11373,7 +11157,7 @@ def _start_os_upgrade_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_rolling_upgrades_start_os_upgrade_request( @@ -11428,7 +11212,7 @@ def begin_start_os_upgrade( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -11479,7 +11263,7 @@ def _start_extension_upgrade_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_rolling_upgrades_start_extension_upgrade_request( @@ -11534,7 +11318,7 @@ def begin_start_extension_upgrade( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -11582,7 +11366,7 @@ def get_latest( :param vm_scale_set_name: The name of the VM scale set. Required. :type vm_scale_set_name: str :return: RollingUpgradeStatusInfo or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RollingUpgradeStatusInfo + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RollingUpgradeStatusInfo :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -11596,7 +11380,7 @@ def get_latest( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RollingUpgradeStatusInfo] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_rolling_upgrades_get_latest_request( @@ -11634,7 +11418,7 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_scale_set_vm_extensions` attribute. """ @@ -11642,10 +11426,10 @@ class VirtualMachineScaleSetVMExtensionsOperations: # pylint: disable=name-too- 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -11668,7 +11452,7 @@ def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -11743,14 +11527,14 @@ def begin_create_or_update( :param extension_parameters: Parameters supplied to the Create Virtual Machine Extension operation. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -11785,7 +11569,7 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -11812,17 +11596,17 @@ def begin_create_or_update( :param extension_parameters: Parameters supplied to the Create Virtual Machine Extension operation. Is either a VirtualMachineScaleSetVMExtension type or a IO[bytes] type. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSetVMExtension] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -11888,7 +11672,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -11963,14 +11747,14 @@ def begin_update( :param extension_parameters: Parameters supplied to the Update Virtual Machine Extension operation. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtensionUpdate + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtensionUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -12005,7 +11789,7 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -12033,17 +11817,17 @@ def begin_update( operation. Is either a VirtualMachineScaleSetVMExtensionUpdate type or a IO[bytes] type. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtensionUpdate or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtensionUpdate or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineScaleSetVMExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSetVMExtension] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -12103,7 +11887,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vm_extensions_delete_request( @@ -12162,7 +11946,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -12225,7 +12009,7 @@ def get( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineScaleSetVMExtension or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtension + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtension :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -12239,7 +12023,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetVMExtension] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vm_extensions_get_request( @@ -12294,7 +12078,7 @@ def list( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineScaleSetVMExtensionsListResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMExtensionsListResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMExtensionsListResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -12308,7 +12092,7 @@ def list( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetVMExtensionsListResult] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vm_extensions_list_request( @@ -12350,7 +12134,7 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_scale_set_vms` attribute. """ @@ -12358,10 +12142,10 @@ class VirtualMachineScaleSetVMsOperations: # pylint: disable=too-many-public-me 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _reimage_initial( @@ -12385,7 +12169,7 @@ def _reimage_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -12459,7 +12243,7 @@ def begin_reimage( :param vm_scale_set_vm_reimage_input: Parameters for the Reimaging Virtual machine in ScaleSet. Default value is None. :type vm_scale_set_vm_reimage_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMReimageParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMReimageParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -12521,7 +12305,7 @@ def begin_reimage( Is either a VirtualMachineScaleSetVMReimageParameters type or a IO[bytes] type. Default value is None. :type vm_scale_set_vm_reimage_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMReimageParameters or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMReimageParameters or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -12529,7 +12313,7 @@ def begin_reimage( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -12584,7 +12368,7 @@ def _reimage_all_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_reimage_all_request( @@ -12641,7 +12425,7 @@ def begin_reimage_all( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -12693,7 +12477,7 @@ def _approve_rolling_upgrade_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_approve_rolling_upgrade_request( @@ -12752,7 +12536,7 @@ def begin_approve_rolling_upgrade( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -12804,7 +12588,7 @@ def _deallocate_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_deallocate_request( @@ -12862,7 +12646,7 @@ def begin_deallocate( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -12922,7 +12706,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -12997,7 +12781,7 @@ def begin_update( :type instance_id: str :param parameters: Parameters supplied to the Update Virtual Machine Scale Sets VM operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -13012,7 +12796,7 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSetVM or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -13055,7 +12839,7 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSetVM or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -13082,7 +12866,7 @@ def begin_update( :type instance_id: str :param parameters: Parameters supplied to the Update Virtual Machine Scale Sets VM operation. Is either a VirtualMachineScaleSetVM type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM or IO[bytes] :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -13094,13 +12878,13 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineScaleSetVM or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineScaleSetVM] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -13167,7 +12951,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_delete_request( @@ -13233,7 +13017,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -13292,12 +13076,10 @@ def get( :type instance_id: str :keyword expand: The expand expression to apply on the operation. 'InstanceView' will retrieve the instance view of the virtual machine. 'UserData' will retrieve the UserData of the virtual - machine. 'resiliencyView' will retrieve the instance view of the Virtual machine (if - applicable) and include 'resilientVMDeletionStatus' as part of it. Known values are: - "instanceView", "userData", and "resiliencyView". Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.InstanceViewTypes + machine. Known values are: "instanceView" and "userData". Default value is None. + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.InstanceViewTypes :return: VirtualMachineScaleSetVM or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13311,7 +13093,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetVM] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_get_request( @@ -13357,7 +13139,7 @@ def get_instance_view( :param instance_id: The instance ID of the virtual machine. Required. :type instance_id: str :return: VirtualMachineScaleSetVMInstanceView or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVMInstanceView + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVMInstanceView :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13371,7 +13153,7 @@ def get_instance_view( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetVMInstanceView] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_get_instance_view_request( @@ -13433,13 +13215,13 @@ def list( :return: An iterator like instance of either VirtualMachineScaleSetVM or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineScaleSetVM] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineScaleSetVM] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineScaleSetVMListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -13527,7 +13309,7 @@ def _power_off_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_power_off_request( @@ -13597,7 +13379,7 @@ def begin_power_off( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -13650,7 +13432,7 @@ def _restart_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_restart_request( @@ -13706,7 +13488,7 @@ def begin_restart( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -13758,7 +13540,7 @@ def _start_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_start_request( @@ -13814,7 +13596,7 @@ def begin_start( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -13866,7 +13648,7 @@ def _redeploy_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_redeploy_request( @@ -13923,7 +13705,7 @@ def begin_redeploy( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -13985,7 +13767,7 @@ def retrieve_boot_diagnostics_data( with a default expiration duration of 120 minutes. Default value is None. :paramtype sas_uri_expiration_time_in_minutes: int :return: RetrieveBootDiagnosticsDataResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RetrieveBootDiagnosticsDataResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RetrieveBootDiagnosticsDataResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -13999,7 +13781,7 @@ def retrieve_boot_diagnostics_data( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RetrieveBootDiagnosticsDataResult] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_retrieve_boot_diagnostics_data_request( @@ -14046,7 +13828,7 @@ def _perform_maintenance_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_perform_maintenance_request( @@ -14102,7 +13884,7 @@ def begin_perform_maintenance( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -14167,7 +13949,7 @@ def simulate_eviction( # pylint: disable=inconsistent-return-statements _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vms_simulate_eviction_request( @@ -14214,7 +13996,7 @@ def _attach_detach_data_disks_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -14288,13 +14070,13 @@ def begin_attach_detach_data_disks( :type instance_id: str :param parameters: Parameters supplied to the attach and detach data disks operation on a Virtual Machine Scale Sets VM. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AttachDetachDataDisksRequest + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AttachDetachDataDisksRequest :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either StorageProfile or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14325,7 +14107,7 @@ def begin_attach_detach_data_disks( :paramtype content_type: str :return: An instance of LROPoller that returns either StorageProfile or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14349,17 +14131,17 @@ def begin_attach_detach_data_disks( :param parameters: Parameters supplied to the attach and detach data disks operation on a Virtual Machine Scale Sets VM. Is either a AttachDetachDataDisksRequest type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AttachDetachDataDisksRequest or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AttachDetachDataDisksRequest or IO[bytes] :return: An instance of LROPoller that returns either StorageProfile or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.StorageProfile] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -14425,7 +14207,7 @@ def _run_command_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -14494,13 +14276,13 @@ def begin_run_command( :param instance_id: The instance ID of the virtual machine. Required. :type instance_id: str :param parameters: Parameters supplied to the Run command operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RunCommandInput + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RunCommandInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either RunCommandResult or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14530,7 +14312,7 @@ def begin_run_command( :paramtype content_type: str :return: An instance of LROPoller that returns either RunCommandResult or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14553,16 +14335,16 @@ def begin_run_command( :type instance_id: str :param parameters: Parameters supplied to the Run command operation. Is either a RunCommandInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RunCommandInput or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RunCommandInput or IO[bytes] :return: An instance of LROPoller that returns either RunCommandResult or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.RunCommandResult] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -14616,7 +14398,7 @@ class VirtualMachineExtensionsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_extensions` attribute. """ @@ -14624,10 +14406,10 @@ class VirtualMachineExtensionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -14649,7 +14431,7 @@ def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -14720,14 +14502,14 @@ def begin_create_or_update( :type vm_extension_name: str :param extension_parameters: Parameters supplied to the Create Virtual Machine Extension operation. Required. - :type extension_parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension + :type extension_parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14760,7 +14542,7 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14784,18 +14566,18 @@ def begin_create_or_update( :type vm_extension_name: str :param extension_parameters: Parameters supplied to the Create Virtual Machine Extension operation. Is either a VirtualMachineExtension type or a IO[bytes] type. Required. - :type extension_parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension or + :type extension_parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineExtension] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -14859,7 +14641,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -14931,14 +14713,14 @@ def begin_update( :param extension_parameters: Parameters supplied to the Update Virtual Machine Extension operation. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionUpdate + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14971,7 +14753,7 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -14996,17 +14778,17 @@ def begin_update( :param extension_parameters: Parameters supplied to the Update Virtual Machine Extension operation. Is either a VirtualMachineExtensionUpdate type or a IO[bytes] type. Required. :type extension_parameters: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionUpdate or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionUpdate or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineExtension or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineExtension] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -15065,7 +14847,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_extensions_delete_request( @@ -15122,7 +14904,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -15181,7 +14963,7 @@ def get( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineExtension or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtension + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtension :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -15195,7 +14977,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineExtension] = kwargs.pop("cls", None) _request = build_virtual_machine_extensions_get_request( @@ -15241,7 +15023,7 @@ def list( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineExtensionsListResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionsListResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionsListResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -15255,7 +15037,7 @@ def list( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineExtensionsListResult] = kwargs.pop("cls", None) _request = build_virtual_machine_extensions_list_request( @@ -15294,7 +15076,7 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machines` attribute. """ @@ -15302,10 +15084,10 @@ class VirtualMachinesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -15316,13 +15098,13 @@ def list_by_location(self, location: str, **kwargs: Any) -> Iterable["_models.Vi Required. :type location: str :return: An iterator like instance of either VirtualMachine or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -15404,7 +15186,7 @@ def _capture_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -15470,14 +15252,14 @@ def begin_capture( :param vm_name: The name of the virtual machine. Required. :type vm_name: str :param parameters: Parameters supplied to the Capture Virtual Machine operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineCaptureParameters + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineCaptureParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineCaptureResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineCaptureResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineCaptureResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15506,7 +15288,7 @@ def begin_capture( :return: An instance of LROPoller that returns either VirtualMachineCaptureResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineCaptureResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineCaptureResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15527,18 +15309,18 @@ def begin_capture( :type vm_name: str :param parameters: Parameters supplied to the Capture Virtual Machine operation. Is either a VirtualMachineCaptureParameters type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineCaptureParameters or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineCaptureParameters or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineCaptureResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineCaptureResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineCaptureResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineCaptureResult] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -15605,7 +15387,7 @@ def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -15675,7 +15457,7 @@ def begin_create_or_update( :param vm_name: The name of the virtual machine. Required. :type vm_name: str :param parameters: Parameters supplied to the Create Virtual Machine operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachine + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachine :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -15689,7 +15471,7 @@ def begin_create_or_update( :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachine or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15727,7 +15509,7 @@ def begin_create_or_update( :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachine or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15751,7 +15533,7 @@ def begin_create_or_update( :type vm_name: str :param parameters: Parameters supplied to the Create Virtual Machine operation. Is either a VirtualMachine type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachine or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachine or IO[bytes] :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -15762,13 +15544,13 @@ def begin_create_or_update( :paramtype if_none_match: str :return: An instance of LROPoller that returns either VirtualMachine or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachine] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -15835,7 +15617,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -15904,7 +15686,7 @@ def begin_update( :param vm_name: The name of the virtual machine. Required. :type vm_name: str :param parameters: Parameters supplied to the Update Virtual Machine operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineUpdate :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -15918,7 +15700,7 @@ def begin_update( :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachine or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15955,7 +15737,7 @@ def begin_update( :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachine or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -15978,7 +15760,7 @@ def begin_update( :type vm_name: str :param parameters: Parameters supplied to the Update Virtual Machine operation. Is either a VirtualMachineUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineUpdate or IO[bytes] :keyword if_match: The ETag of the transformation. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -15989,13 +15771,13 @@ def begin_update( :paramtype if_none_match: str :return: An instance of LROPoller that returns either VirtualMachine or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachine] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -16055,7 +15837,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_delete_request( @@ -16102,14 +15884,8 @@ def begin_delete( :type resource_group_name: str :param vm_name: The name of the virtual machine. Required. :type vm_name: str - :keyword force_deletion: Optional parameter to force delete virtual machines. - NOTE: As of api-version 2024-11-01, we are rolling out a feature where if the forceDeletion - parameter is unspecified OR not explicitly set to false, AND all of the VM's attached disks - including the OS disk are marked with the delete option, then the VM will be force deleted. For - more details on how to configure delete options for a VM's resources, see `Delete a VM and - attached resources `_. To - avoid defaulting to force delete, ensure that the forceDeletion parameter is explicitly set to - false. This feature is expected to rollout by end of March 2025. Default value is None. + :keyword force_deletion: Optional parameter to force delete virtual machines. Default value is + None. :paramtype force_deletion: bool :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] @@ -16118,7 +15894,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -16175,10 +15951,10 @@ def get( snapshot of the runtime properties of the virtual machine that is managed by the platform and can change outside of control plane operations. 'UserData' retrieves the UserData property as part of the VM model view that was provided by the user during the VM Create/Update operation. - Known values are: "instanceView", "userData", and "resiliencyView". Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.InstanceViewTypes + Known values are: "instanceView" and "userData". Default value is None. + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.InstanceViewTypes :return: VirtualMachine or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachine + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachine :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -16192,7 +15968,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachine] = kwargs.pop("cls", None) _request = build_virtual_machines_get_request( @@ -16235,7 +16011,7 @@ def instance_view( :param vm_name: The name of the virtual machine. Required. :type vm_name: str :return: VirtualMachineInstanceView or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstanceView + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstanceView :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -16249,7 +16025,7 @@ def instance_view( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineInstanceView] = kwargs.pop("cls", None) _request = build_virtual_machines_instance_view_request( @@ -16294,7 +16070,7 @@ def _convert_to_managed_disks_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_convert_to_managed_disks_request( @@ -16346,7 +16122,7 @@ def begin_convert_to_managed_disks(self, resource_group_name: str, vm_name: str, _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -16397,7 +16173,7 @@ def _deallocate_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_deallocate_request( @@ -16454,7 +16230,7 @@ def begin_deallocate( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -16522,7 +16298,7 @@ def generalize( # pylint: disable=inconsistent-return-statements _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_virtual_machines_generalize_request( @@ -16558,7 +16334,6 @@ def list( expand: Optional[Union[str, _models.ExpandTypeForListVMs]] = None, **kwargs: Any ) -> Iterable["_models.VirtualMachine"]: - # pylint: disable=line-too-long """Lists all of the virtual machines in the specified resource group. Use the nextLink property in the response to get the next page of virtual machines. @@ -16572,15 +16347,15 @@ def list( :keyword expand: The expand expression to apply on operation. 'instanceView' enables fetching run time status of all Virtual Machines, this can only be specified if a valid $filter option is specified. "instanceView" Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.ExpandTypeForListVMs + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.ExpandTypeForListVMs :return: An iterator like instance of either VirtualMachine or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -16655,7 +16430,6 @@ def list_all( expand: Optional[Union[str, _models.ExpandTypesForListVMs]] = None, **kwargs: Any ) -> Iterable["_models.VirtualMachine"]: - # pylint: disable=line-too-long """Lists all of the virtual machines in the specified subscription. Use the nextLink property in the response to get the next page of virtual machines. @@ -16670,15 +16444,15 @@ def list_all( :keyword expand: The expand expression to apply on operation. 'instanceView' enables fetching run time status of all Virtual Machines, this can only be specified if a valid $filter option is specified. "instanceView" Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.ExpandTypesForListVMs + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.ExpandTypesForListVMs :return: An iterator like instance of either VirtualMachine or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachine] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachine] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -16756,13 +16530,13 @@ def list_available_sizes( :param vm_name: The name of the virtual machine. Required. :type vm_name: str :return: An iterator like instance of either VirtualMachineSize or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSize] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSize] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineSizeListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -16841,7 +16615,7 @@ def _power_off_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_power_off_request( @@ -16902,7 +16676,7 @@ def begin_power_off( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -16952,7 +16726,7 @@ def _reapply_initial(self, resource_group_name: str, vm_name: str, **kwargs: Any _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_reapply_request( @@ -17003,7 +16777,7 @@ def begin_reapply(self, resource_group_name: str, vm_name: str, **kwargs: Any) - _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -17052,7 +16826,7 @@ def _restart_initial(self, resource_group_name: str, vm_name: str, **kwargs: Any _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_restart_request( @@ -17103,7 +16877,7 @@ def begin_restart(self, resource_group_name: str, vm_name: str, **kwargs: Any) - _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -17152,7 +16926,7 @@ def _start_initial(self, resource_group_name: str, vm_name: str, **kwargs: Any) _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_start_request( @@ -17203,7 +16977,7 @@ def begin_start(self, resource_group_name: str, vm_name: str, **kwargs: Any) -> _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -17252,7 +17026,7 @@ def _redeploy_initial(self, resource_group_name: str, vm_name: str, **kwargs: An _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_redeploy_request( @@ -17303,7 +17077,7 @@ def begin_redeploy(self, resource_group_name: str, vm_name: str, **kwargs: Any) _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -17358,7 +17132,7 @@ def _reimage_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -17432,7 +17206,7 @@ def begin_reimage( :type vm_name: str :param parameters: Parameters supplied to the Reimage Virtual Machine operation. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineReimageParameters + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineReimageParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -17494,7 +17268,7 @@ def begin_reimage( :type vm_name: str :param parameters: Parameters supplied to the Reimage Virtual Machine operation. Is either a VirtualMachineReimageParameters type or a IO[bytes] type. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineReimageParameters or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineReimageParameters or IO[bytes] :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] @@ -17503,7 +17277,7 @@ def begin_reimage( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -17563,7 +17337,7 @@ def retrieve_boot_diagnostics_data( with a default expiration duration of 120 minutes. Default value is None. :paramtype sas_uri_expiration_time_in_minutes: int :return: RetrieveBootDiagnosticsDataResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RetrieveBootDiagnosticsDataResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RetrieveBootDiagnosticsDataResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -17577,7 +17351,7 @@ def retrieve_boot_diagnostics_data( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RetrieveBootDiagnosticsDataResult] = kwargs.pop("cls", None) _request = build_virtual_machines_retrieve_boot_diagnostics_data_request( @@ -17621,7 +17395,7 @@ def _perform_maintenance_initial(self, resource_group_name: str, vm_name: str, * _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_perform_maintenance_request( @@ -17672,7 +17446,7 @@ def begin_perform_maintenance(self, resource_group_name: str, vm_name: str, **kw _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -17734,7 +17508,7 @@ def simulate_eviction( # pylint: disable=inconsistent-return-statements _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_virtual_machines_simulate_eviction_request( @@ -17773,7 +17547,7 @@ def _assess_patches_initial(self, resource_group_name: str, vm_name: str, **kwar _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machines_assess_patches_request( @@ -17822,13 +17596,13 @@ def begin_assess_patches( :return: An instance of LROPoller that returns either VirtualMachineAssessPatchesResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineAssessPatchesResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineAssessPatchesResult] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineAssessPatchesResult] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -17889,7 +17663,7 @@ def _install_patches_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -17956,14 +17730,14 @@ def begin_install_patches( :param install_patches_input: Input for InstallPatches as directly received by the API. Required. :type install_patches_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstallPatchesParameters + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstallPatchesParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineInstallPatchesResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstallPatchesResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstallPatchesResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -17992,7 +17766,7 @@ def begin_install_patches( :return: An instance of LROPoller that returns either VirtualMachineInstallPatchesResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstallPatchesResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstallPatchesResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -18013,17 +17787,17 @@ def begin_install_patches( :param install_patches_input: Input for InstallPatches as directly received by the API. Is either a VirtualMachineInstallPatchesParameters type or a IO[bytes] type. Required. :type install_patches_input: - ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstallPatchesParameters or IO[bytes] + ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstallPatchesParameters or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineInstallPatchesResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineInstallPatchesResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineInstallPatchesResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineInstallPatchesResult] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -18087,7 +17861,7 @@ def _attach_detach_data_disks_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -18157,13 +17931,13 @@ def begin_attach_detach_data_disks( :type vm_name: str :param parameters: Parameters supplied to the attach and detach data disks operation on the virtual machine. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AttachDetachDataDisksRequest + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AttachDetachDataDisksRequest :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either StorageProfile or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -18191,7 +17965,7 @@ def begin_attach_detach_data_disks( :paramtype content_type: str :return: An instance of LROPoller that returns either StorageProfile or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -18211,17 +17985,17 @@ def begin_attach_detach_data_disks( :type vm_name: str :param parameters: Parameters supplied to the attach and detach data disks operation on the virtual machine. Is either a AttachDetachDataDisksRequest type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AttachDetachDataDisksRequest or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AttachDetachDataDisksRequest or IO[bytes] :return: An instance of LROPoller that returns either StorageProfile or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.StorageProfile] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.StorageProfile] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.StorageProfile] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -18267,11 +18041,11 @@ def get_long_running_output(pipeline_response): self._client, raw_result, get_long_running_output, polling_method # type: ignore ) - def _migrate_to_vm_scale_set_initial( + def _run_command_initial( self, resource_group_name: str, vm_name: str, - parameters: Optional[Union[_models.MigrateVMToVirtualMachineScaleSetInput, IO[bytes]]] = None, + parameters: Union[_models.RunCommandInput, IO[bytes]], **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { @@ -18285,7 +18059,7 @@ def _migrate_to_vm_scale_set_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -18295,12 +18069,9 @@ def _migrate_to_vm_scale_set_initial( if isinstance(parameters, (IOBase, bytes)): _content = parameters else: - if parameters is not None: - _json = self._serialize.body(parameters, "MigrateVMToVirtualMachineScaleSetInput") - else: - _json = None + _json = self._serialize.body(parameters, "RunCommandInput") - _request = build_virtual_machines_migrate_to_vm_scale_set_request( + _request = build_virtual_machines_run_command_request( resource_group_name=resource_group_name, vm_name=vm_name, subscription_id=self._config.subscription_id, @@ -18321,7 +18092,7 @@ def _migrate_to_vm_scale_set_initial( response = pipeline_response.http_response - if response.status_code not in [202]: + if response.status_code not in [200, 202]: try: response.read() # Load the body in memory and close the socket except (StreamConsumedError, StreamClosedError): @@ -18337,92 +18108,92 @@ def _migrate_to_vm_scale_set_initial( return deserialized # type: ignore @overload - def begin_migrate_to_vm_scale_set( + def begin_run_command( self, resource_group_name: str, vm_name: str, - parameters: Optional[_models.MigrateVMToVirtualMachineScaleSetInput] = None, + parameters: _models.RunCommandInput, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[None]: - """Migrate a virtual machine from availability set to Flexible Virtual Machine Scale Set. + ) -> LROPoller[_models.RunCommandResult]: + """Run command on the VM. :param resource_group_name: The name of the resource group. Required. :type resource_group_name: str :param vm_name: The name of the virtual machine. Required. :type vm_name: str - :param parameters: Parameters supplied to the Migrate Virtual Machine operation. Default value - is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateVMToVirtualMachineScaleSetInput + :param parameters: Parameters supplied to the Run command operation. Required. + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RunCommandInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[None] + :return: An instance of LROPoller that returns either RunCommandResult or the result of + cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_migrate_to_vm_scale_set( + def begin_run_command( self, resource_group_name: str, vm_name: str, - parameters: Optional[IO[bytes]] = None, + parameters: IO[bytes], *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[None]: - """Migrate a virtual machine from availability set to Flexible Virtual Machine Scale Set. + ) -> LROPoller[_models.RunCommandResult]: + """Run command on the VM. :param resource_group_name: The name of the resource group. Required. :type resource_group_name: str :param vm_name: The name of the virtual machine. Required. :type vm_name: str - :param parameters: Parameters supplied to the Migrate Virtual Machine operation. Default value - is None. + :param parameters: Parameters supplied to the Run command operation. Required. :type parameters: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/json". + Known values are: 'application/json', 'text/json'. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[None] + :return: An instance of LROPoller that returns either RunCommandResult or the result of + cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace - def begin_migrate_to_vm_scale_set( + def begin_run_command( self, resource_group_name: str, vm_name: str, - parameters: Optional[Union[_models.MigrateVMToVirtualMachineScaleSetInput, IO[bytes]]] = None, + parameters: Union[_models.RunCommandInput, IO[bytes]], **kwargs: Any - ) -> LROPoller[None]: - """Migrate a virtual machine from availability set to Flexible Virtual Machine Scale Set. + ) -> LROPoller[_models.RunCommandResult]: + """Run command on the VM. :param resource_group_name: The name of the resource group. Required. :type resource_group_name: str :param vm_name: The name of the virtual machine. Required. :type vm_name: str - :param parameters: Parameters supplied to the Migrate Virtual Machine operation. Is either a - MigrateVMToVirtualMachineScaleSetInput type or a IO[bytes] type. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateVMToVirtualMachineScaleSetInput - or IO[bytes] - :return: An instance of LROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[None] + :param parameters: Parameters supplied to the Run command operation. Is either a + RunCommandInput type or a IO[bytes] type. Required. + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RunCommandInput or IO[bytes] + :return: An instance of LROPoller that returns either RunCommandResult or the result of + cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.RunCommandResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[None] = kwargs.pop("cls", None) + cls: ClsType[_models.RunCommandResult] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) if cont_token is None: - raw_result = self._migrate_to_vm_scale_set_initial( + raw_result = self._run_command_initial( resource_group_name=resource_group_name, vm_name=vm_name, parameters=parameters, @@ -18436,215 +18207,30 @@ def begin_migrate_to_vm_scale_set( raw_result.http_response.read() # type: ignore kwargs.pop("error_map", None) - def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + def get_long_running_output(pipeline_response): + deserialized = self._deserialize("RunCommandResult", pipeline_response.http_response) if cls: - return cls(pipeline_response, None, {}) # type: ignore + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized if polling is True: - polling_method: PollingMethod = cast(PollingMethod, ARMPolling(lro_delay, **kwargs)) + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, lro_options={"final-state-via": "location"}, **kwargs) + ) elif polling is False: polling_method = cast(PollingMethod, NoPolling()) else: polling_method = polling if cont_token: - return LROPoller[None].from_continuation_token( + return LROPoller[_models.RunCommandResult].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore - - def _run_command_initial( - self, - resource_group_name: str, - vm_name: str, - parameters: Union[_models.RunCommandInput, IO[bytes]], - **kwargs: Any - ) -> Iterator[bytes]: - 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._api_version or "2024-11-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - - content_type = content_type or "application/json" - _json = None - _content = None - if isinstance(parameters, (IOBase, bytes)): - _content = parameters - else: - _json = self._serialize.body(parameters, "RunCommandInput") - - _request = build_virtual_machines_run_command_request( - resource_group_name=resource_group_name, - vm_name=vm_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) - - _decompress = kwargs.pop("decompress", True) - _stream = True - 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, 202]: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) - - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - - return deserialized # type: ignore - - @overload - def begin_run_command( - self, - resource_group_name: str, - vm_name: str, - parameters: _models.RunCommandInput, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.RunCommandResult]: - """Run command on the VM. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param vm_name: The name of the virtual machine. Required. - :type vm_name: str - :param parameters: Parameters supplied to the Run command operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RunCommandInput - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns either RunCommandResult or the result of - cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_run_command( - self, - resource_group_name: str, - vm_name: str, - parameters: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.RunCommandResult]: - """Run command on the VM. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param vm_name: The name of the virtual machine. Required. - :type vm_name: str - :param parameters: Parameters supplied to the Run command operation. Required. - :type parameters: IO[bytes] - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Known values are: 'application/json', 'text/json'. Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns either RunCommandResult or the result of - cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @distributed_trace - def begin_run_command( - self, - resource_group_name: str, - vm_name: str, - parameters: Union[_models.RunCommandInput, IO[bytes]], - **kwargs: Any - ) -> LROPoller[_models.RunCommandResult]: - """Run command on the VM. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param vm_name: The name of the virtual machine. Required. - :type vm_name: str - :param parameters: Parameters supplied to the Run command operation. Is either a - RunCommandInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RunCommandInput or IO[bytes] - :return: An instance of LROPoller that returns either RunCommandResult or the result of - cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.RunCommandResult] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _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._api_version or "2024-11-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.RunCommandResult] = kwargs.pop("cls", None) - polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) - lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) - cont_token: Optional[str] = kwargs.pop("continuation_token", None) - if cont_token is None: - raw_result = self._run_command_initial( - resource_group_name=resource_group_name, - vm_name=vm_name, - parameters=parameters, - api_version=api_version, - content_type=content_type, - cls=lambda x, y, z: x, - headers=_headers, - params=_params, - **kwargs - ) - raw_result.http_response.read() # type: ignore - kwargs.pop("error_map", None) - - def get_long_running_output(pipeline_response): - deserialized = self._deserialize("RunCommandResult", pipeline_response.http_response) - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - if polling is True: - polling_method: PollingMethod = cast( - PollingMethod, ARMPolling(lro_delay, lro_options={"final-state-via": "location"}, **kwargs) - ) - elif polling is False: - polling_method = cast(PollingMethod, NoPolling()) - else: - polling_method = polling - if cont_token: - return LROPoller[_models.RunCommandResult].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return LROPoller[_models.RunCommandResult]( - self._client, raw_result, get_long_running_output, polling_method # type: ignore - ) + return LROPoller[_models.RunCommandResult]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) class VirtualMachineImagesOperations: @@ -18653,7 +18239,7 @@ class VirtualMachineImagesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_images` attribute. """ @@ -18661,10 +18247,10 @@ class VirtualMachineImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -18684,7 +18270,7 @@ def get( :param version: A valid image SKU version. Required. :type version: str :return: VirtualMachineImage or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImage + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImage :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -18698,7 +18284,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineImage] = kwargs.pop("cls", None) _request = build_virtual_machine_images_get_request( @@ -18763,7 +18349,7 @@ def list( :keyword orderby: Default value is None. :paramtype orderby: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -18777,7 +18363,7 @@ def list( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_list_request( @@ -18824,7 +18410,7 @@ def list_offers( :param publisher_name: A valid image publisher. Required. :type publisher_name: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -18838,7 +18424,7 @@ def list_offers( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_list_offers_request( @@ -18876,7 +18462,7 @@ def list_publishers(self, location: str, **kwargs: Any) -> List[_models.VirtualM :param location: The name of a supported Azure region. Required. :type location: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -18890,7 +18476,7 @@ def list_publishers(self, location: str, **kwargs: Any) -> List[_models.VirtualM _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_list_publishers_request( @@ -18933,7 +18519,7 @@ def list_skus( :param offer: A valid image publisher offer. Required. :type offer: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -18947,7 +18533,7 @@ def list_skus( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_list_skus_request( @@ -18988,7 +18574,7 @@ def list_by_edge_zone(self, location: str, edge_zone: str, **kwargs: Any) -> _mo :param edge_zone: The name of the edge zone. Required. :type edge_zone: str :return: VmImagesInEdgeZoneListResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VmImagesInEdgeZoneListResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VmImagesInEdgeZoneListResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19002,7 +18588,7 @@ def list_by_edge_zone(self, location: str, edge_zone: str, **kwargs: Any) -> _mo _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VmImagesInEdgeZoneListResult] = kwargs.pop("cls", None) _request = build_virtual_machine_images_list_by_edge_zone_request( @@ -19033,46 +18619,49 @@ def list_by_edge_zone(self, location: str, edge_zone: str, **kwargs: Any) -> _mo return deserialized # type: ignore + +class VirtualMachineImagesEdgeZoneOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s + :attr:`virtual_machine_images_edge_zone` 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: ComputeManagementClientConfiguration = 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") + self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") + @distributed_trace - def list_with_properties( - self, - location: str, - publisher_name: str, - offer: str, - skus: str, - *, - expand: Union[str, _models.Expand], - top: Optional[int] = None, - orderby: Optional[str] = None, - **kwargs: Any - ) -> Iterable["_models.VirtualMachineImage"]: - """list_with_properties. + def get( + self, location: str, edge_zone: str, publisher_name: str, offer: str, skus: str, version: str, **kwargs: Any + ) -> _models.VirtualMachineImage: + """Gets a virtual machine image in an edge zone. :param location: The name of a supported Azure region. Required. :type location: str + :param edge_zone: The name of the edge zone. Required. + :type edge_zone: str :param publisher_name: A valid image publisher. Required. :type publisher_name: str :param offer: A valid image publisher offer. Required. :type offer: str :param skus: A valid image SKU. Required. :type skus: str - :keyword expand: The expand expression to apply on the operation. "Properties" Required. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.Expand - :keyword top: Default value is None. - :paramtype top: int - :keyword orderby: Default value is None. - :paramtype orderby: str - :return: An iterator like instance of either VirtualMachineImage or the result of cls(response) - :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImage] + :param version: A valid image SKU version. Required. + :type version: str + :return: VirtualMachineImage or the result of cls(response) + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImage :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._api_version or "2024-11-01")) - cls: ClsType[_models.VirtualMachineImagesWithPropertiesListResult] = kwargs.pop("cls", None) - error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -19081,121 +18670,11 @@ def list_with_properties( } error_map.update(kwargs.pop("error_map", {}) or {}) - def prepare_request(next_link=None): - if not next_link: + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - _request = build_virtual_machine_images_list_with_properties_request( - location=location, - publisher_name=publisher_name, - offer=offer, - skus=skus, - subscription_id=self._config.subscription_id, - expand=expand, - top=top, - orderby=orderby, - 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._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("VirtualMachineImagesWithPropertiesListResult", 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) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - -class VirtualMachineImagesEdgeZoneOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s - :attr:`virtual_machine_images_edge_zone` attribute. - """ - - models = _models - - 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._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") - - @distributed_trace - def get( - self, location: str, edge_zone: str, publisher_name: str, offer: str, skus: str, version: str, **kwargs: Any - ) -> _models.VirtualMachineImage: - """Gets a virtual machine image in an edge zone. - - :param location: The name of a supported Azure region. Required. - :type location: str - :param edge_zone: The name of the edge zone. Required. - :type edge_zone: str - :param publisher_name: A valid image publisher. Required. - :type publisher_name: str - :param offer: A valid image publisher offer. Required. - :type offer: str - :param skus: A valid image SKU. Required. - :type skus: str - :param version: A valid image SKU version. Required. - :type version: str - :return: VirtualMachineImage or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImage - :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._api_version or "2024-11-01")) - cls: ClsType[_models.VirtualMachineImage] = kwargs.pop("cls", None) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) + cls: ClsType[_models.VirtualMachineImage] = kwargs.pop("cls", None) _request = build_virtual_machine_images_edge_zone_get_request( location=location, @@ -19265,7 +18744,7 @@ def list( Default value is None. :paramtype orderby: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19279,7 +18758,7 @@ def list( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_edge_zone_list_request( @@ -19330,7 +18809,7 @@ def list_offers( :param publisher_name: A valid image publisher. Required. :type publisher_name: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19344,7 +18823,7 @@ def list_offers( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_edge_zone_list_offers_request( @@ -19387,7 +18866,7 @@ def list_publishers( :param edge_zone: The name of the edge zone. Required. :type edge_zone: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19401,7 +18880,7 @@ def list_publishers( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_edge_zone_list_publishers_request( @@ -19448,7 +18927,7 @@ def list_skus( :param offer: A valid image publisher offer. Required. :type offer: str :return: list of VirtualMachineImageResource or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineImageResource] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineImageResource] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19462,7 +18941,7 @@ def list_skus( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineImageResource]] = kwargs.pop("cls", None) _request = build_virtual_machine_images_edge_zone_list_skus_request( @@ -19502,7 +18981,7 @@ class VirtualMachineExtensionImagesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_extension_images` attribute. """ @@ -19510,10 +18989,10 @@ class VirtualMachineExtensionImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -19531,7 +19010,7 @@ def get( :param version: Required. :type version: str :return: VirtualMachineExtensionImage or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionImage + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionImage :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19545,7 +19024,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineExtensionImage] = kwargs.pop("cls", None) _request = build_virtual_machine_extension_images_get_request( @@ -19589,7 +19068,7 @@ def list_types( :param publisher_name: Required. :type publisher_name: str :return: list of VirtualMachineExtensionImage or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionImage] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionImage] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19603,7 +19082,7 @@ def list_types( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineExtensionImage]] = kwargs.pop("cls", None) _request = build_virtual_machine_extension_images_list_types_request( @@ -19661,7 +19140,7 @@ def list_versions( :keyword orderby: Default value is None. :paramtype orderby: str :return: list of VirtualMachineExtensionImage or the result of cls(response) - :rtype: list[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineExtensionImage] + :rtype: list[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineExtensionImage] :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19675,7 +19154,7 @@ def list_versions( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[List[_models.VirtualMachineExtensionImage]] = kwargs.pop("cls", None) _request = build_virtual_machine_extension_images_list_versions_request( @@ -19717,7 +19196,7 @@ class AvailabilitySetsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`availability_sets` attribute. """ @@ -19725,10 +19204,10 @@ class AvailabilitySetsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -19748,12 +19227,12 @@ def create_or_update( :param availability_set_name: The name of the availability set. Required. :type availability_set_name: str :param parameters: Parameters supplied to the Create Availability Set operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ @@ -19779,7 +19258,7 @@ def create_or_update( Default value is "application/json". :paramtype content_type: str :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ @@ -19799,9 +19278,9 @@ def create_or_update( :type availability_set_name: str :param parameters: Parameters supplied to the Create Availability Set operation. Is either a AvailabilitySet type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet or IO[bytes] :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19815,7 +19294,7 @@ def create_or_update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.AvailabilitySet] = kwargs.pop("cls", None) @@ -19875,12 +19354,12 @@ def update( :param availability_set_name: The name of the availability set. Required. :type availability_set_name: str :param parameters: Parameters supplied to the Update Availability Set operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySetUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySetUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ @@ -19906,7 +19385,7 @@ def update( Default value is "application/json". :paramtype content_type: str :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ @@ -19926,9 +19405,9 @@ def update( :type availability_set_name: str :param parameters: Parameters supplied to the Update Availability Set operation. Is either a AvailabilitySetUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySetUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySetUpdate or IO[bytes] :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -19942,7 +19421,7 @@ def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.AvailabilitySet] = kwargs.pop("cls", None) @@ -20010,7 +19489,7 @@ def delete( # pylint: disable=inconsistent-return-statements _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_availability_sets_delete_request( @@ -20046,7 +19525,7 @@ def get(self, resource_group_name: str, availability_set_name: str, **kwargs: An :param availability_set_name: The name of the availability set. Required. :type availability_set_name: str :return: AvailabilitySet or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet + :rtype: ~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -20060,7 +19539,7 @@ def get(self, resource_group_name: str, availability_set_name: str, **kwargs: An _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.AvailabilitySet] = kwargs.pop("cls", None) _request = build_availability_sets_get_request( @@ -20101,13 +19580,13 @@ def list_by_subscription( 'virtualMachines/$ref'. Default value is None. :paramtype expand: str :return: An iterator like instance of either AvailabilitySet or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.AvailabilitySetListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -20171,486 +19650,22 @@ def get_next(next_link=None): return ItemPaged(get_next, extract_data) - @distributed_trace - def list(self, resource_group_name: str, **kwargs: Any) -> Iterable["_models.AvailabilitySet"]: - """Lists all availability sets in a resource group. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :return: An iterator like instance of either AvailabilitySet or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.AvailabilitySet] - :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._api_version or "2024-11-01")) - cls: ClsType[_models.AvailabilitySetListResult] = 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_availability_sets_list_request( - resource_group_name=resource_group_name, - 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._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("AvailabilitySetListResult", 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) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - @distributed_trace - def list_available_sizes( - self, resource_group_name: str, availability_set_name: str, **kwargs: Any - ) -> Iterable["_models.VirtualMachineSize"]: - """Lists all available virtual machine sizes that can be used to create a new virtual machine in - an existing availability set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :return: An iterator like instance of either VirtualMachineSize or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineSize] - :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._api_version or "2024-11-01")) - cls: ClsType[_models.VirtualMachineSizeListResult] = 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_availability_sets_list_available_sizes_request( - resource_group_name=resource_group_name, - availability_set_name=availability_set_name, - 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._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("VirtualMachineSizeListResult", pipeline_response) - list_of_elem = deserialized.value - if cls: - 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) - - _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) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - @overload - def start_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: _models.MigrateToVirtualMachineScaleSetInput, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> None: - """Start migration operation on an Availability Set to move its Virtual Machines to a Virtual - Machine Scale Set. This should be followed by a migrate operation on each Virtual Machine that - triggers a downtime on the Virtual Machine. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateToVirtualMachineScaleSetInput - :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 start_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> None: - """Start migration operation on an Availability Set to move its Virtual Machines to a Virtual - Machine Scale Set. This should be followed by a migrate operation on each Virtual Machine that - triggers a downtime on the Virtual Machine. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Required. - :type parameters: 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 start_migration_to_virtual_machine_scale_set( # pylint: disable=inconsistent-return-statements,name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Union[_models.MigrateToVirtualMachineScaleSetInput, IO[bytes]], - **kwargs: Any - ) -> None: - """Start migration operation on an Availability Set to move its Virtual Machines to a Virtual - Machine Scale Set. This should be followed by a migrate operation on each Virtual Machine that - triggers a downtime on the Virtual Machine. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. Is - either a MigrateToVirtualMachineScaleSetInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateToVirtualMachineScaleSetInput - 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._api_version or "2024-11-01")) - 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(parameters, (IOBase, bytes)): - _content = parameters - else: - _json = self._serialize.body(parameters, "MigrateToVirtualMachineScaleSetInput") - - _request = build_availability_sets_start_migration_to_virtual_machine_scale_set_request( - resource_group_name=resource_group_name, - availability_set_name=availability_set_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 [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - if cls: - return cls(pipeline_response, None, {}) # type: ignore - - @distributed_trace - def cancel_migration_to_virtual_machine_scale_set( # pylint: disable=inconsistent-return-statements,name-too-long - self, resource_group_name: str, availability_set_name: str, **kwargs: Any - ) -> None: - """Cancel the migration operation on an Availability Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_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._api_version or "2024-11-01")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_availability_sets_cancel_migration_to_virtual_machine_scale_set_request( - resource_group_name=resource_group_name, - availability_set_name=availability_set_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 [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - if cls: - return cls(pipeline_response, None, {}) # type: ignore - - @overload - def validate_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: _models.MigrateToVirtualMachineScaleSetInput, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> None: - """Validates that the Virtual Machines in the Availability Set can be migrated to the provided - Virtual Machine Scale Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateToVirtualMachineScaleSetInput - :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 validate_migration_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> None: - """Validates that the Virtual Machines in the Availability Set can be migrated to the provided - Virtual Machine Scale Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Required. - :type parameters: 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 validate_migration_to_virtual_machine_scale_set( # pylint: disable=inconsistent-return-statements,name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Union[_models.MigrateToVirtualMachineScaleSetInput, IO[bytes]], - **kwargs: Any - ) -> None: - """Validates that the Virtual Machines in the Availability Set can be migrated to the provided - Virtual Machine Scale Set. - - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. Is - either a MigrateToVirtualMachineScaleSetInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.MigrateToVirtualMachineScaleSetInput - 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._api_version or "2024-11-01")) - 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(parameters, (IOBase, bytes)): - _content = parameters - else: - _json = self._serialize.body(parameters, "MigrateToVirtualMachineScaleSetInput") - - _request = build_availability_sets_validate_migration_to_virtual_machine_scale_set_request( - resource_group_name=resource_group_name, - availability_set_name=availability_set_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 + @distributed_trace + def list(self, resource_group_name: str, **kwargs: Any) -> Iterable["_models.AvailabilitySet"]: + """Lists all availability sets in a resource group. - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) + :param resource_group_name: The name of the resource group. Required. + :type resource_group_name: str + :return: An iterator like instance of either AvailabilitySet or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.AvailabilitySet] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - if cls: - return cls(pipeline_response, None, {}) # type: ignore + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) + cls: ClsType[_models.AvailabilitySetListResult] = kwargs.pop("cls", None) - def _convert_to_virtual_machine_scale_set_initial( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Optional[Union[_models.ConvertToVirtualMachineScaleSetInput, IO[bytes]]] = None, - **kwargs: Any - ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -20659,181 +19674,141 @@ def _convert_to_virtual_machine_scale_set_initial( # pylint: disable=name-too-l } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + def prepare_request(next_link=None): + if not next_link: - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-11-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + _request = build_availability_sets_list_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) - content_type = content_type or "application/json" - _json = None - _content = None - if isinstance(parameters, (IOBase, bytes)): - _content = parameters - else: - if parameters is not None: - _json = self._serialize.body(parameters, "ConvertToVirtualMachineScaleSetInput") else: - _json = None - - _request = build_availability_sets_convert_to_virtual_machine_scale_set_request( - resource_group_name=resource_group_name, - availability_set_name=availability_set_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) + # 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._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 - _decompress = kwargs.pop("decompress", True) - _stream = True - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) + def extract_data(pipeline_response): + deserialized = self._deserialize("AvailabilitySetListResult", 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) - response = pipeline_response.http_response + def get_next(next_link=None): + _request = prepare_request(next_link) - if response.status_code not in [202]: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore + return pipeline_response - return deserialized # type: ignore + return ItemPaged(get_next, extract_data) - @overload - def begin_convert_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Optional[_models.ConvertToVirtualMachineScaleSetInput] = None, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[None]: - """Create a new Flexible Virtual Machine Scale Set and migrate all the Virtual Machines in the - Availability Set. This does not trigger a downtime on the Virtual Machines. + @distributed_trace + def list_available_sizes( + self, resource_group_name: str, availability_set_name: str, **kwargs: Any + ) -> Iterable["_models.VirtualMachineSize"]: + """Lists all available virtual machine sizes that can be used to create a new virtual machine in + an existing availability set. :param resource_group_name: The name of the resource group. Required. :type resource_group_name: str :param availability_set_name: The name of the availability set. Required. :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ConvertToVirtualMachineScaleSetInput - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[None] + :return: An iterator like instance of either VirtualMachineSize or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineSize] :raises ~azure.core.exceptions.HttpResponseError: """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - @overload - def begin_convert_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Optional[IO[bytes]] = None, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[None]: - """Create a new Flexible Virtual Machine Scale Set and migrate all the Virtual Machines in the - Availability Set. This does not trigger a downtime on the Virtual Machines. + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) + cls: ClsType[_models.VirtualMachineSizeListResult] = kwargs.pop("cls", None) - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. - Default value is None. - :type parameters: 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: An instance of LROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[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 {}) - @distributed_trace - def begin_convert_to_virtual_machine_scale_set( # pylint: disable=name-too-long - self, - resource_group_name: str, - availability_set_name: str, - parameters: Optional[Union[_models.ConvertToVirtualMachineScaleSetInput, IO[bytes]]] = None, - **kwargs: Any - ) -> LROPoller[None]: - """Create a new Flexible Virtual Machine Scale Set and migrate all the Virtual Machines in the - Availability Set. This does not trigger a downtime on the Virtual Machines. + def prepare_request(next_link=None): + if not next_link: - :param resource_group_name: The name of the resource group. Required. - :type resource_group_name: str - :param availability_set_name: The name of the availability set. Required. - :type availability_set_name: str - :param parameters: Parameters supplied to the migrate operation on the availability set. Is - either a ConvertToVirtualMachineScaleSetInput type or a IO[bytes] type. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ConvertToVirtualMachineScaleSetInput - or IO[bytes] - :return: An instance of LROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _request = build_availability_sets_list_available_sizes_request( + resource_group_name=resource_group_name, + availability_set_name=availability_set_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + headers=_headers, + params=_params, + ) + _request.url = self._client.format_url(_request.url) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-11-01")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[None] = kwargs.pop("cls", None) - polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) - lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) - cont_token: Optional[str] = kwargs.pop("continuation_token", None) - if cont_token is None: - raw_result = self._convert_to_virtual_machine_scale_set_initial( - resource_group_name=resource_group_name, - availability_set_name=availability_set_name, - parameters=parameters, - api_version=api_version, - content_type=content_type, - cls=lambda x, y, z: x, - headers=_headers, - params=_params, - **kwargs - ) - raw_result.http_response.read() # type: ignore - kwargs.pop("error_map", None) + 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._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 get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + def extract_data(pipeline_response): + deserialized = self._deserialize("VirtualMachineSizeListResult", pipeline_response) + list_of_elem = deserialized.value if cls: - return cls(pipeline_response, None, {}) # type: ignore + list_of_elem = cls(list_of_elem) # type: ignore + return None, iter(list_of_elem) - if polling is True: - polling_method: PollingMethod = cast(PollingMethod, ARMPolling(lro_delay, **kwargs)) - elif polling is False: - polling_method = cast(PollingMethod, NoPolling()) - else: - polling_method = polling - if cont_token: - return LROPoller[None].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, + 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 ) - return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + 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) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) class ProximityPlacementGroupsOperations: @@ -20842,7 +19817,7 @@ class ProximityPlacementGroupsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`proximity_placement_groups` attribute. """ @@ -20850,10 +19825,10 @@ class ProximityPlacementGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -20874,12 +19849,12 @@ def create_or_update( :type proximity_placement_group_name: str :param parameters: Parameters supplied to the Create Proximity Placement Group operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -20906,7 +19881,7 @@ def create_or_update( Default value is "application/json". :paramtype content_type: str :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -20926,9 +19901,9 @@ def create_or_update( :type proximity_placement_group_name: str :param parameters: Parameters supplied to the Create Proximity Placement Group operation. Is either a ProximityPlacementGroup type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup or IO[bytes] :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -20942,7 +19917,7 @@ def create_or_update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.ProximityPlacementGroup] = kwargs.pop("cls", None) @@ -21003,12 +19978,12 @@ def update( :type proximity_placement_group_name: str :param parameters: Parameters supplied to the Update Proximity Placement Group operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroupUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroupUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21035,7 +20010,7 @@ def update( Default value is "application/json". :paramtype content_type: str :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21055,10 +20030,10 @@ def update( :type proximity_placement_group_name: str :param parameters: Parameters supplied to the Update Proximity Placement Group operation. Is either a ProximityPlacementGroupUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroupUpdate or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroupUpdate or IO[bytes] :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -21072,7 +20047,7 @@ def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.ProximityPlacementGroup] = kwargs.pop("cls", None) @@ -21140,7 +20115,7 @@ def delete( # pylint: disable=inconsistent-return-statements _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_proximity_placement_groups_delete_request( @@ -21186,7 +20161,7 @@ def get( colocation status of all the resources in the proximity placement group. Default value is None. :paramtype include_colocation_status: str :return: ProximityPlacementGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -21200,7 +20175,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ProximityPlacementGroup] = kwargs.pop("cls", None) _request = build_proximity_placement_groups_get_request( @@ -21239,13 +20214,13 @@ def list_by_subscription(self, **kwargs: Any) -> Iterable["_models.ProximityPlac :return: An iterator like instance of either ProximityPlacementGroup or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ProximityPlacementGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -21319,13 +20294,13 @@ def list_by_resource_group( :return: An iterator like instance of either ProximityPlacementGroup or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.ProximityPlacementGroup] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.ProximityPlacementGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ProximityPlacementGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -21396,7 +20371,7 @@ class DedicatedHostGroupsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`dedicated_host_groups` attribute. """ @@ -21404,10 +20379,10 @@ class DedicatedHostGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -21429,12 +20404,12 @@ def create_or_update( :param host_group_name: The name of the dedicated host group. Required. :type host_group_name: str :param parameters: Parameters supplied to the Create Dedicated Host Group. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21462,7 +20437,7 @@ def create_or_update( Default value is "application/json". :paramtype content_type: str :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21484,9 +20459,9 @@ def create_or_update( :type host_group_name: str :param parameters: Parameters supplied to the Create Dedicated Host Group. Is either a DedicatedHostGroup type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup or IO[bytes] :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -21500,7 +20475,7 @@ def create_or_update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.DedicatedHostGroup] = kwargs.pop("cls", None) @@ -21560,12 +20535,12 @@ def update( :param host_group_name: The name of the dedicated host group. Required. :type host_group_name: str :param parameters: Parameters supplied to the Update Dedicated Host Group operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroupUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroupUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21591,7 +20566,7 @@ def update( Default value is "application/json". :paramtype content_type: str :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -21611,9 +20586,9 @@ def update( :type host_group_name: str :param parameters: Parameters supplied to the Update Dedicated Host Group operation. Is either a DedicatedHostGroupUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroupUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroupUpdate or IO[bytes] :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -21627,7 +20602,7 @@ def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.DedicatedHostGroup] = kwargs.pop("cls", None) @@ -21695,7 +20670,7 @@ def delete( # pylint: disable=inconsistent-return-statements _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_dedicated_host_groups_delete_request( @@ -21739,11 +20714,11 @@ def get( :type host_group_name: str :keyword expand: The expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance views of the dedicated hosts under the dedicated host group. 'UserData' is - not supported for dedicated host group. Known values are: "instanceView", "userData", and - "resiliencyView". Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.InstanceViewTypes + not supported for dedicated host group. Known values are: "instanceView" and "userData". + Default value is None. + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.InstanceViewTypes :return: DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -21757,7 +20732,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHostGroup] = kwargs.pop("cls", None) _request = build_dedicated_host_groups_get_request( @@ -21797,13 +20772,13 @@ def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> Ite :param resource_group_name: The name of the resource group. Required. :type resource_group_name: str :return: An iterator like instance of either DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHostGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -21873,13 +20848,13 @@ def list_by_subscription(self, **kwargs: Any) -> Iterable["_models.DedicatedHost response to get the next page of dedicated host groups. :return: An iterator like instance of either DedicatedHostGroup or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.DedicatedHostGroup] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.DedicatedHostGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHostGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -21949,7 +20924,7 @@ class DedicatedHostsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`dedicated_hosts` attribute. """ @@ -21957,10 +20932,10 @@ class DedicatedHostsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -21982,7 +20957,7 @@ def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -22051,13 +21026,13 @@ def begin_create_or_update( :param host_name: The name of the dedicated host . Required. :type host_name: str :param parameters: Parameters supplied to the Create Dedicated Host. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHost + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHost :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either DedicatedHost or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -22087,7 +21062,7 @@ def begin_create_or_update( :paramtype content_type: str :return: An instance of LROPoller that returns either DedicatedHost or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -22110,16 +21085,16 @@ def begin_create_or_update( :type host_name: str :param parameters: Parameters supplied to the Create Dedicated Host. Is either a DedicatedHost type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHost or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHost or IO[bytes] :return: An instance of LROPoller that returns either DedicatedHost or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.DedicatedHost] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -22183,7 +21158,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -22252,13 +21227,13 @@ def begin_update( :param host_name: The name of the dedicated host . Required. :type host_name: str :param parameters: Parameters supplied to the Update Dedicated Host operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either DedicatedHost or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -22288,7 +21263,7 @@ def begin_update( :paramtype content_type: str :return: An instance of LROPoller that returns either DedicatedHost or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -22311,16 +21286,16 @@ def begin_update( :type host_name: str :param parameters: Parameters supplied to the Update Dedicated Host operation. Is either a DedicatedHostUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHostUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHostUpdate or IO[bytes] :return: An instance of LROPoller that returns either DedicatedHost or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.DedicatedHost] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -22379,7 +21354,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_dedicated_hosts_delete_request( @@ -22435,7 +21410,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -22493,11 +21468,10 @@ def get( :type host_name: str :keyword expand: The expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance views of the dedicated host. 'UserData' is not supported for dedicated - host. Known values are: "instanceView", "userData", and "resiliencyView". Default value is - None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.InstanceViewTypes + host. Known values are: "instanceView" and "userData". Default value is None. + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.InstanceViewTypes :return: DedicatedHost or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.DedicatedHost + :rtype: ~azure.mgmt.compute.v2024_07_01.models.DedicatedHost :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -22511,7 +21485,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHost] = kwargs.pop("cls", None) _request = build_dedicated_hosts_get_request( @@ -22556,13 +21530,13 @@ def list_by_host_group( :param host_group_name: The name of the dedicated host group. Required. :type host_group_name: str :return: An iterator like instance of either DedicatedHost or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.DedicatedHost] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.DedicatedHost] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHostListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -22641,7 +21615,7 @@ def _restart_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_dedicated_hosts_restart_request( @@ -22700,7 +21674,7 @@ def begin_restart( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -22752,7 +21726,7 @@ def _redeploy_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_dedicated_hosts_redeploy_request( @@ -22815,7 +21789,7 @@ def begin_redeploy( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -22874,7 +21848,7 @@ def list_available_sizes( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.DedicatedHostSizeListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -22947,7 +21921,7 @@ class SshPublicKeysOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`ssh_public_keys` attribute. """ @@ -22955,10 +21929,10 @@ class SshPublicKeysOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -22969,13 +21943,13 @@ def list_by_subscription(self, **kwargs: Any) -> Iterable["_models.SshPublicKeyR :return: An iterator like instance of either SshPublicKeyResource or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.SshPublicKeysGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -23050,13 +22024,13 @@ def list_by_resource_group( :return: An iterator like instance of either SshPublicKeyResource or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.SshPublicKeysGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -23137,12 +22111,12 @@ def create( :param ssh_public_key_name: The name of the SSH public key. Required. :type ssh_public_key_name: str :param parameters: Parameters supplied to create the SSH public key. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ @@ -23168,7 +22142,7 @@ def create( Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ @@ -23188,9 +22162,9 @@ def create( :type ssh_public_key_name: str :param parameters: Parameters supplied to create the SSH public key. Is either a SshPublicKeyResource type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource or IO[bytes] :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -23204,7 +22178,7 @@ def create( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SshPublicKeyResource] = kwargs.pop("cls", None) @@ -23264,12 +22238,12 @@ def update( :param ssh_public_key_name: The name of the SSH public key. Required. :type ssh_public_key_name: str :param parameters: Parameters supplied to update the SSH public key. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyUpdateResource + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyUpdateResource :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ @@ -23295,7 +22269,7 @@ def update( Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ @@ -23315,10 +22289,10 @@ def update( :type ssh_public_key_name: str :param parameters: Parameters supplied to update the SSH public key. Is either a SshPublicKeyUpdateResource type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyUpdateResource or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyUpdateResource or IO[bytes] :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -23332,7 +22306,7 @@ def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SshPublicKeyResource] = kwargs.pop("cls", None) @@ -23400,7 +22374,7 @@ def delete( # pylint: disable=inconsistent-return-statements _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_ssh_public_keys_delete_request( @@ -23436,7 +22410,7 @@ def get(self, resource_group_name: str, ssh_public_key_name: str, **kwargs: Any) :param ssh_public_key_name: The name of the SSH public key. Required. :type ssh_public_key_name: str :return: SshPublicKeyResource or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyResource + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyResource :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -23450,7 +22424,7 @@ def get(self, resource_group_name: str, ssh_public_key_name: str, **kwargs: Any) _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.SshPublicKeyResource] = kwargs.pop("cls", None) _request = build_ssh_public_keys_get_request( @@ -23500,12 +22474,12 @@ def generate_key_pair( :param ssh_public_key_name: The name of the SSH public key. Required. :type ssh_public_key_name: str :param parameters: Parameters supplied to generate the SSH public key. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshGenerateKeyPairInputParameters + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshGenerateKeyPairInputParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyGenerateKeyPairResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyGenerateKeyPairResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyGenerateKeyPairResult :raises ~azure.core.exceptions.HttpResponseError: """ @@ -23533,7 +22507,7 @@ def generate_key_pair( Default value is "application/json". :paramtype content_type: str :return: SshPublicKeyGenerateKeyPairResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyGenerateKeyPairResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyGenerateKeyPairResult :raises ~azure.core.exceptions.HttpResponseError: """ @@ -23555,10 +22529,10 @@ def generate_key_pair( :type ssh_public_key_name: str :param parameters: Parameters supplied to generate the SSH public key. Is either a SshGenerateKeyPairInputParameters type or a IO[bytes] type. Default value is None. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.SshGenerateKeyPairInputParameters or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.SshGenerateKeyPairInputParameters or IO[bytes] :return: SshPublicKeyGenerateKeyPairResult or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.SshPublicKeyGenerateKeyPairResult + :rtype: ~azure.mgmt.compute.v2024_07_01.models.SshPublicKeyGenerateKeyPairResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -23572,7 +22546,7 @@ def generate_key_pair( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SshPublicKeyGenerateKeyPairResult] = kwargs.pop("cls", None) @@ -23625,7 +22599,7 @@ class ImagesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`images` attribute. """ @@ -23633,10 +22607,10 @@ class ImagesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -23653,7 +22627,7 @@ def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -23718,12 +22692,12 @@ def begin_create_or_update( :param image_name: The name of the image. Required. :type image_name: str :param parameters: Parameters supplied to the Create Image operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.Image + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.Image :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -23749,7 +22723,7 @@ def begin_create_or_update( Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -23765,15 +22739,15 @@ def begin_create_or_update( :type image_name: str :param parameters: Parameters supplied to the Create Image operation. Is either a Image type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.Image or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.Image or IO[bytes] :return: An instance of LROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.Image] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -23835,7 +22809,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -23900,12 +22874,12 @@ def begin_update( :param image_name: The name of the image. Required. :type image_name: str :param parameters: Parameters supplied to the Update Image operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ImageUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ImageUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -23931,7 +22905,7 @@ def begin_update( Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -23951,15 +22925,15 @@ def begin_update( :type image_name: str :param parameters: Parameters supplied to the Update Image operation. Is either a ImageUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ImageUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ImageUpdate or IO[bytes] :return: An instance of LROPoller that returns either Image or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.Image] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.Image] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -24015,7 +22989,7 @@ def _delete_initial(self, resource_group_name: str, image_name: str, **kwargs: A _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_images_delete_request( @@ -24066,7 +23040,7 @@ def begin_delete(self, resource_group_name: str, image_name: str, **kwargs: Any) _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -24116,7 +23090,7 @@ def get( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: Image or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.Image + :rtype: ~azure.mgmt.compute.v2024_07_01.models.Image :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -24130,7 +23104,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.Image] = kwargs.pop("cls", None) _request = build_images_get_request( @@ -24170,13 +23144,13 @@ def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> Ite :param resource_group_name: The name of the resource group. Required. :type resource_group_name: str :return: An iterator like instance of either Image or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.Image] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ImageListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -24246,13 +23220,13 @@ def list(self, **kwargs: Any) -> Iterable["_models.Image"]: next page of Images. Do this till nextLink is null to fetch all the Images. :return: An iterator like instance of either Image or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.Image] + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.Image] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.ImageListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -24322,7 +23296,7 @@ class RestorePointCollectionsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`restore_point_collections` attribute. """ @@ -24330,10 +23304,10 @@ class RestorePointCollectionsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -24356,12 +23330,12 @@ def create_or_update( :type restore_point_collection_name: str :param parameters: Parameters supplied to the Create or Update restore point collection operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ @@ -24390,7 +23364,7 @@ def create_or_update( Default value is "application/json". :paramtype content_type: str :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ @@ -24412,9 +23386,9 @@ def create_or_update( :type restore_point_collection_name: str :param parameters: Parameters supplied to the Create or Update restore point collection operation. Is either a RestorePointCollection type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection or IO[bytes] :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -24428,7 +23402,7 @@ def create_or_update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.RestorePointCollection] = kwargs.pop("cls", None) @@ -24489,12 +23463,12 @@ def update( :type restore_point_collection_name: str :param parameters: Parameters supplied to the Update restore point collection operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollectionUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollectionUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ @@ -24521,7 +23495,7 @@ def update( Default value is "application/json". :paramtype content_type: str :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ @@ -24541,10 +23515,10 @@ def update( :type restore_point_collection_name: str :param parameters: Parameters supplied to the Update restore point collection operation. Is either a RestorePointCollectionUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollectionUpdate or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollectionUpdate or IO[bytes] :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -24558,7 +23532,7 @@ def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.RestorePointCollection] = kwargs.pop("cls", None) @@ -24615,7 +23589,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_restore_point_collections_delete_request( @@ -24669,7 +23643,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -24725,9 +23699,9 @@ def get( server will return all contained restore points in the restorePointCollection. "restorePoints" Default value is None. :paramtype expand: str or - ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollectionExpandOptions + ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollectionExpandOptions :return: RestorePointCollection or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -24741,7 +23715,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RestorePointCollection] = kwargs.pop("cls", None) _request = build_restore_point_collections_get_request( @@ -24782,13 +23756,13 @@ def list(self, resource_group_name: str, **kwargs: Any) -> Iterable["_models.Res :return: An iterator like instance of either RestorePointCollection or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RestorePointCollectionListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -24861,13 +23835,13 @@ def list_all(self, **kwargs: Any) -> Iterable["_models.RestorePointCollection"]: :return: An iterator like instance of either RestorePointCollection or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.RestorePointCollection] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.RestorePointCollection] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RestorePointCollectionListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -24937,7 +23911,7 @@ class RestorePointsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`restore_points` attribute. """ @@ -24945,10 +23919,10 @@ class RestorePointsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_initial( @@ -24970,7 +23944,7 @@ def _create_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -25040,13 +24014,13 @@ def begin_create( :param restore_point_name: The name of the restore point. Required. :type restore_point_name: str :param parameters: Parameters supplied to the Create restore point operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePoint + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePoint :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either RestorePoint or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.RestorePoint] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.RestorePoint] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -25077,7 +24051,7 @@ def begin_create( :paramtype content_type: str :return: An instance of LROPoller that returns either RestorePoint or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.RestorePoint] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.RestorePoint] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -25101,16 +24075,16 @@ def begin_create( :type restore_point_name: str :param parameters: Parameters supplied to the Create restore point operation. Is either a RestorePoint type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RestorePoint or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RestorePoint or IO[bytes] :return: An instance of LROPoller that returns either RestorePoint or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.RestorePoint] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.RestorePoint] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.RestorePoint] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -25169,7 +24143,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_restore_points_delete_request( @@ -25225,7 +24199,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -25283,9 +24257,9 @@ def get( :type restore_point_name: str :keyword expand: The expand expression to apply on the operation. 'InstanceView' retrieves information about the run-time state of a restore point. "instanceView" Default value is None. - :paramtype expand: str or ~azure.mgmt.compute.v2024_11_01.models.RestorePointExpandOptions + :paramtype expand: str or ~azure.mgmt.compute.v2024_07_01.models.RestorePointExpandOptions :return: RestorePoint or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RestorePoint + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RestorePoint :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -25299,7 +24273,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RestorePoint] = kwargs.pop("cls", None) _request = build_restore_points_get_request( @@ -25339,7 +24313,7 @@ class CapacityReservationGroupsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`capacity_reservation_groups` attribute. """ @@ -25347,10 +24321,10 @@ class CapacityReservationGroupsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @overload @@ -25372,12 +24346,12 @@ def create_or_update( :param capacity_reservation_group_name: The name of the capacity reservation group. Required. :type capacity_reservation_group_name: str :param parameters: Parameters supplied to the Create capacity reservation Group. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -25405,7 +24379,7 @@ def create_or_update( Default value is "application/json". :paramtype content_type: str :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -25427,9 +24401,9 @@ def create_or_update( :type capacity_reservation_group_name: str :param parameters: Parameters supplied to the Create capacity reservation Group. Is either a CapacityReservationGroup type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup or IO[bytes] :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -25443,7 +24417,7 @@ def create_or_update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.CapacityReservationGroup] = kwargs.pop("cls", None) @@ -25505,12 +24479,12 @@ def update( :type capacity_reservation_group_name: str :param parameters: Parameters supplied to the Update capacity reservation Group operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroupUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroupUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -25538,7 +24512,7 @@ def update( Default value is "application/json". :paramtype content_type: str :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ @@ -25559,10 +24533,10 @@ def update( :type capacity_reservation_group_name: str :param parameters: Parameters supplied to the Update capacity reservation Group operation. Is either a CapacityReservationGroupUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroupUpdate or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroupUpdate or IO[bytes] :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -25576,7 +24550,7 @@ def update( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.CapacityReservationGroup] = kwargs.pop("cls", None) @@ -25647,7 +24621,7 @@ def delete( # pylint: disable=inconsistent-return-statements _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) _request = build_capacity_reservation_groups_delete_request( @@ -25695,9 +24669,9 @@ def get( platform and can change outside of control plane operations. "instanceView" Default value is None. :paramtype expand: str or - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroupInstanceViewTypes + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroupInstanceViewTypes :return: CapacityReservationGroup or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -25711,7 +24685,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.CapacityReservationGroup] = kwargs.pop("cls", None) _request = build_capacity_reservation_groups_get_request( @@ -25761,17 +24735,17 @@ def list_by_resource_group( associated to capacity reservation group in the response. Known values are: "virtualMachineScaleSetVMs/$ref" and "virtualMachines/$ref". Default value is None. :paramtype expand: str or - ~azure.mgmt.compute.v2024_11_01.models.ExpandTypesForGetCapacityReservationGroups + ~azure.mgmt.compute.v2024_07_01.models.ExpandTypesForGetCapacityReservationGroups :return: An iterator like instance of either CapacityReservationGroup or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.CapacityReservationGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -25852,7 +24826,7 @@ def list_by_subscription( associated to capacity reservation group in the response. Known values are: "virtualMachineScaleSetVMs/$ref" and "virtualMachines/$ref". Default value is None. :paramtype expand: str or - ~azure.mgmt.compute.v2024_11_01.models.ExpandTypesForGetCapacityReservationGroups + ~azure.mgmt.compute.v2024_07_01.models.ExpandTypesForGetCapacityReservationGroups :keyword resource_ids_only: The query option to fetch Capacity Reservation Group Resource Ids. :code:`
    ` 'CreatedInSubscription' enables fetching Resource Ids for all capacity reservation group resources created in the subscription. :code:`
    ` 'SharedWithSubscription' enables @@ -25861,17 +24835,17 @@ def list_by_subscription( group resources shared with the subscription and created in the subscription. Known values are: "CreatedInSubscription", "SharedWithSubscription", and "All". Default value is None. :paramtype resource_ids_only: str or - ~azure.mgmt.compute.v2024_11_01.models.ResourceIdOptionsForGetCapacityReservationGroups + ~azure.mgmt.compute.v2024_07_01.models.ResourceIdOptionsForGetCapacityReservationGroups :return: An iterator like instance of either CapacityReservationGroup or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.CapacityReservationGroup] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.CapacityReservationGroup] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.CapacityReservationGroupListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -25943,7 +24917,7 @@ class CapacityReservationsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`capacity_reservations` attribute. """ @@ -25951,10 +24925,10 @@ class CapacityReservationsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -25976,7 +24950,7 @@ def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -26047,14 +25021,14 @@ def begin_create_or_update( :param capacity_reservation_name: The name of the capacity reservation. Required. :type capacity_reservation_name: str :param parameters: Parameters supplied to the Create capacity reservation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservation + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservation :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -26087,7 +25061,7 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -26112,17 +25086,17 @@ def begin_create_or_update( :type capacity_reservation_name: str :param parameters: Parameters supplied to the Create capacity reservation. Is either a CapacityReservation type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservation or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservation or IO[bytes] :return: An instance of LROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.CapacityReservation] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -26186,7 +25160,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -26255,14 +25229,14 @@ def begin_update( :param capacity_reservation_name: The name of the capacity reservation. Required. :type capacity_reservation_name: str :param parameters: Parameters supplied to the Update capacity reservation operation. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationUpdate + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -26293,7 +25267,7 @@ def begin_update( :return: An instance of LROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -26316,17 +25290,17 @@ def begin_update( :type capacity_reservation_name: str :param parameters: Parameters supplied to the Update capacity reservation operation. Is either a CapacityReservationUpdate type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationUpdate or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationUpdate or IO[bytes] :return: An instance of LROPoller that returns either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.CapacityReservation] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -26389,7 +25363,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_capacity_reservations_delete_request( @@ -26451,7 +25425,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -26511,9 +25485,9 @@ def get( snapshot of the runtime properties of the capacity reservation that is managed by the platform and can change outside of control plane operations. "instanceView" Default value is None. :paramtype expand: str or - ~azure.mgmt.compute.v2024_11_01.models.CapacityReservationInstanceViewTypes + ~azure.mgmt.compute.v2024_07_01.models.CapacityReservationInstanceViewTypes :return: CapacityReservation or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.CapacityReservation + :rtype: ~azure.mgmt.compute.v2024_07_01.models.CapacityReservation :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -26527,7 +25501,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.CapacityReservation] = kwargs.pop("cls", None) _request = build_capacity_reservations_get_request( @@ -26573,13 +25547,13 @@ def list_by_capacity_reservation_group( :type capacity_reservation_group_name: str :return: An iterator like instance of either CapacityReservation or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.CapacityReservation] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.CapacityReservation] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.CapacityReservationListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -26651,7 +25625,7 @@ class LogAnalyticsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`log_analytics` attribute. """ @@ -26659,10 +25633,10 @@ class LogAnalyticsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _export_request_rate_by_interval_initial( @@ -26679,7 +25653,7 @@ def _export_request_rate_by_interval_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -26742,14 +25716,14 @@ def begin_export_request_rate_by_interval( :type location: str :param parameters: Parameters supplied to the LogAnalytics getRequestRateByInterval Api. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RequestRateByIntervalInput + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RequestRateByIntervalInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -26771,7 +25745,7 @@ def begin_export_request_rate_by_interval( :return: An instance of LROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -26786,18 +25760,18 @@ def begin_export_request_rate_by_interval( :type location: str :param parameters: Parameters supplied to the LogAnalytics getRequestRateByInterval Api. Is either a RequestRateByIntervalInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.RequestRateByIntervalInput or + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.RequestRateByIntervalInput or IO[bytes] :return: An instance of LROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.LogAnalyticsOperationResult] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -26856,7 +25830,7 @@ def _export_throttled_requests_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -26918,14 +25892,14 @@ def begin_export_throttled_requests( :param location: The location upon which virtual-machine-sizes is queried. Required. :type location: str :param parameters: Parameters supplied to the LogAnalytics getThrottledRequests Api. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ThrottledRequestsInput + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ThrottledRequestsInput :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -26946,7 +25920,7 @@ def begin_export_throttled_requests( :return: An instance of LROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -26961,17 +25935,17 @@ def begin_export_throttled_requests( :type location: str :param parameters: Parameters supplied to the LogAnalytics getThrottledRequests Api. Is either a ThrottledRequestsInput type or a IO[bytes] type. Required. - :type parameters: ~azure.mgmt.compute.v2024_11_01.models.ThrottledRequestsInput or IO[bytes] + :type parameters: ~azure.mgmt.compute.v2024_07_01.models.ThrottledRequestsInput or IO[bytes] :return: An instance of LROPoller that returns either LogAnalyticsOperationResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.LogAnalyticsOperationResult] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.LogAnalyticsOperationResult] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.LogAnalyticsOperationResult] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -27023,7 +25997,7 @@ class VirtualMachineRunCommandsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_run_commands` attribute. """ @@ -27031,10 +26005,10 @@ class VirtualMachineRunCommandsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -27046,13 +26020,13 @@ def list(self, location: str, **kwargs: Any) -> Iterable["_models.RunCommandDocu :return: An iterator like instance of either RunCommandDocumentBase or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.RunCommandDocumentBase] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.RunCommandDocumentBase] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RunCommandListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -27125,7 +26099,7 @@ def get(self, location: str, command_id: str, **kwargs: Any) -> _models.RunComma :param command_id: The command id. Required. :type command_id: str :return: RunCommandDocument or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.RunCommandDocument + :rtype: ~azure.mgmt.compute.v2024_07_01.models.RunCommandDocument :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -27139,7 +26113,7 @@ def get(self, location: str, command_id: str, **kwargs: Any) -> _models.RunComma _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.RunCommandDocument] = kwargs.pop("cls", None) _request = build_virtual_machine_run_commands_get_request( @@ -27189,7 +26163,7 @@ def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -27260,14 +26234,14 @@ def begin_create_or_update( :type run_command_name: str :param run_command: Parameters supplied to the Create Virtual Machine RunCommand operation. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -27300,7 +26274,7 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -27324,17 +26298,17 @@ def begin_create_or_update( :type run_command_name: str :param run_command: Parameters supplied to the Create Virtual Machine RunCommand operation. Is either a VirtualMachineRunCommand type or a IO[bytes] type. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand or IO[bytes] + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -27398,7 +26372,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -27469,14 +26443,14 @@ def begin_update( :type run_command_name: str :param run_command: Parameters supplied to the Update Virtual Machine RunCommand operation. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandUpdate + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -27509,7 +26483,7 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -27533,18 +26507,18 @@ def begin_update( :type run_command_name: str :param run_command: Parameters supplied to the Update Virtual Machine RunCommand operation. Is either a VirtualMachineRunCommandUpdate type or a IO[bytes] type. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandUpdate or + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandUpdate or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -27603,7 +26577,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_run_commands_delete_request( @@ -27660,7 +26634,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -27719,7 +26693,7 @@ def get_by_virtual_machine( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineRunCommand or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -27733,7 +26707,7 @@ def get_by_virtual_machine( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) _request = build_virtual_machine_run_commands_get_by_virtual_machine_request( @@ -27781,13 +26755,13 @@ def list_by_virtual_machine( :return: An iterator like instance of either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineRunCommandsListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { @@ -27860,7 +26834,7 @@ class VirtualMachineScaleSetVMRunCommandsOperations: # pylint: disable=name-too **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.compute.v2024_11_01.ComputeManagementClient`'s + :class:`~azure.mgmt.compute.v2024_07_01.ComputeManagementClient`'s :attr:`virtual_machine_scale_set_vm_run_commands` attribute. """ @@ -27868,10 +26842,10 @@ class VirtualMachineScaleSetVMRunCommandsOperations: # pylint: disable=name-too 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -27894,7 +26868,7 @@ def _create_or_update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -27968,14 +26942,14 @@ def begin_create_or_update( :type run_command_name: str :param run_command: Parameters supplied to the Create Virtual Machine RunCommand operation. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -28010,7 +26984,7 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -28036,17 +27010,17 @@ def begin_create_or_update( :type run_command_name: str :param run_command: Parameters supplied to the Create Virtual Machine RunCommand operation. Is either a VirtualMachineRunCommand type or a IO[bytes] type. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand or IO[bytes] + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -28112,7 +27086,7 @@ def _update_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) @@ -28186,14 +27160,14 @@ def begin_update( :type run_command_name: str :param run_command: Parameters supplied to the Update Virtual Machine RunCommand operation. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandUpdate + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -28228,7 +27202,7 @@ def begin_update( :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -28254,18 +27228,18 @@ def begin_update( :type run_command_name: str :param run_command: Parameters supplied to the Update Virtual Machine RunCommand operation. Is either a VirtualMachineRunCommandUpdate type or a IO[bytes] type. Required. - :type run_command: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommandUpdate or + :type run_command: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommandUpdate or IO[bytes] :return: An instance of LROPoller that returns either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.polling.LROPoller[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :raises ~azure.core.exceptions.HttpResponseError: """ _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) @@ -28325,7 +27299,7 @@ def _delete_initial( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vm_run_commands_delete_request( @@ -28384,7 +27358,7 @@ def begin_delete( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) @@ -28447,7 +27421,7 @@ def get( :keyword expand: The expand expression to apply on the operation. Default value is None. :paramtype expand: str :return: VirtualMachineRunCommand or the result of cls(response) - :rtype: ~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand + :rtype: ~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -28461,7 +27435,7 @@ def get( _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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineRunCommand] = kwargs.pop("cls", None) _request = build_virtual_machine_scale_set_vm_run_commands_get_request( @@ -28518,13 +27492,13 @@ def list( :return: An iterator like instance of either VirtualMachineRunCommand or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_11_01.models.VirtualMachineRunCommand] + ~azure.core.paging.ItemPaged[~azure.mgmt.compute.v2024_07_01.models.VirtualMachineRunCommand] :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._api_version or "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._api_version or "2024-07-01")) cls: ClsType[_models.VirtualMachineRunCommandsListResult] = kwargs.pop("cls", None) error_map: MutableMapping = { diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/operations/_patch.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/operations/_patch.py new file mode 100644 index 000000000000..8bcb627aa475 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/operations/_patch.py @@ -0,0 +1,21 @@ +# 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. +# -------------------------------------------------------------------------- +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/py.typed b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/py.typed similarity index 100% rename from sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/py.typed rename to sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_07_01/py.typed diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/operations/_patch.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/operations/_patch.py deleted file mode 100644 index f7dd32510333..000000000000 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_01/operations/_patch.py +++ /dev/null @@ -1,20 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Customize generated code here. - -Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize -""" -from typing import List - -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level - - -def patch_sdk(): - """Do not remove from this file. - - `patch_sdk` is a last resort escape hatch that allows you to do customizations - you can't accomplish using the techniques described in - https://aka.ms/azsdk/python/dpcodegen/python/customize - """ diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_compute_management_client.py index 0d0b931edf80..e6f93a0b62a2 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_compute_management_client.py @@ -7,17 +7,19 @@ # -------------------------------------------------------------------------- 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 as _models -from .._serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration +from ._utils.serialization import Deserializer, Serializer from .operations import ( CloudServiceOperatingSystemsOperations, CloudServiceRoleInstancesOperations, @@ -52,7 +54,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2024-11-04". Note that overriding this default value may result in unsupported behavior. @@ -62,15 +64,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -89,7 +93,7 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_metadata.json b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_metadata.json index 3c5000da56ef..4a299afec6e7 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_metadata.json +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_metadata.json @@ -5,13 +5,13 @@ "name": "ComputeManagementClient", "filename": "_compute_management_client", "description": "Compute Client.", - "host_value": "\"https://management.azure.com\"", + "host_value": null, "parameterized_host_template": null, "azure_arm": true, "has_public_lro_operations": true, "client_side_validation": false, - "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", - "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"..._serialization\": [\"Deserializer\", \"Serializer\"]}, \"stdlib\": {\"typing_extensions\": [\"Self\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" + "sync_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"ARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \"._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}", + "async_imports": "{\"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}, \"regular\": {\"sdkcore\": {\"azure.mgmt.core\": [\"AsyncARMPipelineClient\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"AsyncARMAutoResourceProviderRegistrationPolicy\"], \"azure.core.settings\": [\"settings\"], \"azure.mgmt.core.tools\": [\"get_arm_endpoints\"], \"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"]}, \"stdlib\": {\"typing\": [\"Optional\", \"cast\"], \"typing_extensions\": [\"Self\"]}, \"local\": {\"._configuration\": [\"ComputeManagementClientConfiguration\"], \".._utils.serialization\": [\"Deserializer\", \"Serializer\"]}}, \"typing\": {\"sdkcore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}" }, "global_parameters": { "sync": { @@ -57,7 +57,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, @@ -80,7 +80,7 @@ "method_location": "positional" }, "base_url": { - "signature": "base_url: str = \"https://management.azure.com\",", + "signature": "base_url: Optional[str] = None,", "description": "Service URL", "docstring_type": "str", "required": false, diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_utils/__init__.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_utils/__init__.py new file mode 100644 index 000000000000..0af9b28f6607 --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_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/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_utils/serialization.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_utils/serialization.py new file mode 100644 index 000000000000..f5187701d7be --- /dev/null +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_utils/serialization.py @@ -0,0 +1,2032 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# 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. +# -------------------------------------------------------------------------- + +# pyright: reportUnnecessaryTypeIgnoreComment=false + +from base64 import b64decode, b64encode +import calendar +import datetime +import decimal +import email +from enum import Enum +import json +import logging +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 +import xml.etree.ElementTree as ET + +import isodate # type: ignore +from typing_extensions import Self + +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull + +_BOM = codecs.BOM_UTF8.decode(encoding="utf-8") + +JSON = MutableMapping[str, Any] + + +class RawDeserializer: + + # Accept "text" because we're open minded people... + JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$") + + # Name used in context + CONTEXT_NAME = "deserialized_data" + + @classmethod + 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. + + If no content-type, will return the string version (not bytes, not stream) + + :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 + data = cast(IO, data).read() + + if isinstance(data, bytes): + data_as_str = data.decode(encoding="utf-8-sig") + else: + # Explain to mypy the correct type. + data_as_str = cast(str, data) + + # Remove Byte Order Mark if present in string + data_as_str = data_as_str.lstrip(_BOM) + + if content_type is None: + return data + + if cls.JSON_REGEXP.match(content_type): + try: + return json.loads(data_as_str) + except ValueError as err: + raise DeserializationError("JSON is invalid: {}".format(err), err) from err + elif "xml" in (content_type or []): + try: + + try: + if isinstance(data, unicode): # type: ignore + # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string + data_as_str = data_as_str.encode(encoding="utf-8") # type: ignore + except NameError: + pass + + return ET.fromstring(data_as_str) # nosec + 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 + # let's flow the initial exception + def _json_attemp(data): + try: + return True, json.loads(data) + except ValueError: + return False, None # Don't care about this one + + success, json_result = _json_attemp(data) + if success: + return json_result + # If i'm here, it's not JSON, it's not XML, let's scream + # and raise the last context in this block (the XML exception) + # The function hack is because Py2.7 messes up with exception + # context otherwise. + _LOGGER.critical("Wasn't XML not JSON, failing") + 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: 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 + if "content-type" in headers: + content_type = headers["content-type"].split(";")[0].strip().lower() + # Ouch, this server did not declare what it sent... + # Let's guess it's JSON... + # Also, since Autorest was considering that an empty body was a valid JSON, + # need that test as well.... + else: + content_type = "application/json" + + if body_bytes: + return cls.deserialize_from_text(body_bytes, content_type) + return None + + +_LOGGER = logging.getLogger(__name__) + +try: + _long_type = long # type: ignore +except NameError: + _long_type = int + +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): + _LOGGER.warning("Readonly attribute %s will be ignored in class %s", k, self.__class__) + else: + setattr(self, k, kwargs[k]) + + 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: 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) -> str: + return str(self.__dict__) + + @classmethod + def enable_additional_properties_sending(cls) -> None: + cls._attribute_map["additional_properties"] = {"key": "", "type": "{object}"} + + @classmethod + def is_xml_model(cls) -> bool: + try: + cls._xml_map # type: ignore + except AttributeError: + return False + return True + + @classmethod + def _create_xml_node(cls): + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ + try: + 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: 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)`. + + 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 + :returns: A dict JSON compatible object + :rtype: dict + """ + serializer = Serializer(self._infer_class_models()) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) + + 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: + + .. code::python + + def my_key_transformer(key, attr_desc, value): + return key + + Key is the attribute name used in Python. Attr_desc + is a dict of metadata. Currently contains 'type' with the + msrest type and 'key' with the RestAPI encoded key. + Value is the current value in this object. + + The string returned will be used to serialize the key. + If the return type is a list, this is considered hierarchical + result dict. + + See the three examples in this file: + + - attribute_transformer + - full_restapi_key_transformer + - last_restapi_key_transformer + + 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( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) + + @classmethod + def _infer_class_models(cls): + try: + str_models = cls.__module__.rsplit(".", 1)[0] + models = sys.modules[str_models] + 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: # 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: 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + 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 + extractors (rest_key_case_insensitive_extractor, attribute_key_case_insensitive_extractor + 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 + :rtype: Self + """ + deserializer = Deserializer(cls._infer_class_models()) + deserializer.key_extractors = ( # type: ignore + [ # type: ignore + attribute_key_case_insensitive_extractor, + rest_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + if key_extractors is None + else key_extractors + ) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore + + @classmethod + def _flatten_subtype(cls, key, objects): + if "_subtype_map" not in cls.__dict__: + return {} + result = dict(cls._subtype_map[key]) + for valuetype in cls._subtype_map[key].values(): + 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. + + :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.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: + # Try to match base class. Can be class name only + # (bug to fix in Autorest to support x-ms-discriminator-name) + if cls.__name__ == subtype_value: + return cls + flatten_mapping_type = cls._flatten_subtype(subtype_key, objects) + try: + return objects[flatten_mapping_type[subtype_value]] # type: ignore + except KeyError: + _LOGGER.warning( + "Subtype value %s has no mapping, use base class %s.", + subtype_value, + cls.__name__, + ) + break + else: + _LOGGER.warning("Discriminator %s is absent or null, use base class %s.", subtype_key, cls.__name__) + break + return cls + + @classmethod + def _get_rest_key_parts(cls, attr_key): + """Get the RestAPI key of this attr, split it and decode part + :param str attr_key: Attribute key must be in attribute_map. + :returns: A list of RestAPI part + :rtype: list + """ + rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"]) + return [_decode_attribute_map_key(key_part) for key_part in rest_split_key] + + +def _decode_attribute_map_key(key): + """This decode a key in an _attribute_map to the actual key we want to look at + 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: # pylint: disable=too-many-public-methods + """Request object model serializer.""" + + basic_types = {str: "str", int: "int", bool: "bool", float: "float"} + + _xml_basic_types_serializers = {"bool": lambda x: str(x).lower()} + days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"} + months = { + 1: "Jan", + 2: "Feb", + 3: "Mar", + 4: "Apr", + 5: "May", + 6: "Jun", + 7: "Jul", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", + } + validation = { + "min_length": lambda x, y: len(x) < y, + "max_length": lambda x, y: len(x) > y, + "minimum": lambda x, y: x < y, + "maximum": lambda x, y: x > y, + "minimum_ex": lambda x, y: x <= y, + "maximum_ex": lambda x, y: x >= y, + "min_items": lambda x, y: len(x) < y, + "max_items": lambda x, y: len(x) > y, + "pattern": lambda x, y: not re.match(y, x, re.UNICODE), + "unique": lambda x, y: len(x) != len(set(x)), + "multiple": lambda x, y: x % y != 0, + } + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.serialize_type = { + "iso-8601": Serializer.serialize_iso, + "rfc-1123": Serializer.serialize_rfc, + "unix-time": Serializer.serialize_unix, + "duration": Serializer.serialize_duration, + "date": Serializer.serialize_date, + "time": Serializer.serialize_time, + "decimal": Serializer.serialize_decimal, + "long": Serializer.serialize_long, + "bytearray": Serializer.serialize_bytearray, + "base64": Serializer.serialize_base64, + "object": self.serialize_object, + "[]": self.serialize_iter, + "{}": self.serialize_dict, + } + self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.key_transformer = full_restapi_key_transformer + self.client_side_validation = True + + 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 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. + :returns: The serialized data. + """ + key_transformer = kwargs.get("key_transformer", self.key_transformer) + keep_readonly = kwargs.get("keep_readonly", False) + if target_obj is None: + return None + + attr_name = None + class_name = target_obj.__class__.__name__ + + if data_type: + return self.serialize_data(target_obj, data_type, **kwargs) + + if not hasattr(target_obj, "_attribute_map"): + data_type = type(target_obj).__name__ + if data_type in self.basic_types.values(): + return self.serialize_data(target_obj, data_type, **kwargs) + + # Force "is_xml" kwargs if we detect a XML model + try: + is_xml_model_serialization = kwargs["is_xml"] + except KeyError: + is_xml_model_serialization = kwargs.setdefault("is_xml", target_obj.is_xml_model()) + + serialized = {} + if is_xml_model_serialization: + serialized = target_obj._create_xml_node() # pylint: disable=protected-access + try: + 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( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): + continue + + if attr_name == "additional_properties" and attr_desc["key"] == "": + if target_obj.additional_properties is not None: + serialized.update(target_obj.additional_properties) + continue + try: + + orig_attr = getattr(target_obj, attr) + if is_xml_model_serialization: + pass # Don't provide "transformer" for XML for now. Keep "orig_attr" + else: # JSON + keys, orig_attr = key_transformer(attr, attr_desc.copy(), orig_attr) + keys = keys if isinstance(keys, list) else [keys] + + kwargs["serialization_ctxt"] = attr_desc + new_attr = self.serialize_data(orig_attr, attr_desc["type"], **kwargs) + + if is_xml_model_serialization: + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + xml_prefix = xml_desc.get("prefix", None) + xml_ns = xml_desc.get("ns", None) + 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) # type: ignore + continue + if xml_desc.get("text", False): + serialized.text = new_attr # type: ignore + continue + if isinstance(new_attr, list): + 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 "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) # 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 = str(new_attr) + serialized.append(local_node) # type: ignore + else: # JSON + for k in reversed(keys): # type: ignore + new_attr = {k: new_attr} + + _new_attr = new_attr + _serialized = serialized + for k in keys: # type: ignore + if k not in _serialized: + _serialized.update(_new_attr) # type: ignore + _new_attr = _new_attr[k] # type: ignore + _serialized = _serialized[k] + 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 SerializationError(msg) from err + return serialized + + def body(self, data, data_type, **kwargs): + """Serialize data intended for a request body. + + :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 + :returns: The serialized request body + """ + + # Just in case this is a dict + 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: + if internal_data_type and issubclass(internal_data_type, Model): + is_xml_model_serialization = kwargs.setdefault("is_xml", internal_data_type.is_xml_model()) + else: + is_xml_model_serialization = False + if internal_data_type and not isinstance(internal_data_type, Enum): + try: + deserializer = Deserializer(self.dependencies) + # Since it's on serialization, it's almost sure that format is not JSON REST + # We're not able to deal with additional properties for now. + deserializer.additional_properties_detection = False + if is_xml_model_serialization: + deserializer.key_extractors = [ # type: ignore + attribute_key_case_insensitive_extractor, + ] + else: + deserializer.key_extractors = [ + rest_key_case_insensitive_extractor, + attribute_key_case_insensitive_extractor, + last_rest_key_case_insensitive_extractor, + ] + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access + except DeserializationError as 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 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 + :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) + if data_type == "bool": + output = json.dumps(output) + + if kwargs.get("skip_quote") is True: + output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) + else: + output = quote(str(output), safe="") + 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 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, 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] + 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) + if data_type == "bool": + output = json.dumps(output) + if kwargs.get("skip_quote") is True: + output = str(output) + else: + output = quote(str(output), safe="") + 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 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 + :returns: The serialized header + """ + try: + if data_type in ["[str]"]: + data = ["" if d is None else d for d in data] + + output = self.serialize_data(data, data_type, **kwargs) + if data_type == "bool": + output = json.dumps(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 object data: The data to be serialized. + :param str data_type: The type to be serialized from. + :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) + + if data_type in self.serialize_type: + return self.serialize_type[data_type](data, **kwargs) + + # If dependencies is empty, try with current data class + # It has to be a subclass of Enum anyway + enum_type = self.dependencies.get(data_type, data.__class__) + if issubclass(enum_type, Enum): + return Serializer.serialize_enum(data, enum_obj=enum_type) + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.serialize_type: + return self.serialize_type[iter_type](data, data_type[1:-1], **kwargs) + + except (ValueError, TypeError) as err: + msg = "Unable to serialize value: {!r} as type: {!r}." + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) + + @classmethod + 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 + if kwargs.get("is_xml", False): + return cls._xml_basic_types_serializers.get(data_type) + + @classmethod + def serialize_basic(cls, data, data_type, **kwargs): + """Serialize basic builting data type. + Serializes objects to str, int, float or bool. + + Possible 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 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 # 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 str data: Object to be serialized. + :rtype: str + :return: serialized object + """ + try: # If I received an enum, return its value + return data.value + except AttributeError: + pass + + try: + 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) + return str(data) + + def serialize_iter(self, data, iter_type, div=None, **kwargs): + """Serialize iterable. + + Supported kwargs: + - serialization_ctxt dict : The current entry of _attribute_map, or same format. + serialization_ctxt['type'] should be same as data_type. + - is_xml bool : If set, serialize as XML + + :param list data: Object to be serialized. + :param str iter_type: Type of object in the iterable. + :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.") + + serialization_ctxt = kwargs.get("serialization_ctxt", {}) + is_xml = kwargs.get("is_xml", False) + + serialized = [] + for d in data: + try: + serialized.append(self.serialize_data(d, iter_type, **kwargs)) + 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) + + if "xml" in serialization_ctxt or is_xml: + # XML serialization is more complicated + xml_desc = serialization_ctxt.get("xml", {}) + xml_name = xml_desc.get("name") + if not xml_name: + xml_name = serialization_ctxt["key"] + + # Create a wrap node if necessary (use the fact that Element and list have "append") + is_wrapped = xml_desc.get("wrapped", False) + node_name = xml_desc.get("itemsName", xml_name) + if is_wrapped: + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + else: + final_result = [] + # All list elements to "local_node" + for el in serialized: + if isinstance(el, ET.Element): + el_node = el + else: + el_node = _create_xml_node(node_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + if el is not None: # Otherwise it writes "None" :-p + el_node.text = str(el) + final_result.append(el_node) + return final_result + return serialized + + def serialize_dict(self, attr, dict_type, **kwargs): + """Serialize a dictionary of objects. + + :param dict attr: Object to be serialized. + :param str dict_type: Type of object in the dictionary. + :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 as err: + if isinstance(err, SerializationError): + raise + serialized[self.serialize_unicode(key)] = None + + if "xml" in serialization_ctxt: + # XML serialization is more complicated + xml_desc = serialization_ctxt["xml"] + xml_name = xml_desc["name"] + + final_result = _create_xml_node(xml_name, xml_desc.get("prefix", None), xml_desc.get("ns", None)) + for key, value in serialized.items(): + ET.SubElement(final_result, key).text = value + return final_result + + return serialized + + 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 + cast to str. + + :param dict attr: Object to be serialized. + :rtype: dict or str + :return: serialized object + """ + if attr is None: + return None + if isinstance(attr, ET.Element): + return attr + obj_type = type(attr) + if obj_type in self.basic_types: + 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 str: + return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) + + # If it's a model or I know this dependency, serialize as a Model + if obj_type in self.dependencies.values() or isinstance(attr, Model): + return self._serialize(attr) + + if obj_type == dict: + serialized = {} + for key, value in attr.items(): + try: + serialized[self.serialize_unicode(key)] = self.serialize_object(value, **kwargs) + except ValueError: + serialized[self.serialize_unicode(key)] = None + return serialized + + if obj_type == list: + serialized = [] + for obj in attr: + try: + serialized.append(self.serialize_object(obj, **kwargs)) + except ValueError: + pass + return serialized + return str(attr) + + @staticmethod + def serialize_enum(attr, enum_obj=None): + try: + result = attr.value + except AttributeError: + result = attr + try: + enum_obj(result) # type: ignore + return result + 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)) from exc + + @staticmethod + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument + """Serialize bytearray into base-64 string. + + :param str attr: Object to be serialized. + :rtype: str + :return: serialized base64 + """ + return b64encode(attr).decode() + + @staticmethod + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument + """Serialize str into base-64 string. + + :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): # pylint: disable=unused-argument + """Serialize Decimal object to float. + + :param decimal attr: Object to be serialized. + :rtype: float + :return: serialized decimal + """ + return float(attr) + + @staticmethod + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument + """Serialize long (Py2) or int (Py3). + + :param int attr: Object to be serialized. + :rtype: int/long + :return: serialized long + """ + return _long_type(attr) + + @staticmethod + 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) + t = "{:04}-{:02}-{:02}".format(attr.year, attr.month, attr.day) + return t + + @staticmethod + 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) + t = "{:02}:{:02}:{:02}".format(attr.hour, attr.minute, attr.second) + if attr.microsecond: + t += ".{:02}".format(attr.microsecond) + return t + + @staticmethod + 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): # 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. + :return: serialized rfc + """ + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + 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], + utc.tm_mday, + Serializer.months[utc.tm_mon], + utc.tm_year, + utc.tm_hour, + utc.tm_min, + utc.tm_sec, + ) + + @staticmethod + 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. + :return: serialized iso + """ + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + microseconds = str(attr.microsecond).rjust(6, "0").rstrip("0").ljust(3, "0") + if microseconds: + microseconds = "." + microseconds + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec + ) + return date + microseconds + "Z" + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise SerializationError(msg) from err + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise TypeError(msg) from err + + @staticmethod + 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 + :return: serialied unix + """ + if isinstance(attr, int): + return attr + try: + if not attr.tzinfo: + _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") + return int(calendar.timegm(attr.utctimetuple())) + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc + + +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + key = attr_desc["key"] + working_data = data + + while "." in 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 + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = working_data.get(working_key, 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 + return None + key = ".".join(dict_keys[1:]) + + return working_data.get(key) + + +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): + key = attr_desc["key"] + working_data = data + + while "." in key: + dict_keys = _FLATTEN.split(key) + if len(dict_keys) == 1: + key = _decode_attribute_map_key(dict_keys[0]) + break + working_key = _decode_attribute_map_key(dict_keys[0]) + working_data = attribute_key_case_insensitive_extractor(working_key, None, working_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 + return None + key = ".".join(dict_keys[1:]) + + if working_data: + return attribute_key_case_insensitive_extractor(key, None, working_data) + + +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): # 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) + return attribute_key_case_insensitive_extractor(dict_keys[-1], None, data) + + +def attribute_key_extractor(attr, _, data): + return data.get(attr) + + +def attribute_key_case_insensitive_extractor(attr, _, data): + found_key = None + lower_attr = attr.lower() + for key in data: + if lower_attr == key.lower(): + found_key = key + break + + return data.get(found_key) + + +def _extract_name_from_internal_type(internal_type): + """Given an internal type XML description, extract correct XML name with namespace. + + :param dict internal_type: An model type + :rtype: tuple + :returns: A tuple XML name + namespace dict + """ + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + 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) + return xml_name + + +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements + if isinstance(data, dict): + return None + + # Test if this model is XML ready first + if not isinstance(data, ET.Element): + return None + + xml_desc = attr_desc.get("xml", {}) + xml_name = xml_desc.get("name", attr_desc["key"]) + + # Look for a children + is_iter_type = attr_desc["type"].startswith("[") + is_wrapped = xml_desc.get("wrapped", False) + internal_type = attr_desc.get("internalType", None) + internal_type_xml_map = getattr(internal_type, "_xml_map", {}) + + # 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) + + # If it's an attribute, that's simple + if xml_desc.get("attr", False): + return data.get(xml_name) + + # If it's x-ms-text, that's simple too + if xml_desc.get("text", False): + return data.text + + # Scenario where I take the local name: + # - Wrapped node + # - Internal type is an enum (considered basic types) + # - Internal type has no XML/Name node + if is_wrapped or (internal_type and (issubclass(internal_type, Enum) or "name" not in internal_type_xml_map)): + children = data.findall(xml_name) + # If internal type has a local name and it's not a list, I use that name + elif not is_iter_type and internal_type and "name" in internal_type_xml_map: + xml_name = _extract_name_from_internal_type(internal_type) + children = data.findall(xml_name) + # That's an array + else: + if internal_type: # Complex type, ignore itemsName and use the complex type name + items_name = _extract_name_from_internal_type(internal_type) + else: + items_name = xml_desc.get("itemsName", xml_name) + children = data.findall(items_name) + + if len(children) == 0: + if is_iter_type: + if is_wrapped: + return None # is_wrapped no node, we want None + 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 + # 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. + + # Here it's not a itertype, we should have found one element only or empty + if len(children) > 1: + raise DeserializationError("Find several XML '{}' where it was not expected".format(xml_name)) + return children[0] + + +class Deserializer: + """Response object model deserializer. + + :param dict classes: Class type dictionary for deserializing complex types. + :ivar list key_extractors: Ordered list of extractors to be used by this deserializer. + """ + + 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}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: + self.deserialize_type = { + "iso-8601": Deserializer.deserialize_iso, + "rfc-1123": Deserializer.deserialize_rfc, + "unix-time": Deserializer.deserialize_unix, + "duration": Deserializer.deserialize_duration, + "date": Deserializer.deserialize_date, + "time": Deserializer.deserialize_time, + "decimal": Deserializer.deserialize_decimal, + "long": Deserializer.deserialize_long, + "bytearray": Deserializer.deserialize_bytearray, + "base64": Deserializer.deserialize_base64, + "object": self.deserialize_object, + "[]": self.deserialize_iter, + "{}": self.deserialize_dict, + } + self.deserialize_expected_types = { + "duration": (isodate.Duration, datetime.timedelta), + "iso-8601": (datetime.datetime), + } + 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 + # complicated, with no real scenario for now. + # So adding a flag to disable additional properties detection. This flag should be + # used if your expect the deserialization to NOT come from a JSON REST syntax. + # Otherwise, result are unexpected + self.additional_properties_detection = True + + def __call__(self, target_obj, response_data, content_type=None): + """Call the deserializer to process a REST response. + + :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. + :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): # 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. + :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(): # pylint: disable=protected-access + if attr in constants: + continue + value = getattr(data, attr) + if value is None: + continue + local_type = mapconfig["type"] + internal_data_type = local_type.strip("[]{}") + if internal_data_type not in self.dependencies or isinstance(internal_data_type, Enum): + continue + setattr(data, attr, self._deserialize(local_type, value)) + return data + except AttributeError: + return + + response, class_name = self._classify_target(target_obj, data) + + if isinstance(response, str): + return self.deserialize_data(data, response) + if isinstance(response, type) and issubclass(response, Enum): + return self.deserialize_enum(data, response) + + if data is None or data is CoreNull: + return data + try: + 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"... + if attr == "additional_properties" and attr_desc["key"] == "": + continue + raw_value = None + # Enhance attr_desc with some dynamic data + attr_desc = attr_desc.copy() # Do a copy, do not change the real one + internal_data_type = attr_desc["type"].strip("[]{}") + if internal_data_type in self.dependencies: + attr_desc["internalType"] = self.dependencies[internal_data_type] + + for key_extractor in self.key_extractors: + found_value = key_extractor(attr, attr_desc, data) + if found_value is not None: + if raw_value is not None and raw_value != found_value: + msg = ( + "Ignoring extracted value '%s' from %s for key '%s'" + " (duplicate extraction, follow extractors order)" + ) + _LOGGER.warning(msg, found_value, key_extractor, attr) + continue + raw_value = found_value + + 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 # 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: + return None + if "additional_properties" in attribute_map and attribute_map.get("additional_properties", {}).get("key") != "": + # Check empty string. If it's not empty, someone has a real "additionalProperties" + return None + if isinstance(data, ET.Element): + data = {el.tag: el.text for el in data} + + known_keys = { + _decode_attribute_map_key(_FLATTEN.split(desc["key"])[0]) + for desc in attribute_map.values() + if desc["key"] != "" + } + present_keys = set(data.keys()) + missing_keys = present_keys - known_keys + return {key: data[key] for key in missing_keys} + + def _classify_target(self, target, data): + """Check to see whether the deserialization target object can + be classified into a subclass. + 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 deserialize. + :return: The classified target object and its class name. + :rtype: tuple + """ + if target is None: + return None, None + + if isinstance(target, str): + try: + target = self.dependencies[target] + except KeyError: + return target, target + + try: + 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__ # type: ignore + + def failsafe_deserialize(self, target_obj, data, content_type=None): + """Ignores any errors encountered in deserialization, + and falls back to not deserializing the object. Recommended + for use in error deserialization, as we want to return the + HttpResponseError to users, and not have them deal with + a deserialization error. + + :param str target_obj: The target object type to deserialize to. + :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: # pylint: disable=bare-except + _LOGGER.debug( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + @staticmethod + def _unpack_content(raw_data, content_type=None): + """Extract the correct structure for deserialization. + + If raw_data is a PipelineResponse, try to extract the result of RawDeserializer. + if we can't, raise. Your Pipeline should have a RawDeserializer. + + If not a pipeline response and raw_data is bytes or string, use content-type + to decode it. If no content-type, try JSON. + + If raw_data is something else, bypass all logic and return it directly. + + :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", {}) + if context: + if RawDeserializer.CONTEXT_NAME in context: + return context[RawDeserializer.CONTEXT_NAME] + raise ValueError("This pipeline didn't have the RawDeserializer policy; can't deserialize") + + # Assume this is enough to recognize universal_http.ClientResponse without importing it + if hasattr(raw_data, "body"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text(), raw_data.headers) + + # Assume this enough to recognize requests.Response without importing it. + if hasattr(raw_data, "_content_consumed"): + return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) + + 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 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() # 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 # type: ignore + return response_obj + except TypeError as 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(): + setattr(response, attr, value) + return response + except Exception as exp: + msg = "Unable to populate response model. " + msg += "Type: {}, Error: {}".format(type(response), exp) + raise DeserializationError(msg) from exp + + 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. + :return: Deserialized object. + :rtype: object + """ + if data is None: + return data + + try: + if not data_type: + return data + if data_type in self.basic_types.values(): + return self.deserialize_basic(data, data_type) + if data_type in self.deserialize_type: + if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): + return data + + 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) + return data_val + + iter_type = data_type[0] + data_type[-1] + if iter_type in self.deserialize_type: + return self.deserialize_type[iter_type](data, data_type[1:-1]) + + obj_type = self.dependencies[data_type] + if issubclass(obj_type, Enum): + if isinstance(data, ET.Element): + data = data.text + return self.deserialize_enum(data, obj_type) + + except (ValueError, TypeError, AttributeError) as err: + msg = "Unable to deserialize response data." + msg += " Data: {}, {}".format(data, data_type) + 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: + return None + if isinstance(attr, ET.Element): # If I receive an element here, get the children + attr = list(attr) + if not isinstance(attr, (list, set)): + raise DeserializationError("Cannot deserialize as [{}] an object of type {}".format(iter_type, type(attr))) + return [self.deserialize_data(a, iter_type) for a in attr] + + def deserialize_dict(self, attr, dict_type): + """Deserialize a dictionary. + + :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): + return {x["key"]: self.deserialize_data(x["value"], dict_type) for x in attr} + + if isinstance(attr, ET.Element): + # Transform value into {"Key": "value"} + 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): # 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. + """ + 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, str): + return self.deserialize_basic(attr, "str") + obj_type = type(attr) + if obj_type in self.basic_types: + return self.deserialize_basic(attr, self.basic_types[obj_type]) + if obj_type is _long_type: + return self.deserialize_long(attr) + + if obj_type == dict: + deserialized = {} + for key, value in attr.items(): + try: + deserialized[key] = self.deserialize_object(value, **kwargs) + except ValueError: + deserialized[key] = None + return deserialized + + if obj_type == list: + deserialized = [] + for obj in attr: + try: + deserialized.append(self.deserialize_object(obj, **kwargs)) + except ValueError: + pass + return deserialized + + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_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 + valid bool values. + + :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. + """ + # If we're here, data is supposed to be a basic type. + # If it's still an XML node, take the text + if isinstance(attr, ET.Element): + attr = attr.text + if not attr: + if data_type == "str": + # None or '', node
    is empty string. + return "" + # 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) + if isinstance(attr, str): + if attr.lower() in ["true", "1"]: + return True + 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 # pylint: disable=eval-used + + @staticmethod + def deserialize_unicode(data): + """Preserve unicode objects in Python 2, otherwise return 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, + # and we try to deserialize a partial dict with enum inside + if isinstance(data, Enum): + return data + + # Consider this is real string + try: + if isinstance(data, unicode): # type: ignore + return data + except NameError: + return str(data) + return str(data) + + @staticmethod + def deserialize_enum(data, enum_obj): + """Deserialize string into enum object. + + If the string is not a valid enum value it will be returned as-is + and a warning will be logged. + + :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: + return data + if isinstance(data, Enum): + data = data.value + if isinstance(data, int): + # Workaround. We might consider remove it in the future. + try: + return list(enum_obj.__members__.values())[data] + except IndexError as exc: + error = "{!r} is not a valid index for enum {!r}" + raise DeserializationError(error.format(data, enum_obj)) from exc + try: + return enum_obj(str(data)) + except ValueError: + for enum_value in enum_obj: + if enum_value.value.lower() == str(data).lower(): + return enum_value + # We don't fail anymore for unknown value, we deserialize as a string + _LOGGER.warning("Deserializer is not able to find %s as valid enum in %s", data, enum_obj) + return Deserializer.deserialize_unicode(data) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return b64decode(encoded) + + @staticmethod + def deserialize_decimal(attr): + """Deserialize string into Decimal object. + + :param str attr: response string to be deserialized. + :return: Deserialized decimal + :raises DeserializationError: if string format invalid. + :rtype: decimal + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + return decimal.Decimal(str(attr)) # type: ignore + except decimal.DecimalException as err: + msg = "Invalid decimal {}".format(attr) + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + duration = isodate.parse_duration(attr) + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize duration object." + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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=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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + 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) + + @staticmethod + 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + parsed_date = email.utils.parsedate_tz(attr) # type: ignore + date_obj = datetime.datetime( + *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 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. + """ + if isinstance(attr, ET.Element): + attr = attr.text + try: + attr = attr.upper() # type: ignore + match = Deserializer.valid_date.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + except (ValueError, OverflowError, AttributeError) as err: + msg = "Cannot deserialize datetime object." + raise DeserializationError(msg) from err + return date_obj + + @staticmethod + def deserialize_unix(attr): + """Serialize Datetime object into IntTime format. + This is represented as seconds. + + :param int attr: Object to be serialized. + :return: Deserialized datetime + :rtype: Datetime + :raises DeserializationError: if format invalid + """ + if isinstance(attr, ET.Element): + 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 DeserializationError(msg) from err + return date_obj diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_version.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_version.py index 8042a5e50f17..6ba690f28963 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_version.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "34.1.0" +VERSION = "35.0.0" diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/aio/_compute_management_client.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/aio/_compute_management_client.py index 906e76addcff..c478a49f5005 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/aio/_compute_management_client.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/aio/_compute_management_client.py @@ -7,16 +7,18 @@ # -------------------------------------------------------------------------- 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 as _models -from ..._serialization import Deserializer, Serializer +from .._utils.serialization import Deserializer, Serializer from ._configuration import ComputeManagementClientConfiguration from .operations import ( CloudServiceOperatingSystemsOperations, @@ -52,7 +54,7 @@ class ComputeManagementClient: :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. 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 "2024-11-04". Note that overriding this default value may result in unsupported behavior. @@ -62,15 +64,17 @@ class ComputeManagementClient: """ 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 = ComputeManagementClientConfiguration( - credential=credential, subscription_id=subscription_id, **kwargs + credential=credential, subscription_id=subscription_id, credential_scopes=credential_scopes, **kwargs ) + _policies = kwargs.pop("policies", None) if _policies is None: _policies = [ @@ -89,7 +93,9 @@ def __init__( policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, self._config.http_logging_policy, ] - self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs) + 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) diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/aio/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/aio/operations/_operations.py index 0f2f5cf59c24..ecd7f51d85a1 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/aio/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/aio/operations/_operations.py @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, AsyncIterable, AsyncIterator, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import AsyncPipelineClient from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ( ClientAuthenticationError, @@ -32,6 +33,7 @@ from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models +from ..._utils.serialization import Deserializer, Serializer from ...operations._operations import ( build_cloud_service_operating_systems_get_os_family_request, build_cloud_service_operating_systems_get_os_version_request, @@ -64,11 +66,8 @@ build_cloud_services_update_domain_walk_update_domain_request, build_cloud_services_update_request, ) +from .._configuration import ComputeManagementClientConfiguration -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -87,10 +86,10 @@ class CloudServiceRoleInstancesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _delete_initial( @@ -830,10 +829,10 @@ class CloudServiceRolesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async @@ -994,10 +993,10 @@ class CloudServicesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _create_or_update_initial( @@ -2731,10 +2730,10 @@ class CloudServicesUpdateDomainOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") async def _walk_update_domain_initial( @@ -3101,10 +3100,10 @@ class CloudServiceOperatingSystemsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace_async diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/models/_models_py3.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/models/_models_py3.py index 7c7b0dca974a..2b52ec37135e 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/models/_models_py3.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/models/_models_py3.py @@ -7,19 +7,14 @@ # 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, 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 +from .._utils import serialization as _serialization if TYPE_CHECKING: from .. import models as _models -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] class ApiError(_serialization.Model): @@ -177,9 +172,9 @@ def __init__( :paramtype zones: list[str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags self.properties = properties @@ -337,7 +332,7 @@ def __init__( self.protected_settings = protected_settings self.protected_settings_from_key_vault = protected_settings_from_key_vault self.force_update_tag = force_update_tag - self.provisioning_state = None + self.provisioning_state: Optional[str] = None self.roles_applied_to = roles_applied_to @@ -379,9 +374,9 @@ def __init__(self, *, role_instance: Optional["_models.InstanceViewStatusesSumma """ super().__init__(**kwargs) self.role_instance = role_instance - self.sdk_version = None - self.private_ids = None - self.statuses = None + self.sdk_version: Optional[str] = None + self.private_ids: Optional[List[str]] = None + self.statuses: Optional[List["_models.ResourceInstanceViewStatus"]] = None class CloudServiceListResult(_serialization.Model): @@ -642,8 +637,8 @@ def __init__( self.os_profile = os_profile self.network_profile = network_profile self.extension_profile = extension_profile - self.provisioning_state = None - self.unique_id = None + self.provisioning_state: Optional[str] = None + self.unique_id: Optional[str] = None class CloudServiceRole(_serialization.Model): @@ -695,10 +690,10 @@ def __init__( :paramtype properties: ~azure.mgmt.compute.v2024_11_04.models.CloudServiceRoleProperties """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.location: Optional[str] = None self.sku = sku self.properties = properties @@ -810,7 +805,7 @@ class CloudServiceRoleProperties(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.unique_id = None + self.unique_id: Optional[str] = None class CloudServiceRoleSku(_serialization.Model): @@ -1089,8 +1084,8 @@ class InstanceSku(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.tier = None + self.name: Optional[str] = None + self.tier: Optional[str] = None class InstanceViewStatusesSummary(_serialization.Model): @@ -1113,7 +1108,7 @@ class InstanceViewStatusesSummary(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.statuses_summary = None + self.statuses_summary: Optional[List["_models.StatusCodeCount"]] = None class LoadBalancerConfiguration(_serialization.Model): @@ -1319,10 +1314,10 @@ def __init__(self, *, properties: Optional["_models.OSFamilyProperties"] = None, :paramtype properties: ~azure.mgmt.compute.v2024_11_04.models.OSFamilyProperties """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.location: Optional[str] = None self.properties = properties @@ -1388,9 +1383,9 @@ class OSFamilyProperties(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.name = None - self.label = None - self.versions = None + self.name: Optional[str] = None + self.label: Optional[str] = None + self.versions: Optional[List["_models.OSVersionPropertiesBase"]] = None class OSVersion(_serialization.Model): @@ -1431,10 +1426,10 @@ def __init__(self, *, properties: Optional["_models.OSVersionProperties"] = None :paramtype properties: ~azure.mgmt.compute.v2024_11_04.models.OSVersionProperties """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.location: Optional[str] = None self.properties = properties @@ -1512,12 +1507,12 @@ class OSVersionProperties(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.family = None - self.family_label = None - self.version = None - self.label = None - self.is_default = None - self.is_active = None + self.family: Optional[str] = None + self.family_label: Optional[str] = None + self.version: Optional[str] = None + self.label: Optional[str] = None + self.is_default: Optional[bool] = None + self.is_active: Optional[bool] = None class OSVersionPropertiesBase(_serialization.Model): @@ -1552,10 +1547,10 @@ class OSVersionPropertiesBase(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.version = None - self.label = None - self.is_default = None - self.is_active = None + self.version: Optional[str] = None + self.label: Optional[str] = None + self.is_default: Optional[bool] = None + self.is_active: Optional[bool] = None class Resource(_serialization.Model): @@ -1600,9 +1595,9 @@ def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kw :paramtype tags: dict[str, str] """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.location = location self.tags = tags @@ -1645,10 +1640,10 @@ def __init__(self, *, level: Optional[Union[str, "_models.StatusLevelTypes"]] = :paramtype level: str or ~azure.mgmt.compute.v2024_11_04.models.StatusLevelTypes """ super().__init__(**kwargs) - self.code = None - self.display_status = None - self.message = None - self.time = None + self.code: Optional[str] = None + self.display_status: Optional[str] = None + self.message: Optional[str] = None + self.time: Optional[datetime.datetime] = None self.level = level @@ -1692,9 +1687,9 @@ def __init__(self, *, location: Optional[str] = None, tags: Optional[Dict[str, s """ super().__init__(**kwargs) self.location = location - self.id = None - self.name = None - self.type = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None self.tags = tags @@ -1751,11 +1746,11 @@ def __init__( :paramtype properties: ~azure.mgmt.compute.v2024_11_04.models.RoleInstanceProperties """ super().__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None - self.tags = None + self.id: Optional[str] = None + self.name: Optional[str] = None + self.type: Optional[str] = None + self.location: Optional[str] = None + self.tags: Optional[Dict[str, str]] = None self.sku = sku self.properties = properties @@ -1815,7 +1810,7 @@ class RoleInstanceNetworkProfile(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.network_interfaces = None + self.network_interfaces: Optional[List["_models.SubResource"]] = None class RoleInstanceProperties(_serialization.Model): @@ -1912,10 +1907,10 @@ class RoleInstanceView(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.platform_update_domain = None - self.platform_fault_domain = None - self.private_id = None - self.statuses = None + self.platform_update_domain: Optional[int] = None + self.platform_fault_domain: Optional[int] = None + self.private_id: Optional[str] = None + self.statuses: Optional[List["_models.ResourceInstanceViewStatus"]] = None class StatusCodeCount(_serialization.Model): @@ -1942,8 +1937,8 @@ class StatusCodeCount(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.code = None - self.count = None + self.code: Optional[str] = None + self.count: Optional[int] = None class SubResource(_serialization.Model): @@ -1986,7 +1981,7 @@ class SubResourceReadOnly(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None + self.id: Optional[str] = None class SystemData(_serialization.Model): @@ -2015,8 +2010,8 @@ class SystemData(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.created_at = None - self.last_modified_at = None + self.created_at: Optional[datetime.datetime] = None + self.last_modified_at: Optional[datetime.datetime] = None class UpdateDomain(_serialization.Model): @@ -2043,8 +2038,8 @@ class UpdateDomain(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.id = None - self.name = None + self.id: Optional[str] = None + self.name: Optional[str] = None class UpdateDomainListResult(_serialization.Model): @@ -2105,5 +2100,5 @@ class UserAssignedIdentitiesValue(_serialization.Model): def __init__(self, **kwargs: Any) -> None: """ """ super().__init__(**kwargs) - self.principal_id = None - self.client_id = None + self.principal_id: Optional[str] = None + self.client_id: Optional[str] = None diff --git a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/operations/_operations.py b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/operations/_operations.py index 48e68f9fb9c9..3221698a6f0e 100644 --- a/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/operations/_operations.py +++ b/sdk/compute/azure-mgmt-compute/azure/mgmt/compute/v2024_11_04/operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,11 +6,12 @@ # 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 -import sys from typing import Any, Callable, Dict, IO, Iterable, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse +from azure.core import PipelineClient from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, @@ -31,12 +32,9 @@ from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models -from ..._serialization import Serializer +from .._configuration import ComputeManagementClientConfiguration +from .._utils.serialization import Deserializer, Serializer -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -57,7 +55,7 @@ def build_cloud_service_role_instances_delete_request( # pylint: disable=name-t _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -95,7 +93,7 @@ def build_cloud_service_role_instances_get_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -129,7 +127,7 @@ def build_cloud_service_role_instances_get_instance_view_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -166,7 +164,7 @@ def build_cloud_service_role_instances_list_request( # pylint: disable=name-too _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -199,7 +197,7 @@ def build_cloud_service_role_instances_restart_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -231,7 +229,7 @@ def build_cloud_service_role_instances_reimage_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -263,7 +261,7 @@ def build_cloud_service_role_instances_rebuild_request( # pylint: disable=name- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/rebuild", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -295,7 +293,7 @@ def build_cloud_service_role_instances_get_remote_desktop_file_request( # pylin _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/remoteDesktopFile", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleInstanceName": _SERIALIZER.url("role_instance_name", role_instance_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -327,7 +325,7 @@ def build_cloud_service_roles_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roles/{roleName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "roleName": _SERIALIZER.url("role_name", role_name, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -359,7 +357,7 @@ def build_cloud_service_roles_list_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roles", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -391,7 +389,7 @@ def build_cloud_services_create_or_update_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -425,7 +423,7 @@ def build_cloud_services_update_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -458,7 +456,7 @@ def build_cloud_services_delete_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -489,7 +487,7 @@ def build_cloud_services_get_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -520,7 +518,7 @@ def build_cloud_services_get_instance_view_request( # pylint: disable=name-too- _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/instanceView", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -573,7 +571,7 @@ def build_cloud_services_list_request(resource_group_name: str, subscription_id: _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -603,7 +601,7 @@ def build_cloud_services_start_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/start", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -634,7 +632,7 @@ def build_cloud_services_power_off_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/poweroff", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -666,7 +664,7 @@ def build_cloud_services_restart_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/restart", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -700,7 +698,7 @@ def build_cloud_services_reimage_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/reimage", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -734,7 +732,7 @@ def build_cloud_services_rebuild_request( _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/rebuild", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -768,7 +766,7 @@ def build_cloud_services_delete_instances_request( # pylint: disable=name-too-l _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/delete", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -802,7 +800,7 @@ def build_cloud_services_update_domain_walk_update_domain_request( # pylint: di _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains/{updateDomain}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -836,7 +834,7 @@ def build_cloud_services_update_domain_get_update_domain_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains/{updateDomain}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -868,7 +866,7 @@ def build_cloud_services_update_domain_list_update_domains_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "cloudServiceName": _SERIALIZER.url("cloud_service_name", cloud_service_name, "str"), @@ -899,7 +897,7 @@ def build_cloud_service_operating_systems_get_os_version_request( # pylint: dis _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsVersions/{osVersionName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "osVersionName": _SERIALIZER.url("os_version_name", os_version_name, "str"), @@ -930,7 +928,7 @@ def build_cloud_service_operating_systems_list_os_versions_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsVersions", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -960,7 +958,7 @@ def build_cloud_service_operating_systems_get_os_family_request( # pylint: disa _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsFamilies/{osFamilyName}", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "osFamilyName": _SERIALIZER.url("os_family_name", os_family_name, "str"), @@ -991,7 +989,7 @@ def build_cloud_service_operating_systems_list_os_families_request( # pylint: d _url = kwargs.pop( "template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsFamilies", - ) # pylint: disable=line-too-long + ) path_format_arguments = { "location": _SERIALIZER.url("location", location, "str"), "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), @@ -1022,10 +1020,10 @@ class CloudServiceRoleInstancesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _delete_initial( @@ -1764,10 +1762,10 @@ class CloudServiceRolesOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace @@ -1927,10 +1925,10 @@ class CloudServicesOperations: # pylint: disable=too-many-public-methods 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _create_or_update_initial( @@ -3650,10 +3648,10 @@ class CloudServicesUpdateDomainOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") def _walk_update_domain_initial( @@ -4019,10 +4017,10 @@ class CloudServiceOperatingSystemsOperations: 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: ComputeManagementClientConfiguration = 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") self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version") @distributed_trace diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_multi_role.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_multi_role.py index bf3a8452b426..b1f6d5819e32 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_multi_role.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_multi_role.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_multi_role_with_zones.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_multi_role_with_zones.py index d57098825ef3..a33c60aacba0 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_multi_role_with_zones.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_multi_role_with_zones.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role.py index 86e162ab72e4..7da75e34b09c 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role_and_certificate.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role_and_certificate.py index af69aef19276..3b89b3ccd0c9 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role_and_certificate.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role_and_certificate.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role_and_rdp.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role_and_rdp.py index 7ab165b9c9e8..4232f304eb55 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role_and_rdp.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_create_with_single_role_and_rdp.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_delete.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_delete.py index 2851b5b04159..d90f4be001f6 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_delete.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_delete.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_get_instance_view_with_multi_role.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_get_instance_view_with_multi_role.py index bf29b73f203c..c0807e229ca4 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_get_instance_view_with_multi_role.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_get_instance_view_with_multi_role.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_get_with_multi_role_and_rdp.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_get_with_multi_role_and_rdp.py index 9b55d77c548a..79bc4b57d8b6 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_get_with_multi_role_and_rdp.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_get_with_multi_role_and_rdp.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_list_by_resource_group.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_list_by_resource_group.py index d6dd72634a30..560e851c2663 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_list_by_resource_group.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_list_by_resource_group.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_list_by_subscription.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_list_by_subscription.py index b6f2275d3fcf..974f898952fd 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_list_by_subscription.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_list_by_subscription.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_families_list.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_families_list.py index 9b3e32b5a128..28355d769fd5 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_families_list.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_families_list.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_family_get.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_family_get.py index 49bad03daf85..e75f605526d9 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_family_get.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_family_get.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_version_get.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_version_get.py index 95a788765ee0..45e42980d9fb 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_version_get.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_version_get.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_version_list.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_version_list.py index 8cba44e533f3..ca6548120c96 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_version_list.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_os_version_list.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_power_off.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_power_off.py index 0fc51f290487..0a50f23c3ad6 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_power_off.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_power_off.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_get.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_get.py index e16ce8b338cf..b24b53535af1 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_get.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_get.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_delete.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_delete.py index 4e596e423902..c9626f7888fb 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_delete.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_delete.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_delete_by_cloud_service.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_delete_by_cloud_service.py index bf45db6f130b..34ad242eb72a 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_delete_by_cloud_service.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_delete_by_cloud_service.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get.py index 6236d2409659..4d4680a92418 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get_instance_view.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get_instance_view.py index c27e710d4bf5..22f3e69e7de2 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get_instance_view.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get_instance_view.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get_remote_desktop_file.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get_remote_desktop_file.py index 5f122dd40bc5..8bc5597d91b9 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get_remote_desktop_file.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_get_remote_desktop_file.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_rebuild.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_rebuild.py index 5c7e04dcd164..49fcbed0d45f 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_rebuild.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_rebuild.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_rebuild_by_cloud_service.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_rebuild_by_cloud_service.py index ebd2113a3901..0d7bd42e4c22 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_rebuild_by_cloud_service.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_rebuild_by_cloud_service.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_reimage.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_reimage.py index a4081cb64ebd..9423eec9b8e2 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_reimage.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_reimage.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_reimage_by_cloud_service.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_reimage_by_cloud_service.py index 539fa11c3f93..f083223b9f90 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_reimage_by_cloud_service.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_reimage_by_cloud_service.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_restart.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_restart.py index 6c36d7239411..c3e43a744084 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_restart.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_restart.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_restart_by_cloud_service.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_restart_by_cloud_service.py index f0c5b3eabd81..56ce358e4f6d 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_restart_by_cloud_service.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_instance_restart_by_cloud_service.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_list.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_list.py index 0ecc989267ef..63a0cbe33bb7 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_list.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_role_list.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_roles_instance_list.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_roles_instance_list.py index cce48fed1e7c..485af911d58e 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_roles_instance_list.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_roles_instance_list.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_start.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_start.py index cdc2f6174d63..2c476b3329f5 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_start.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_start.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_get.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_get.py index dc4235f6dfd6..089858e36412 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_get.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_get.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_list.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_list.py index 6cf055f2fa5f..b88da5d42dd8 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_list.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_list.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_update.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_update.py index 814f70dd7a63..e0db89c068d9 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_update.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_domain_update.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_to_include_tags.py b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_to_include_tags.py index 7a7a2458ef37..797401b358ac 100644 --- a/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_to_include_tags.py +++ b/sdk/compute/azure-mgmt-compute/generated_samples/cloud_service_update_to_include_tags.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_operating_systems_operations.py b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_operating_systems_operations.py index 20a0a6ae4058..3615db67ff81 100644 --- a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_operating_systems_operations.py +++ b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_operating_systems_operations.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- import pytest -from azure.mgmt.compute import ComputeManagementClient +from azure.mgmt.compute.v2024_11_04 import ComputeManagementClient from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy diff --git a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_operating_systems_operations_async.py b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_operating_systems_operations_async.py index 57b7b4e8c2a5..05e4101bbf9d 100644 --- a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_operating_systems_operations_async.py +++ b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_operating_systems_operations_async.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- import pytest -from azure.mgmt.compute.aio import ComputeManagementClient +from azure.mgmt.compute.v2024_11_04.aio import ComputeManagementClient from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer from devtools_testutils.aio import recorded_by_proxy_async diff --git a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_role_instances_operations.py b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_role_instances_operations.py index bd075118a29d..b6fd0ee5cf67 100644 --- a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_role_instances_operations.py +++ b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_role_instances_operations.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- import pytest -from azure.mgmt.compute import ComputeManagementClient +from azure.mgmt.compute.v2024_11_04 import ComputeManagementClient from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy diff --git a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_role_instances_operations_async.py b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_role_instances_operations_async.py index 41a423723d1c..bf3ba5a81c30 100644 --- a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_role_instances_operations_async.py +++ b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_role_instances_operations_async.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- import pytest -from azure.mgmt.compute.aio import ComputeManagementClient +from azure.mgmt.compute.v2024_11_04.aio import ComputeManagementClient from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer from devtools_testutils.aio import recorded_by_proxy_async diff --git a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_roles_operations.py b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_roles_operations.py index 60efffd99f02..7f7e195fad46 100644 --- a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_roles_operations.py +++ b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_roles_operations.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- import pytest -from azure.mgmt.compute import ComputeManagementClient +from azure.mgmt.compute.v2024_11_04 import ComputeManagementClient from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy diff --git a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_roles_operations_async.py b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_roles_operations_async.py index 179c7e979563..6a36d7047d27 100644 --- a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_roles_operations_async.py +++ b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_service_roles_operations_async.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- import pytest -from azure.mgmt.compute.aio import ComputeManagementClient +from azure.mgmt.compute.v2024_11_04.aio import ComputeManagementClient from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer from devtools_testutils.aio import recorded_by_proxy_async diff --git a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_operations.py b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_operations.py index 5a3f00457ffd..13cd8b0671d1 100644 --- a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_operations.py +++ b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_operations.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- import pytest -from azure.mgmt.compute import ComputeManagementClient +from azure.mgmt.compute.v2024_11_04 import ComputeManagementClient from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy diff --git a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_operations_async.py b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_operations_async.py index 9cb662e43bba..60ebb7e90508 100644 --- a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_operations_async.py +++ b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_operations_async.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- import pytest -from azure.mgmt.compute.aio import ComputeManagementClient +from azure.mgmt.compute.v2024_11_04.aio import ComputeManagementClient from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer from devtools_testutils.aio import recorded_by_proxy_async diff --git a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_update_domain_operations.py b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_update_domain_operations.py index 7482e2c75eef..c11746d8b40f 100644 --- a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_update_domain_operations.py +++ b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_update_domain_operations.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- import pytest -from azure.mgmt.compute import ComputeManagementClient +from azure.mgmt.compute.v2024_11_04 import ComputeManagementClient from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy diff --git a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_update_domain_operations_async.py b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_update_domain_operations_async.py index 59df1d30db4d..18e2a8764cb5 100644 --- a/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_update_domain_operations_async.py +++ b/sdk/compute/azure-mgmt-compute/generated_tests/test_compute_management_cloud_services_update_domain_operations_async.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- import pytest -from azure.mgmt.compute.aio import ComputeManagementClient +from azure.mgmt.compute.v2024_11_04.aio import ComputeManagementClient from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer from devtools_testutils.aio import recorded_by_proxy_async diff --git a/sdk/compute/azure-mgmt-compute/setup.py b/sdk/compute/azure-mgmt-compute/setup.py index 6d91083b1fb1..79c147630d31 100644 --- a/sdk/compute/azure-mgmt-compute/setup.py +++ b/sdk/compute/azure-mgmt-compute/setup.py @@ -53,7 +53,6 @@ "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", @@ -77,7 +76,7 @@ "isodate>=0.6.1", "typing-extensions>=4.6.0", "azure-common>=1.1", - "azure-mgmt-core>=1.3.2", + "azure-mgmt-core>=1.5.0", ], - python_requires=">=3.8", + python_requires=">=3.9", )