From 3c06640bc0cecc9efa4db33c791c55c6bbd86dc5 Mon Sep 17 00:00:00 2001 From: Suat Iskender Date: Wed, 25 Mar 2026 16:48:02 -0400 Subject: [PATCH 1/3] [azure-mgmt-deviceregistry] Generate SDK for API version 2026-03-01-preview --- .../azure-mgmt-deviceregistry/CHANGELOG.md | 26 + .../azure-mgmt-deviceregistry/README.md | 6 +- .../azure-mgmt-deviceregistry/_metadata.json | 6 +- .../apiview-properties.json | 44 + .../azure/mgmt/deviceregistry/_client.py | 13 +- .../mgmt/deviceregistry/_configuration.py | 7 +- .../mgmt/deviceregistry/_utils/model_base.py | 141 +- .../deviceregistry/_utils/serialization.py | 17 +- .../azure/mgmt/deviceregistry/_version.py | 2 +- .../azure/mgmt/deviceregistry/aio/_client.py | 13 +- .../mgmt/deviceregistry/aio/_configuration.py | 7 +- .../deviceregistry/aio/operations/__init__.py | 4 + .../aio/operations/_operations.py | 3770 ++++++++- .../mgmt/deviceregistry/models/__init__.py | 32 + .../mgmt/deviceregistry/models/_enums.py | 27 +- .../mgmt/deviceregistry/models/_models.py | 521 +- .../deviceregistry/operations/__init__.py | 4 + .../deviceregistry/operations/_operations.py | 7252 ++++++++++++----- ...reate_or_replace_asset_endpoint_profile.py | 2 +- ...ndpoint_profile_with_discovered_aep_ref.py | 2 +- ...replace_asset_with_discovered_asset_ref.py | 2 +- ...or_replace_asset_with_external_asset_id.py | 2 +- ...e_or_replace_asset_without_display_name.py | 2 +- ...replace_asset_without_external_asset_id.py | 2 +- .../create_or_replace_credentials.py | 43 + .../create_or_replace_namespace_asset.py | 33 +- .../create_or_replace_namespace_device.py | 9 +- ...replace_namespace_device_edge_anonymous.py | 4 +- ...ace_namespace_device_edge_username_pass.py | 4 +- ...e_or_replace_namespace_device_edge_x509.py | 8 +- ...e_or_replace_namespace_discovered_asset.py | 35 +- ..._or_replace_namespace_discovered_device.py | 8 +- ...ate_or_replace_namespace_with_endpoints.py | 15 +- .../create_or_replace_policies.py | 51 + .../create_or_replace_schema.py | 2 +- .../create_or_replace_schema_registry.py | 2 +- .../create_or_replace_schema_version.py | 2 +- .../credentials_synchronize.py | 41 + .../generated_samples/delete_asset.py | 2 +- .../delete_asset_endpoint_profile.py | 2 +- .../generated_samples/delete_credentials.py | 41 + .../generated_samples/delete_namespace.py | 2 +- .../delete_namespace_asset.py | 2 +- .../delete_namespace_device.py | 2 +- .../delete_namespace_discovered_asset.py | 2 +- .../delete_namespace_discovered_device.py | 2 +- .../generated_samples/delete_policies.py | 42 + .../generated_samples/delete_schema.py | 2 +- .../delete_schema_registry.py | 2 +- .../delete_schema_version.py | 2 +- .../generated_samples/get_asset.py | 2 +- .../get_asset_endpoint_profile.py | 2 +- ...asset_endpoint_profile_with_sync_status.py | 2 +- .../get_asset_with_sync_status.py | 2 +- .../get_billing_container.py | 2 +- .../generated_samples/get_credentials.py | 42 + .../generated_samples/get_namespace.py | 2 +- .../generated_samples/get_namespace_asset.py | 2 +- .../generated_samples/get_namespace_device.py | 2 +- ...space_device_with_endpoint_error_status.py | 2 +- .../get_namespace_discovered_asset.py | 2 +- .../get_namespace_discovered_device.py | 2 +- .../generated_samples/get_operation_status.py | 2 +- .../generated_samples/get_policies.py | 43 + .../generated_samples/get_schema.py | 2 +- .../generated_samples/get_schema_registry.py | 2 +- .../generated_samples/get_schema_version.py | 2 +- ...set_endpoint_profiles_by_resource_group.py | 2 +- ...asset_endpoint_profiles_by_subscription.py | 2 +- .../list_assets_by_resource_group.py | 2 +- .../list_assets_by_subscription.py | 2 +- ...list_billing_containers_by_subscription.py | 2 +- .../list_credentials_by_resource_group.py | 43 + ...list_namespace_assets_by_resource_group.py | 2 +- .../list_namespace_by_resource_group.py | 2 +- .../list_namespace_by_subscription.py | 2 +- ...ist_namespace_devices_by_resource_group.py | 2 +- ...ace_discovered_assets_by_resource_group.py | 2 +- ...ce_discovered_devices_by_resource_group.py | 2 +- .../generated_samples/list_operations.py | 2 +- .../list_policies_by_resource_group.py | 43 + ...ist_schema_registries_by_resource_group.py | 2 +- .../list_schema_registries_by_subscription.py | 2 +- .../list_schema_versions_by_schema.py | 2 +- .../list_schemas_by_schema_registry.py | 2 +- .../migrate_assets_namespace.py | 2 +- .../namespace_devices_revoke.py | 43 + .../namespace_devices_revoke_failure.py | 43 + .../policies_activate_bring_your_own_root.py | 46 + .../policies_revoke_issuer.py | 42 + .../generated_samples/update_asset.py | 2 +- .../update_asset_endpoint_profile.py | 2 +- .../generated_samples/update_credentials.py | 43 + .../update_namespace_asset.py | 2 +- .../update_namespace_device.py | 8 +- .../update_namespace_discovered_asset.py | 2 +- .../update_namespace_discovered_device.py | 8 +- .../update_namespace_endpoints.py | 8 +- .../generated_samples/update_policies.py | 51 + .../update_schema_registry.py | 2 +- ...ce_registry_mgmt_credentials_operations.py | 102 + ...istry_mgmt_credentials_operations_async.py | 111 + ...istry_mgmt_namespace_devices_operations.py | 15 + ...mgmt_namespace_devices_operations_async.py | 17 + ...evice_registry_mgmt_policies_operations.py | 153 + ...registry_mgmt_policies_operations_async.py | 164 + .../azure-mgmt-deviceregistry/pyproject.toml | 43 +- .../tsp-location.yaml | 4 +- 108 files changed, 10844 insertions(+), 2566 deletions(-) create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_credentials.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_policies.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/credentials_synchronize.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_credentials.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_policies.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_credentials.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_policies.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_credentials_by_resource_group.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_policies_by_resource_group.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/namespace_devices_revoke.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/namespace_devices_revoke_failure.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/policies_activate_bring_your_own_root.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/policies_revoke_issuer.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_credentials.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_policies.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_credentials_operations.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_credentials_operations_async.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_policies_operations.py create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_policies_operations_async.py diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/CHANGELOG.md b/sdk/deviceregistry/azure-mgmt-deviceregistry/CHANGELOG.md index 788b430b41b0..c4dd56b710bf 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/CHANGELOG.md +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/CHANGELOG.md @@ -1,5 +1,31 @@ # Release History +## 1.2.0b1 (2026-03-25) + +### Features Added + + - Based on API version `2026-03-01-preview` + - Client `DeviceRegistryMgmtClient` added operation group `credentials` + - Client `DeviceRegistryMgmtClient` added operation group `policies` + - Added model `ActivateBringYourOwnRootRequest` + - Added model `BringYourOwnRoot` + - Added model `CertificateAuthorityConfiguration` + - Added model `CertificateConfiguration` + - Added model `Credential` + - Added model `CredentialProperties` + - Added model `CredentialUpdate` + - Added model `DeviceCredentialPolicy` + - Added model `DeviceCredentialsRevokeRequest` + - Added model `LeafCertificateConfiguration` + - Added model `Policy` + - Added model `PolicyProperties` + - Added model `PolicyUpdate` + - Added model `PolicyUpdateProperties` + - Added enum `BringYourOwnRootStatus` + - Added enum `SupportedKeyType` + - Added operation group `CredentialsOperations` + - Added operation group `PoliciesOperations` + ## 1.1.0 (2025-10-23) ### Features Added diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/README.md b/sdk/deviceregistry/azure-mgmt-deviceregistry/README.md index 785eba4ed04c..e45ec9fd101e 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/README.md +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/README.md @@ -1,7 +1,7 @@ # Microsoft Azure SDK for Python This is the Microsoft Azure Deviceregistry 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, [Microsoft Entra ID](https://aka.ms/awps/aad) token authentication depends on correct configure of following environment variables. - `AZURE_CLIENT_ID` for Azure client ID. - `AZURE_TENANT_ID` for Azure tenant ID. diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/_metadata.json b/sdk/deviceregistry/azure-mgmt-deviceregistry/_metadata.json index 3395d28a2a28..0adfa0fd01cf 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/_metadata.json +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/_metadata.json @@ -1,7 +1,7 @@ { - "apiVersion": "2025-10-01", - "commit": "b562b95b6429f78f6c8629d5751bfeef1be7cacd", + "apiVersion": "2026-03-01-preview", + "commit": "6f8788a943c0b1e7f76906cdf10113e6d04b14de", "repository_url": "https://github.com/Azure/azure-rest-api-specs", "typespec_src": "specification/deviceregistry/DeviceRegistry.Management", - "emitterVersion": "0.52.1" + "emitterVersion": "0.61.0" } \ No newline at end of file diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/apiview-properties.json b/sdk/deviceregistry/azure-mgmt-deviceregistry/apiview-properties.json index 0022a1ea6707..cbaad59b3ec7 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/apiview-properties.json +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/apiview-properties.json @@ -1,6 +1,7 @@ { "CrossLanguagePackageId": "Microsoft.DeviceRegistry", "CrossLanguageDefinitionId": { + "azure.mgmt.deviceregistry.models.ActivateBringYourOwnRootRequest": "Microsoft.DeviceRegistry.ActivateBringYourOwnRootRequest", "azure.mgmt.deviceregistry.models.Resource": "Azure.ResourceManager.CommonTypes.Resource", "azure.mgmt.deviceregistry.models.TrackedResource": "Azure.ResourceManager.CommonTypes.TrackedResource", "azure.mgmt.deviceregistry.models.Asset": "Microsoft.DeviceRegistry.Asset", @@ -21,7 +22,13 @@ "azure.mgmt.deviceregistry.models.ProxyResource": "Azure.ResourceManager.CommonTypes.ProxyResource", "azure.mgmt.deviceregistry.models.BillingContainer": "Microsoft.DeviceRegistry.BillingContainer", "azure.mgmt.deviceregistry.models.BillingContainerProperties": "Microsoft.DeviceRegistry.BillingContainerProperties", + "azure.mgmt.deviceregistry.models.BringYourOwnRoot": "Microsoft.DeviceRegistry.BringYourOwnRoot", "azure.mgmt.deviceregistry.models.BrokerStateStoreDestinationConfiguration": "Microsoft.DeviceRegistry.BrokerStateStoreDestinationConfiguration", + "azure.mgmt.deviceregistry.models.CertificateAuthorityConfiguration": "Microsoft.DeviceRegistry.CertificateAuthorityConfiguration", + "azure.mgmt.deviceregistry.models.CertificateConfiguration": "Microsoft.DeviceRegistry.CertificateConfiguration", + "azure.mgmt.deviceregistry.models.Credential": "Microsoft.DeviceRegistry.Credential", + "azure.mgmt.deviceregistry.models.CredentialProperties": "Microsoft.DeviceRegistry.CredentialProperties", + "azure.mgmt.deviceregistry.models.CredentialUpdate": "Azure.ResourceManager.Foundations.ResourceUpdateModel", "azure.mgmt.deviceregistry.models.DataPointBase": "Microsoft.DeviceRegistry.DataPointBase", "azure.mgmt.deviceregistry.models.DataPoint": "Microsoft.DeviceRegistry.DataPoint", "azure.mgmt.deviceregistry.models.Dataset": "Microsoft.DeviceRegistry.Dataset", @@ -29,6 +36,8 @@ "azure.mgmt.deviceregistry.models.DatasetBrokerStateStoreDestination": "Microsoft.DeviceRegistry.DatasetBrokerStateStoreDestination", "azure.mgmt.deviceregistry.models.DatasetMqttDestination": "Microsoft.DeviceRegistry.DatasetMqttDestination", "azure.mgmt.deviceregistry.models.DatasetStorageDestination": "Microsoft.DeviceRegistry.DatasetStorageDestination", + "azure.mgmt.deviceregistry.models.DeviceCredentialPolicy": "Microsoft.DeviceRegistry.DeviceCredentialPolicy", + "azure.mgmt.deviceregistry.models.DeviceCredentialsRevokeRequest": "Microsoft.DeviceRegistry.DeviceCredentialsRevokeRequest", "azure.mgmt.deviceregistry.models.DeviceMessagingEndpoint": "Microsoft.DeviceRegistry.DeviceMessagingEndpoint", "azure.mgmt.deviceregistry.models.DeviceRef": "Microsoft.DeviceRegistry.DeviceRef", "azure.mgmt.deviceregistry.models.DeviceStatus": "Microsoft.DeviceRegistry.DeviceStatus", @@ -49,6 +58,7 @@ "azure.mgmt.deviceregistry.models.ExtendedLocation": "Microsoft.DeviceRegistry.ExtendedLocation", "azure.mgmt.deviceregistry.models.HostAuthentication": "Microsoft.DeviceRegistry.HostAuthentication", "azure.mgmt.deviceregistry.models.InboundEndpoints": "Microsoft.DeviceRegistry.InboundEndpoints", + "azure.mgmt.deviceregistry.models.LeafCertificateConfiguration": "Microsoft.DeviceRegistry.LeafCertificateConfiguration", "azure.mgmt.deviceregistry.models.ManagementAction": "Microsoft.DeviceRegistry.ManagementAction", "azure.mgmt.deviceregistry.models.ManagementGroup": "Microsoft.DeviceRegistry.ManagementGroup", "azure.mgmt.deviceregistry.models.MessageSchemaReference": "Microsoft.DeviceRegistry.MessageSchemaReference", @@ -101,6 +111,10 @@ "azure.mgmt.deviceregistry.models.OperationDisplay": "Azure.ResourceManager.CommonTypes.OperationDisplay", "azure.mgmt.deviceregistry.models.OperationStatusResult": "Azure.ResourceManager.CommonTypes.OperationStatusResult", "azure.mgmt.deviceregistry.models.OutboundEndpoints": "Microsoft.DeviceRegistry.OutboundEndpoints", + "azure.mgmt.deviceregistry.models.Policy": "Microsoft.DeviceRegistry.Policy", + "azure.mgmt.deviceregistry.models.PolicyProperties": "Microsoft.DeviceRegistry.PolicyProperties", + "azure.mgmt.deviceregistry.models.PolicyUpdate": "Azure.ResourceManager.Foundations.ResourceUpdateModel", + "azure.mgmt.deviceregistry.models.PolicyUpdateProperties": "Azure.ResourceManager.Foundations.ResourceUpdateModelProperties", "azure.mgmt.deviceregistry.models.Schema": "Microsoft.DeviceRegistry.Schema", "azure.mgmt.deviceregistry.models.SchemaProperties": "Microsoft.DeviceRegistry.SchemaProperties", "azure.mgmt.deviceregistry.models.SchemaRegistry": "Microsoft.DeviceRegistry.SchemaRegistry", @@ -132,6 +146,8 @@ "azure.mgmt.deviceregistry.models.AuthenticationMethod": "Microsoft.DeviceRegistry.AuthenticationMethod", "azure.mgmt.deviceregistry.models.SystemAssignedServiceIdentityType": "Azure.ResourceManager.CommonTypes.SystemAssignedServiceIdentityType", "azure.mgmt.deviceregistry.models.Scope": "Microsoft.DeviceRegistry.Scope", + "azure.mgmt.deviceregistry.models.SupportedKeyType": "Microsoft.DeviceRegistry.SupportedKeyType", + "azure.mgmt.deviceregistry.models.BringYourOwnRootStatus": "Microsoft.DeviceRegistry.BringYourOwnRootStatus", "azure.mgmt.deviceregistry.models.DatasetDestinationTarget": "Microsoft.DeviceRegistry.DatasetDestinationTarget", "azure.mgmt.deviceregistry.models.MqttDestinationQos": "Microsoft.DeviceRegistry.MqttDestinationQos", "azure.mgmt.deviceregistry.models.EventDestinationTarget": "Microsoft.DeviceRegistry.EventDestinationTarget", @@ -186,6 +202,32 @@ "azure.mgmt.deviceregistry.aio.operations.NamespacesOperations.list_by_subscription": "Microsoft.DeviceRegistry.Namespaces.listBySubscription", "azure.mgmt.deviceregistry.operations.NamespacesOperations.begin_migrate": "Microsoft.DeviceRegistry.Namespaces.migrate", "azure.mgmt.deviceregistry.aio.operations.NamespacesOperations.begin_migrate": "Microsoft.DeviceRegistry.Namespaces.migrate", + "azure.mgmt.deviceregistry.operations.CredentialsOperations.get": "Microsoft.DeviceRegistry.Credentials.get", + "azure.mgmt.deviceregistry.aio.operations.CredentialsOperations.get": "Microsoft.DeviceRegistry.Credentials.get", + "azure.mgmt.deviceregistry.operations.CredentialsOperations.begin_create_or_update": "Microsoft.DeviceRegistry.Credentials.createOrUpdate", + "azure.mgmt.deviceregistry.aio.operations.CredentialsOperations.begin_create_or_update": "Microsoft.DeviceRegistry.Credentials.createOrUpdate", + "azure.mgmt.deviceregistry.operations.CredentialsOperations.begin_delete": "Microsoft.DeviceRegistry.Credentials.delete", + "azure.mgmt.deviceregistry.aio.operations.CredentialsOperations.begin_delete": "Microsoft.DeviceRegistry.Credentials.delete", + "azure.mgmt.deviceregistry.operations.CredentialsOperations.begin_update": "Microsoft.DeviceRegistry.Credentials.update", + "azure.mgmt.deviceregistry.aio.operations.CredentialsOperations.begin_update": "Microsoft.DeviceRegistry.Credentials.update", + "azure.mgmt.deviceregistry.operations.CredentialsOperations.list_by_resource_group": "Microsoft.DeviceRegistry.Credentials.listByResourceGroup", + "azure.mgmt.deviceregistry.aio.operations.CredentialsOperations.list_by_resource_group": "Microsoft.DeviceRegistry.Credentials.listByResourceGroup", + "azure.mgmt.deviceregistry.operations.CredentialsOperations.begin_synchronize": "Microsoft.DeviceRegistry.Credentials.synchronize", + "azure.mgmt.deviceregistry.aio.operations.CredentialsOperations.begin_synchronize": "Microsoft.DeviceRegistry.Credentials.synchronize", + "azure.mgmt.deviceregistry.operations.PoliciesOperations.get": "Microsoft.DeviceRegistry.Policies.get", + "azure.mgmt.deviceregistry.aio.operations.PoliciesOperations.get": "Microsoft.DeviceRegistry.Policies.get", + "azure.mgmt.deviceregistry.operations.PoliciesOperations.begin_create_or_update": "Microsoft.DeviceRegistry.Policies.createOrUpdate", + "azure.mgmt.deviceregistry.aio.operations.PoliciesOperations.begin_create_or_update": "Microsoft.DeviceRegistry.Policies.createOrUpdate", + "azure.mgmt.deviceregistry.operations.PoliciesOperations.begin_delete": "Microsoft.DeviceRegistry.Policies.delete", + "azure.mgmt.deviceregistry.aio.operations.PoliciesOperations.begin_delete": "Microsoft.DeviceRegistry.Policies.delete", + "azure.mgmt.deviceregistry.operations.PoliciesOperations.begin_update": "Microsoft.DeviceRegistry.Policies.update", + "azure.mgmt.deviceregistry.aio.operations.PoliciesOperations.begin_update": "Microsoft.DeviceRegistry.Policies.update", + "azure.mgmt.deviceregistry.operations.PoliciesOperations.list_by_resource_group": "Microsoft.DeviceRegistry.Policies.listByResourceGroup", + "azure.mgmt.deviceregistry.aio.operations.PoliciesOperations.list_by_resource_group": "Microsoft.DeviceRegistry.Policies.listByResourceGroup", + "azure.mgmt.deviceregistry.operations.PoliciesOperations.begin_revoke_issuer": "Microsoft.DeviceRegistry.Policies.revokeIssuer", + "azure.mgmt.deviceregistry.aio.operations.PoliciesOperations.begin_revoke_issuer": "Microsoft.DeviceRegistry.Policies.revokeIssuer", + "azure.mgmt.deviceregistry.operations.PoliciesOperations.begin_activate_bring_your_own_root": "Microsoft.DeviceRegistry.Policies.activateBringYourOwnRoot", + "azure.mgmt.deviceregistry.aio.operations.PoliciesOperations.begin_activate_bring_your_own_root": "Microsoft.DeviceRegistry.Policies.activateBringYourOwnRoot", "azure.mgmt.deviceregistry.operations.NamespaceAssetsOperations.get": "Microsoft.DeviceRegistry.NamespaceAssets.get", "azure.mgmt.deviceregistry.aio.operations.NamespaceAssetsOperations.get": "Microsoft.DeviceRegistry.NamespaceAssets.get", "azure.mgmt.deviceregistry.operations.NamespaceAssetsOperations.begin_create_or_replace": "Microsoft.DeviceRegistry.NamespaceAssets.createOrReplace", @@ -206,6 +248,8 @@ "azure.mgmt.deviceregistry.aio.operations.NamespaceDevicesOperations.begin_delete": "Microsoft.DeviceRegistry.NamespaceDevices.delete", "azure.mgmt.deviceregistry.operations.NamespaceDevicesOperations.list_by_resource_group": "Microsoft.DeviceRegistry.NamespaceDevices.listByResourceGroup", "azure.mgmt.deviceregistry.aio.operations.NamespaceDevicesOperations.list_by_resource_group": "Microsoft.DeviceRegistry.NamespaceDevices.listByResourceGroup", + "azure.mgmt.deviceregistry.operations.NamespaceDevicesOperations.begin_revoke": "Microsoft.DeviceRegistry.NamespaceDevices.revoke", + "azure.mgmt.deviceregistry.aio.operations.NamespaceDevicesOperations.begin_revoke": "Microsoft.DeviceRegistry.NamespaceDevices.revoke", "azure.mgmt.deviceregistry.operations.NamespaceDiscoveredAssetsOperations.get": "Microsoft.DeviceRegistry.NamespaceDiscoveredAssets.get", "azure.mgmt.deviceregistry.aio.operations.NamespaceDiscoveredAssetsOperations.get": "Microsoft.DeviceRegistry.NamespaceDiscoveredAssets.get", "azure.mgmt.deviceregistry.operations.NamespaceDiscoveredAssetsOperations.begin_create_or_replace": "Microsoft.DeviceRegistry.NamespaceDiscoveredAssets.createOrReplace", diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_client.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_client.py index ee8765856289..8bc8a5d02435 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_client.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_client.py @@ -23,6 +23,7 @@ AssetEndpointProfilesOperations, AssetsOperations, BillingContainersOperations, + CredentialsOperations, NamespaceAssetsOperations, NamespaceDevicesOperations, NamespaceDiscoveredAssetsOperations, @@ -30,6 +31,7 @@ NamespacesOperations, OperationStatusOperations, Operations, + PoliciesOperations, SchemaRegistriesOperations, SchemaVersionsOperations, SchemasOperations, @@ -56,6 +58,10 @@ class DeviceRegistryMgmtClient: # pylint: disable=too-many-instance-attributes :vartype billing_containers: azure.mgmt.deviceregistry.operations.BillingContainersOperations :ivar namespaces: NamespacesOperations operations :vartype namespaces: azure.mgmt.deviceregistry.operations.NamespacesOperations + :ivar credentials: CredentialsOperations operations + :vartype credentials: azure.mgmt.deviceregistry.operations.CredentialsOperations + :ivar policies: PoliciesOperations operations + :vartype policies: azure.mgmt.deviceregistry.operations.PoliciesOperations :ivar namespace_assets: NamespaceAssetsOperations operations :vartype namespace_assets: azure.mgmt.deviceregistry.operations.NamespaceAssetsOperations :ivar namespace_devices: NamespaceDevicesOperations operations @@ -81,8 +87,9 @@ class DeviceRegistryMgmtClient: # pylint: disable=too-many-instance-attributes :keyword cloud_setting: The cloud setting for which to get the ARM endpoint. Default value is None. :paramtype cloud_setting: ~azure.core.AzureClouds - :keyword api_version: The API version to use for this operation. Default value is "2025-10-01". - Note that overriding this default value may result in unsupported behavior. + :keyword api_version: The API version to use for this operation. Known values are + "2026-03-01-preview". Default value is "2026-03-01-preview". 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 Retry-After header is present. @@ -147,6 +154,8 @@ def __init__( self._client, self._config, self._serialize, self._deserialize ) self.namespaces = NamespacesOperations(self._client, self._config, self._serialize, self._deserialize) + self.credentials = CredentialsOperations(self._client, self._config, self._serialize, self._deserialize) + self.policies = PoliciesOperations(self._client, self._config, self._serialize, self._deserialize) self.namespace_assets = NamespaceAssetsOperations( self._client, self._config, self._serialize, self._deserialize ) diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_configuration.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_configuration.py index 82078a19bb33..b2fb2550d1d0 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_configuration.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_configuration.py @@ -33,8 +33,9 @@ class DeviceRegistryMgmtClientConfiguration: # pylint: disable=too-many-instanc :param cloud_setting: The cloud setting for which to get the ARM endpoint. Default value is None. :type cloud_setting: ~azure.core.AzureClouds - :keyword api_version: The API version to use for this operation. Default value is "2025-10-01". - Note that overriding this default value may result in unsupported behavior. + :keyword api_version: The API version to use for this operation. Known values are + "2026-03-01-preview". Default value is "2026-03-01-preview". Note that overriding this default + value may result in unsupported behavior. :paramtype api_version: str """ @@ -46,7 +47,7 @@ def __init__( cloud_setting: Optional["AzureClouds"] = None, **kwargs: Any ) -> None: - api_version: str = kwargs.pop("api_version", "2025-10-01") + api_version: str = kwargs.pop("api_version", "2026-03-01-preview") if credential is None: raise ValueError("Parameter 'credential' must not be None.") diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_utils/model_base.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_utils/model_base.py index 12926fa98dcf..7b7f8ba67b53 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_utils/model_base.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_utils/model_base.py @@ -37,6 +37,7 @@ TZ_UTC = timezone.utc _T = typing.TypeVar("_T") +_NONE_TYPE = type(None) def _timedelta_as_isostr(td: timedelta) -> str: @@ -171,6 +172,21 @@ def default(self, o): # pylint: disable=too-many-return-statements r"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT" ) +_ARRAY_ENCODE_MAPPING = { + "pipeDelimited": "|", + "spaceDelimited": " ", + "commaDelimited": ",", + "newlineDelimited": "\n", +} + + +def _deserialize_array_encoded(delimit: str, attr): + if isinstance(attr, str): + if attr == "": + return [] + return attr.split(delimit) + return attr + def _deserialize_datetime(attr: typing.Union[str, datetime]) -> datetime: """Deserialize ISO-8601 formatted string into Datetime object. @@ -202,7 +218,7 @@ def _deserialize_datetime(attr: typing.Union[str, datetime]) -> datetime: test_utc = date_obj.utctimetuple() if test_utc.tm_year > 9999 or test_utc.tm_year < 1: raise OverflowError("Hit max or min date") - return date_obj + return date_obj # type: ignore[no-any-return] def _deserialize_datetime_rfc7231(attr: typing.Union[str, datetime]) -> datetime: @@ -256,7 +272,7 @@ def _deserialize_time(attr: typing.Union[str, time]) -> time: """ if isinstance(attr, time): return attr - return isodate.parse_time(attr) + return isodate.parse_time(attr) # type: ignore[no-any-return] def _deserialize_bytes(attr): @@ -315,6 +331,8 @@ def _deserialize_int_as_str(attr): def get_deserializer(annotation: typing.Any, rf: typing.Optional["_RestField"] = None): if annotation is int and rf and rf._format == "str": return _deserialize_int_as_str + if annotation is str and rf and rf._format in _ARRAY_ENCODE_MAPPING: + return functools.partial(_deserialize_array_encoded, _ARRAY_ENCODE_MAPPING[rf._format]) if rf and rf._format: return _DESERIALIZE_MAPPING_WITHFORMAT.get(rf._format) return _DESERIALIZE_MAPPING.get(annotation) # pyright: ignore @@ -353,9 +371,39 @@ def __contains__(self, key: typing.Any) -> bool: return key in self._data def __getitem__(self, key: str) -> typing.Any: + # If this key has been deserialized (for mutable types), we need to handle serialization + if hasattr(self, "_attr_to_rest_field"): + cache_attr = f"_deserialized_{key}" + if hasattr(self, cache_attr): + rf = _get_rest_field(getattr(self, "_attr_to_rest_field"), key) + if rf: + value = self._data.get(key) + if isinstance(value, (dict, list, set)): + # For mutable types, serialize and return + # But also update _data with serialized form and clear flag + # so mutations via this returned value affect _data + serialized = _serialize(value, rf._format) + # If serialized form is same type (no transformation needed), + # return _data directly so mutations work + if isinstance(serialized, type(value)) and serialized == value: + return self._data.get(key) + # Otherwise return serialized copy and clear flag + try: + object.__delattr__(self, cache_attr) + except AttributeError: + pass + # Store serialized form back + self._data[key] = serialized + return serialized return self._data.__getitem__(key) def __setitem__(self, key: str, value: typing.Any) -> None: + # Clear any cached deserialized value when setting through dictionary access + cache_attr = f"_deserialized_{key}" + try: + object.__delattr__(self, cache_attr) + except AttributeError: + pass self._data.__setitem__(key, value) def __delitem__(self, key: str) -> None: @@ -467,6 +515,8 @@ def setdefault(self, key: str, default: typing.Any = _UNSET) -> typing.Any: return self._data.setdefault(key, default) def __eq__(self, other: typing.Any) -> bool: + if isinstance(other, _MyMutableMapping): + return self._data == other._data try: other_model = self.__class__(other) except Exception: @@ -483,6 +533,8 @@ def _is_model(obj: typing.Any) -> bool: def _serialize(o, format: typing.Optional[str] = None): # pylint: disable=too-many-return-statements if isinstance(o, list): + if format in _ARRAY_ENCODE_MAPPING and all(isinstance(x, str) for x in o): + return _ARRAY_ENCODE_MAPPING[format].join(o) return [_serialize(x, format) for x in o] if isinstance(o, dict): return {k: _serialize(v, format) for k, v in o.items()} @@ -578,6 +630,9 @@ def __init__(self, *args: typing.Any, **kwargs: typing.Any) -> None: if len(items) > 0: existed_attr_keys.append(xml_name) dict_to_pass[rf._rest_name] = _deserialize(rf._type, items) + elif not rf._is_optional: + existed_attr_keys.append(xml_name) + dict_to_pass[rf._rest_name] = [] continue # text element is primitive type @@ -758,6 +813,14 @@ def _deserialize_multiple_sequence( return type(obj)(_deserialize(deserializer, entry, module) for entry, deserializer in zip(obj, entry_deserializers)) +def _is_array_encoded_deserializer(deserializer: functools.partial) -> bool: + return ( + isinstance(deserializer, functools.partial) + and isinstance(deserializer.args[0], functools.partial) + and deserializer.args[0].func == _deserialize_array_encoded # pylint: disable=comparison-with-callable + ) + + def _deserialize_sequence( deserializer: typing.Optional[typing.Callable], module: typing.Optional[str], @@ -767,6 +830,19 @@ def _deserialize_sequence( return obj if isinstance(obj, ET.Element): obj = list(obj) + + # encoded string may be deserialized to sequence + if isinstance(obj, str) and isinstance(deserializer, functools.partial): + # for list[str] + if _is_array_encoded_deserializer(deserializer): + return deserializer(obj) + + # for list[Union[...]] + if isinstance(deserializer.args[0], list): + for sub_deserializer in deserializer.args[0]: + if _is_array_encoded_deserializer(sub_deserializer): + return sub_deserializer(obj) + return type(obj)(_deserialize(deserializer, entry, module) for entry in obj) @@ -817,16 +893,18 @@ def _get_deserialize_callable_from_annotation( # pylint: disable=too-many-retur # is it optional? try: - if any(a for a in annotation.__args__ if a == type(None)): # pyright: ignore + if any(a is _NONE_TYPE for a in annotation.__args__): # pyright: ignore + if rf: + rf._is_optional = True if len(annotation.__args__) <= 2: # pyright: ignore if_obj_deserializer = _get_deserialize_callable_from_annotation( - next(a for a in annotation.__args__ if a != type(None)), module, rf # pyright: ignore + next(a for a in annotation.__args__ if a is not _NONE_TYPE), module, rf # pyright: ignore ) return functools.partial(_deserialize_with_optional, if_obj_deserializer) # the type is Optional[Union[...]], we need to remove the None type from the Union annotation_copy = copy.copy(annotation) - annotation_copy.__args__ = [a for a in annotation_copy.__args__ if a != type(None)] # pyright: ignore + annotation_copy.__args__ = [a for a in annotation_copy.__args__ if a is not _NONE_TYPE] # pyright: ignore return _get_deserialize_callable_from_annotation(annotation_copy, module, rf) except AttributeError: pass @@ -910,16 +988,20 @@ def _deserialize_with_callable( return float(value.text) if value.text else None if deserializer is bool: return value.text == "true" if value.text else None + if deserializer and deserializer in _DESERIALIZE_MAPPING.values(): + return deserializer(value.text) if value.text else None + if deserializer and deserializer in _DESERIALIZE_MAPPING_WITHFORMAT.values(): + return deserializer(value.text) if value.text else None if deserializer is None: return value if deserializer in [int, float, bool]: return deserializer(value) if isinstance(deserializer, CaseInsensitiveEnumMeta): try: - return deserializer(value) + return deserializer(value.text if isinstance(value, ET.Element) else value) except ValueError: # for unknown value, return raw value - return value + return value.text if isinstance(value, ET.Element) else value if isinstance(deserializer, type) and issubclass(deserializer, Model): return deserializer._deserialize(value, []) return typing.cast(typing.Callable[[typing.Any], typing.Any], deserializer)(value) @@ -952,7 +1034,7 @@ def _failsafe_deserialize( ) -> typing.Any: try: return _deserialize(deserializer, response.json(), module, rf, format) - except DeserializationError: + except Exception: # pylint: disable=broad-except _LOGGER.warning( "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True ) @@ -965,13 +1047,14 @@ def _failsafe_deserialize_xml( ) -> typing.Any: try: return _deserialize_xml(deserializer, response.text()) - except DeserializationError: + except Exception: # pylint: disable=broad-except _LOGGER.warning( "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True ) return None +# pylint: disable=too-many-instance-attributes class _RestField: def __init__( self, @@ -991,6 +1074,7 @@ def __init__( self._is_discriminator = is_discriminator self._visibility = visibility self._is_model = False + self._is_optional = False self._default = default self._format = format self._is_multipart_file_input = is_multipart_file_input @@ -998,7 +1082,11 @@ def __init__( @property def _class_type(self) -> typing.Any: - return getattr(self._type, "args", [None])[0] + result = getattr(self._type, "args", [None])[0] + # type may be wrapped by nested functools.partial so we need to check for that + if isinstance(result, functools.partial): + return getattr(result, "args", [None])[0] + return result @property def _rest_name(self) -> str: @@ -1009,14 +1097,37 @@ def _rest_name(self) -> str: def __get__(self, obj: Model, type=None): # pylint: disable=redefined-builtin # by this point, type and rest_name will have a value bc we default # them in __new__ of the Model class - item = obj.get(self._rest_name) + # Use _data.get() directly to avoid triggering __getitem__ which clears the cache + item = obj._data.get(self._rest_name) if item is None: return item if self._is_model: return item - return _deserialize(self._type, _serialize(item, self._format), rf=self) + + # For mutable types, we want mutations to directly affect _data + # Check if we've already deserialized this value + cache_attr = f"_deserialized_{self._rest_name}" + if hasattr(obj, cache_attr): + # Return the value from _data directly (it's been deserialized in place) + return obj._data.get(self._rest_name) + + deserialized = _deserialize(self._type, _serialize(item, self._format), rf=self) + + # For mutable types, store the deserialized value back in _data + # so mutations directly affect _data + if isinstance(deserialized, (dict, list, set)): + obj._data[self._rest_name] = deserialized + object.__setattr__(obj, cache_attr, True) # Mark as deserialized + return deserialized + + return deserialized def __set__(self, obj: Model, value) -> None: + # Clear the cached deserialized object when setting a new value + cache_attr = f"_deserialized_{self._rest_name}" + if hasattr(obj, cache_attr): + object.__delattr__(obj, cache_attr) + if value is None: # we want to wipe out entries if users set attr to None try: @@ -1184,7 +1295,7 @@ def _get_wrapped_element( _get_element(v, exclude_readonly, meta, wrapped_element) else: wrapped_element.text = _get_primitive_type_value(v) - return wrapped_element + return wrapped_element # type: ignore[no-any-return] def _get_primitive_type_value(v) -> str: @@ -1197,7 +1308,9 @@ def _get_primitive_type_value(v) -> str: return str(v) -def _create_xml_element(tag, prefix=None, ns=None): +def _create_xml_element( + tag: typing.Any, prefix: typing.Optional[str] = None, ns: typing.Optional[str] = None +) -> ET.Element: if prefix and ns: ET.register_namespace(prefix, ns) if ns: diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_utils/serialization.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_utils/serialization.py index 45a3e44e45cb..81ec1de5922b 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_utils/serialization.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_utils/serialization.py @@ -821,13 +821,20 @@ def serialize_basic(cls, data, data_type, **kwargs): :param str data_type: Type of object in the iterable. :rtype: str, int, float, bool :return: serialized object + :raises TypeError: raise if data_type is not one of str, int, float, bool. """ 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 + if data_type == "int": + return int(data) + if data_type == "float": + return float(data) + if data_type == "bool": + return bool(data) + raise TypeError("Unknown basic data type: {}".format(data_type)) @classmethod def serialize_unicode(cls, data): @@ -1757,7 +1764,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 or data_type is not one of str, int, float, bool. """ # If we're here, data is supposed to be a basic type. # If it's still an XML node, take the text @@ -1783,7 +1790,11 @@ def deserialize_basic(self, attr, data_type): # pylint: disable=too-many-return if data_type == "str": return self.deserialize_unicode(attr) - return eval(data_type)(attr) # nosec # pylint: disable=eval-used + if data_type == "int": + return int(attr) + if data_type == "float": + return float(attr) + raise TypeError("Unknown basic data type: {}".format(data_type)) @staticmethod def deserialize_unicode(data): diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_version.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_version.py index ed0855dea5e6..5bf479b145f7 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_version.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "1.1.0" +VERSION = "1.2.0b1" diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/_client.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/_client.py index 045dd4fdc27d..3dc0fc288521 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/_client.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/_client.py @@ -23,6 +23,7 @@ AssetEndpointProfilesOperations, AssetsOperations, BillingContainersOperations, + CredentialsOperations, NamespaceAssetsOperations, NamespaceDevicesOperations, NamespaceDiscoveredAssetsOperations, @@ -30,6 +31,7 @@ NamespacesOperations, OperationStatusOperations, Operations, + PoliciesOperations, SchemaRegistriesOperations, SchemaVersionsOperations, SchemasOperations, @@ -57,6 +59,10 @@ class DeviceRegistryMgmtClient: # pylint: disable=too-many-instance-attributes azure.mgmt.deviceregistry.aio.operations.BillingContainersOperations :ivar namespaces: NamespacesOperations operations :vartype namespaces: azure.mgmt.deviceregistry.aio.operations.NamespacesOperations + :ivar credentials: CredentialsOperations operations + :vartype credentials: azure.mgmt.deviceregistry.aio.operations.CredentialsOperations + :ivar policies: PoliciesOperations operations + :vartype policies: azure.mgmt.deviceregistry.aio.operations.PoliciesOperations :ivar namespace_assets: NamespaceAssetsOperations operations :vartype namespace_assets: azure.mgmt.deviceregistry.aio.operations.NamespaceAssetsOperations :ivar namespace_devices: NamespaceDevicesOperations operations @@ -82,8 +88,9 @@ class DeviceRegistryMgmtClient: # pylint: disable=too-many-instance-attributes :keyword cloud_setting: The cloud setting for which to get the ARM endpoint. Default value is None. :paramtype cloud_setting: ~azure.core.AzureClouds - :keyword api_version: The API version to use for this operation. Default value is "2025-10-01". - Note that overriding this default value may result in unsupported behavior. + :keyword api_version: The API version to use for this operation. Known values are + "2026-03-01-preview". Default value is "2026-03-01-preview". 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 Retry-After header is present. @@ -150,6 +157,8 @@ def __init__( self._client, self._config, self._serialize, self._deserialize ) self.namespaces = NamespacesOperations(self._client, self._config, self._serialize, self._deserialize) + self.credentials = CredentialsOperations(self._client, self._config, self._serialize, self._deserialize) + self.policies = PoliciesOperations(self._client, self._config, self._serialize, self._deserialize) self.namespace_assets = NamespaceAssetsOperations( self._client, self._config, self._serialize, self._deserialize ) diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/_configuration.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/_configuration.py index dfc696d8f891..6f428fc65c0c 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/_configuration.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/_configuration.py @@ -33,8 +33,9 @@ class DeviceRegistryMgmtClientConfiguration: # pylint: disable=too-many-instanc :param cloud_setting: The cloud setting for which to get the ARM endpoint. Default value is None. :type cloud_setting: ~azure.core.AzureClouds - :keyword api_version: The API version to use for this operation. Default value is "2025-10-01". - Note that overriding this default value may result in unsupported behavior. + :keyword api_version: The API version to use for this operation. Known values are + "2026-03-01-preview". Default value is "2026-03-01-preview". Note that overriding this default + value may result in unsupported behavior. :paramtype api_version: str """ @@ -46,7 +47,7 @@ def __init__( cloud_setting: Optional["AzureClouds"] = None, **kwargs: Any ) -> None: - api_version: str = kwargs.pop("api_version", "2025-10-01") + api_version: str = kwargs.pop("api_version", "2026-03-01-preview") if credential is None: raise ValueError("Parameter 'credential' must not be None.") diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/operations/__init__.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/operations/__init__.py index efff1fb6e0ed..0e32b3a3ba1b 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/operations/__init__.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/operations/__init__.py @@ -18,6 +18,8 @@ from ._operations import AssetEndpointProfilesOperations # type: ignore from ._operations import BillingContainersOperations # type: ignore from ._operations import NamespacesOperations # type: ignore +from ._operations import CredentialsOperations # type: ignore +from ._operations import PoliciesOperations # type: ignore from ._operations import NamespaceAssetsOperations # type: ignore from ._operations import NamespaceDevicesOperations # type: ignore from ._operations import NamespaceDiscoveredAssetsOperations # type: ignore @@ -37,6 +39,8 @@ "AssetEndpointProfilesOperations", "BillingContainersOperations", "NamespacesOperations", + "CredentialsOperations", + "PoliciesOperations", "NamespaceAssetsOperations", "NamespaceDevicesOperations", "NamespaceDiscoveredAssetsOperations", diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/operations/_operations.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/operations/_operations.py index 0c3364f23d0a..2da1c806af68 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/operations/_operations.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/aio/operations/_operations.py @@ -52,6 +52,12 @@ build_assets_update_request, build_billing_containers_get_request, build_billing_containers_list_by_subscription_request, + build_credentials_create_or_update_request, + build_credentials_delete_request, + build_credentials_get_request, + build_credentials_list_by_resource_group_request, + build_credentials_synchronize_request, + build_credentials_update_request, build_namespace_assets_create_or_replace_request, build_namespace_assets_delete_request, build_namespace_assets_get_request, @@ -61,6 +67,7 @@ build_namespace_devices_delete_request, build_namespace_devices_get_request, build_namespace_devices_list_by_resource_group_request, + build_namespace_devices_revoke_request, build_namespace_devices_update_request, build_namespace_discovered_assets_create_or_replace_request, build_namespace_discovered_assets_delete_request, @@ -81,6 +88,13 @@ build_namespaces_update_request, build_operation_status_get_request, build_operations_list_request, + build_policies_activate_bring_your_own_root_request, + build_policies_create_or_update_request, + build_policies_delete_request, + build_policies_get_request, + build_policies_list_by_resource_group_request, + build_policies_revoke_issuer_request, + build_policies_update_request, build_schema_registries_create_or_replace_request, build_schema_registries_delete_request, build_schema_registries_get_request, @@ -181,7 +195,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Operation], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Operation], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -197,7 +214,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -260,6 +280,7 @@ async def get(self, location: str, operation_id: str, **kwargs: Any) -> _models. } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -274,11 +295,14 @@ async def get(self, location: str, operation_id: str, **kwargs: Any) -> _models. except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.OperationStatusResult, response.json()) @@ -344,6 +368,7 @@ async def get(self, resource_group_name: str, asset_name: str, **kwargs: Any) -> } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -358,11 +383,14 @@ async def get(self, resource_group_name: str, asset_name: str, **kwargs: Any) -> except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.Asset, response.json()) @@ -410,6 +438,7 @@ async def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -423,7 +452,10 @@ async def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -433,7 +465,7 @@ async def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -638,6 +670,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -651,7 +684,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -659,7 +695,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -852,6 +888,7 @@ async def _delete_initial(self, resource_group_name: str, asset_name: str, **kwa } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -865,7 +902,10 @@ async def _delete_initial(self, resource_group_name: str, asset_name: str, **kwa except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -873,7 +913,7 @@ async def _delete_initial(self, resource_group_name: str, asset_name: str, **kwa response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -1002,7 +1042,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Asset], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Asset], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -1018,7 +1061,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -1086,7 +1132,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Asset], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Asset], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -1102,7 +1151,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -1168,6 +1220,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1182,11 +1235,14 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.AssetEndpointProfile, response.json()) @@ -1238,6 +1294,7 @@ async def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1251,7 +1308,10 @@ async def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -1261,7 +1321,7 @@ async def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -1474,6 +1534,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1487,7 +1548,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -1495,7 +1559,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -1695,6 +1759,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1708,7 +1773,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -1716,7 +1784,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -1850,7 +1918,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AssetEndpointProfile], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.AssetEndpointProfile], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -1866,7 +1937,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -1935,7 +2009,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AssetEndpointProfile], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.AssetEndpointProfile], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -1951,7 +2028,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -1980,7 +2060,14 @@ def __init__(self, *args, **kwargs) -> None: @api_version_validation( method_added_on="2024-09-01-preview", params_added_on={"2024-09-01-preview": ["api_version", "subscription_id", "billing_container_name", "accept"]}, - api_versions_list=["2024-09-01-preview", "2024-11-01", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2024-11-01", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def get(self, billing_container_name: str, **kwargs: Any) -> _models.BillingContainer: """Get a BillingContainer. @@ -2016,6 +2103,7 @@ async def get(self, billing_container_name: str, **kwargs: Any) -> _models.Billi } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2030,11 +2118,14 @@ async def get(self, billing_container_name: str, **kwargs: Any) -> _models.Billi except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.BillingContainer, response.json()) @@ -2047,7 +2138,14 @@ async def get(self, billing_container_name: str, **kwargs: Any) -> _models.Billi @api_version_validation( method_added_on="2024-09-01-preview", params_added_on={"2024-09-01-preview": ["api_version", "subscription_id", "accept"]}, - api_versions_list=["2024-09-01-preview", "2024-11-01", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2024-11-01", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def list_by_subscription(self, **kwargs: Any) -> AsyncItemPaged["_models.BillingContainer"]: """List BillingContainer resources by subscription ID. @@ -2110,7 +2208,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.BillingContainer], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.BillingContainer], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -2126,7 +2227,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -2157,7 +2261,7 @@ def __init__(self, *args, **kwargs) -> None: params_added_on={ "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> _models.Namespace: """Get a Namespace. @@ -2197,6 +2301,7 @@ async def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2211,11 +2316,14 @@ async def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.Namespace, response.json()) @@ -2236,7 +2344,7 @@ async def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _create_or_replace_initial( self, @@ -2281,6 +2389,7 @@ async def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2294,7 +2403,10 @@ async def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -2304,7 +2416,7 @@ async def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -2408,7 +2520,7 @@ async def begin_create_or_replace( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_create_or_replace( self, @@ -2496,7 +2608,7 @@ def get_long_running_output(pipeline_response): "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _update_initial( self, @@ -2541,6 +2653,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2554,7 +2667,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -2562,7 +2678,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -2666,7 +2782,7 @@ async def begin_update( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_update( self, @@ -2747,7 +2863,7 @@ def get_long_running_output(pipeline_response): params_added_on={ "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _delete_initial( self, resource_group_name: str, namespace_name: str, **kwargs: Any @@ -2778,6 +2894,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2791,7 +2908,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -2799,7 +2919,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -2812,7 +2932,7 @@ async def _delete_initial( params_added_on={ "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_delete(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> AsyncLROPoller[None]: """Delete a Namespace. @@ -2874,7 +2994,7 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- @api_version_validation( method_added_on="2025-07-01-preview", params_added_on={"2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "accept"]}, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> AsyncItemPaged["_models.Namespace"]: """List Namespace resources by resource group. @@ -2940,7 +3060,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Namespace], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Namespace], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -2956,7 +3079,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -2967,7 +3093,7 @@ async def get_next(next_link=None): @api_version_validation( method_added_on="2025-07-01-preview", params_added_on={"2025-07-01-preview": ["api_version", "subscription_id", "accept"]}, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def list_by_subscription(self, **kwargs: Any) -> AsyncItemPaged["_models.Namespace"]: """List Namespace resources by subscription ID. @@ -3029,7 +3155,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Namespace], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Namespace], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -3045,7 +3174,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -3064,7 +3196,7 @@ async def get_next(next_link=None): "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _migrate_initial( self, @@ -3109,6 +3241,7 @@ async def _migrate_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3122,7 +3255,10 @@ async def _migrate_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -3133,7 +3269,7 @@ async def _migrate_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -3234,7 +3370,7 @@ async def begin_migrate( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_migrate( self, @@ -3305,14 +3441,14 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- return AsyncLROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore -class NamespaceAssetsOperations: +class CredentialsOperations: """ .. warning:: **DO NOT** instantiate this class directly. Instead, you should access the following operations through :class:`~azure.mgmt.deviceregistry.aio.DeviceRegistryMgmtClient`'s - :attr:`namespace_assets` attribute. + :attr:`credentials` attribute. """ def __init__(self, *args, **kwargs) -> None: @@ -3324,33 +3460,22 @@ def __init__(self, *args, **kwargs) -> None: @distributed_trace_async @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2025-11-01-preview", params_added_on={ - "2025-07-01-preview": [ - "api_version", - "subscription_id", - "resource_group_name", - "namespace_name", - "asset_name", - "accept", - ] + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], ) - async def get( - self, resource_group_name: str, namespace_name: str, asset_name: str, **kwargs: Any - ) -> _models.NamespaceAsset: - """Get a NamespaceAsset. + async def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> _models.Credential: + """Get a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str - :param asset_name: The name of the asset. Required. - :type asset_name: str - :return: NamespaceAsset. The NamespaceAsset is compatible with MutableMapping - :rtype: ~azure.mgmt.deviceregistry.models.NamespaceAsset + :return: Credential. The Credential is compatible with MutableMapping + :rtype: ~azure.mgmt.deviceregistry.models.Credential :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -3364,12 +3489,11 @@ async def get( _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.NamespaceAsset] = kwargs.pop("cls", None) + cls: ClsType[_models.Credential] = kwargs.pop("cls", None) - _request = build_namespace_assets_get_request( + _request = build_credentials_get_request( resource_group_name=resource_group_name, namespace_name=namespace_name, - asset_name=asset_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -3380,6 +3504,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3394,13 +3519,16 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: - deserialized = _deserialize(_models.NamespaceAsset, response.json()) + deserialized = _deserialize(_models.Credential, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore @@ -3408,26 +3536,24 @@ async def get( return deserialized # type: ignore @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2025-11-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2025-11-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", - "asset_name", "content_type", "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], ) - async def _create_or_replace_initial( + async def _create_or_update_initial( self, resource_group_name: str, namespace_name: str, - asset_name: str, - resource: Union[_models.NamespaceAsset, JSON, IO[bytes]], + resource: Union[_models.Credential, JSON, IO[bytes]], **kwargs: Any ) -> AsyncIterator[bytes]: error_map: MutableMapping = { @@ -3451,10 +3577,9 @@ async def _create_or_replace_initial( else: _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_namespace_assets_create_or_replace_request( + _request = build_credentials_create_or_update_request( resource_group_name=resource_group_name, namespace_name=namespace_name, - asset_name=asset_name, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -3467,6 +3592,7 @@ async def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3480,7 +3606,10 @@ async def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -3490,7 +3619,7 @@ async def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -3498,152 +3627,138 @@ async def _create_or_replace_initial( return deserialized # type: ignore @overload - async def begin_create_or_replace( + async def begin_create_or_update( self, resource_group_name: str, namespace_name: str, - asset_name: str, - resource: _models.NamespaceAsset, + resource: _models.Credential, *, content_type: str = "application/json", **kwargs: Any - ) -> AsyncLROPoller[_models.NamespaceAsset]: - """Create a NamespaceAsset. + ) -> AsyncLROPoller[_models.Credential]: + """Create a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str - :param asset_name: The name of the asset. Required. - :type asset_name: str :param resource: Resource create parameters. Required. - :type resource: ~azure.mgmt.deviceregistry.models.NamespaceAsset + :type resource: ~azure.mgmt.deviceregistry.models.Credential :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 NamespaceAsset. The NamespaceAsset is - compatible with MutableMapping - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.NamespaceAsset] + :return: An instance of AsyncLROPoller that returns Credential. The Credential is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - async def begin_create_or_replace( + async def begin_create_or_update( self, resource_group_name: str, namespace_name: str, - asset_name: str, resource: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> AsyncLROPoller[_models.NamespaceAsset]: - """Create a NamespaceAsset. + ) -> AsyncLROPoller[_models.Credential]: + """Create a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str - :param asset_name: The name of the asset. Required. - :type asset_name: str :param resource: Resource create parameters. Required. :type resource: JSON :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 NamespaceAsset. The NamespaceAsset is - compatible with MutableMapping - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.NamespaceAsset] + :return: An instance of AsyncLROPoller that returns Credential. The Credential is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - async def begin_create_or_replace( + async def begin_create_or_update( self, resource_group_name: str, namespace_name: str, - asset_name: str, resource: IO[bytes], *, content_type: str = "application/json", **kwargs: Any - ) -> AsyncLROPoller[_models.NamespaceAsset]: - """Create a NamespaceAsset. + ) -> AsyncLROPoller[_models.Credential]: + """Create a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str - :param asset_name: The name of the asset. Required. - :type asset_name: str :param resource: Resource create parameters. Required. :type resource: 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 NamespaceAsset. The NamespaceAsset is - compatible with MutableMapping - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.NamespaceAsset] + :return: An instance of AsyncLROPoller that returns Credential. The Credential is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace_async @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2025-11-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2025-11-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", - "asset_name", "content_type", "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], ) - async def begin_create_or_replace( + async def begin_create_or_update( self, resource_group_name: str, namespace_name: str, - asset_name: str, - resource: Union[_models.NamespaceAsset, JSON, IO[bytes]], + resource: Union[_models.Credential, JSON, IO[bytes]], **kwargs: Any - ) -> AsyncLROPoller[_models.NamespaceAsset]: - """Create a NamespaceAsset. + ) -> AsyncLROPoller[_models.Credential]: + """Create a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str - :param asset_name: The name of the asset. Required. - :type asset_name: str - :param resource: Resource create parameters. Is one of the following types: NamespaceAsset, - JSON, IO[bytes] Required. - :type resource: ~azure.mgmt.deviceregistry.models.NamespaceAsset or JSON or IO[bytes] - :return: An instance of AsyncLROPoller that returns NamespaceAsset. The NamespaceAsset is - compatible with MutableMapping - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.NamespaceAsset] + :param resource: Resource create parameters. Is one of the following types: Credential, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.deviceregistry.models.Credential or JSON or IO[bytes] + :return: An instance of AsyncLROPoller that returns Credential. The Credential is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.NamespaceAsset] = kwargs.pop("cls", None) + cls: ClsType[_models.Credential] = 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._create_or_replace_initial( + raw_result = await self._create_or_update_initial( resource_group_name=resource_group_name, namespace_name=namespace_name, - asset_name=asset_name, resource=resource, content_type=content_type, cls=lambda x, y, z: x, @@ -3656,7 +3771,7 @@ async def begin_create_or_replace( def get_long_running_output(pipeline_response): response = pipeline_response.http_response - deserialized = _deserialize(_models.NamespaceAsset, response.json()) + deserialized = _deserialize(_models.Credential, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized @@ -3674,37 +3789,167 @@ def get_long_running_output(pipeline_response): else: polling_method = polling if cont_token: - return AsyncLROPoller[_models.NamespaceAsset].from_continuation_token( + return AsyncLROPoller[_models.Credential].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return AsyncLROPoller[_models.NamespaceAsset]( + return AsyncLROPoller[_models.Credential]( self._client, raw_result, get_long_running_output, polling_method # type: ignore ) @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2025-11-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + async def _delete_initial( + self, resource_group_name: str, namespace_name: str, **kwargs: Any + ) -> AsyncIterator[bytes]: + 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 = kwargs.pop("params", {}) or {} + + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + _request = build_credentials_delete_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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, 204]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + async def begin_delete(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> AsyncLROPoller[None]: + """Delete a Credential. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An instance of AsyncLROPoller that returns None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + 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._delete_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + 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 + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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 + + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", - "asset_name", "content_type", "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], ) async def _update_initial( self, resource_group_name: str, namespace_name: str, - asset_name: str, - properties: Union[_models.NamespaceAssetUpdate, JSON, IO[bytes]], + properties: Union[_models.CredentialUpdate, JSON, IO[bytes]], **kwargs: Any ) -> AsyncIterator[bytes]: error_map: MutableMapping = { @@ -3728,10 +3973,9 @@ async def _update_initial( else: _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_namespace_assets_update_request( + _request = build_credentials_update_request( resource_group_name=resource_group_name, namespace_name=namespace_name, - asset_name=asset_name, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -3744,6 +3988,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3757,7 +4002,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -3765,7 +4013,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -3777,29 +4025,26 @@ async def begin_update( self, resource_group_name: str, namespace_name: str, - asset_name: str, - properties: _models.NamespaceAssetUpdate, + properties: _models.CredentialUpdate, *, content_type: str = "application/json", **kwargs: Any - ) -> AsyncLROPoller[_models.NamespaceAsset]: - """Update a NamespaceAsset. + ) -> AsyncLROPoller[_models.Credential]: + """Update a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str - :param asset_name: The name of the asset. Required. - :type asset_name: str :param properties: The resource properties to be updated. Required. - :type properties: ~azure.mgmt.deviceregistry.models.NamespaceAssetUpdate + :type properties: ~azure.mgmt.deviceregistry.models.CredentialUpdate :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 NamespaceAsset. The NamespaceAsset is - compatible with MutableMapping - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.NamespaceAsset] + :return: An instance of AsyncLROPoller that returns Credential. The Credential is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -3808,13 +4053,2254 @@ async def begin_update( self, resource_group_name: str, namespace_name: str, - asset_name: str, properties: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> AsyncLROPoller[_models.NamespaceAsset]: - """Update a NamespaceAsset. + ) -> AsyncLROPoller[_models.Credential]: + """Update a Credential. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :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 Credential. The Credential is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Credential] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_update( + self, + resource_group_name: str, + namespace_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Credential]: + """Update a Credential. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns Credential. The Credential is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Credential] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + async def begin_update( + self, + resource_group_name: str, + namespace_name: str, + properties: Union[_models.CredentialUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncLROPoller[_models.Credential]: + """Update a Credential. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Is one of the following types: + CredentialUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.deviceregistry.models.CredentialUpdate or JSON or IO[bytes] + :return: An instance of AsyncLROPoller that returns Credential. The Credential is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Credential] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Credential] = 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._update_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + properties=properties, + 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Credential, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: + polling_method = polling + if cont_token: + return AsyncLROPoller[_models.Credential].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return AsyncLROPoller[_models.Credential]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @distributed_trace + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + def list_by_resource_group( + self, resource_group_name: str, namespace_name: str, **kwargs: Any + ) -> AsyncItemPaged["_models.Credential"]: + """List Credential resources by Namespace. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An iterator like instance of Credential + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.deviceregistry.models.Credential] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Credential]] = 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_credentials_list_by_resource_group_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Credential], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + async def _synchronize_initial( + self, resource_group_name: str, namespace_name: str, **kwargs: Any + ) -> AsyncIterator[bytes]: + 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 = kwargs.pop("params", {}) or {} + + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + _request = build_credentials_synchronize_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + async def begin_synchronize( + self, resource_group_name: str, namespace_name: str, **kwargs: Any + ) -> AsyncLROPoller[None]: + """A long-running resource action. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An instance of AsyncLROPoller that returns None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + 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._synchronize_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + 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 + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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 + + +class PoliciesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.deviceregistry.aio.DeviceRegistryMgmtClient`'s + :attr:`policies` attribute. + """ + + 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: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + "accept", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def get( + self, resource_group_name: str, namespace_name: str, policy_name: str, **kwargs: Any + ) -> _models.Policy: + """Get a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :return: Policy. The Policy is compatible with MutableMapping + :rtype: ~azure.mgmt.deviceregistry.models.Policy + :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 = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.Policy] = kwargs.pop("cls", None) + + _request = build_policies_get_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("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]: + if _stream: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.Policy, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def _create_or_update_initial( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + resource: Union[_models.Policy, JSON, IO[bytes]], + **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 = kwargs.pop("params", {}) or {} + + 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" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_policies_create_or_update_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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 [200, 201]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + async def begin_create_or_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + resource: _models.Policy, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Policy]: + """Create a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.deviceregistry.models.Policy + :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 Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_create_or_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Policy]: + """Create a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :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 Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_create_or_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Policy]: + """Create a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param resource: Resource create parameters. Required. + :type resource: 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 Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def begin_create_or_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + resource: Union[_models.Policy, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncLROPoller[_models.Policy]: + """Create a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param resource: Resource create parameters. Is one of the following types: Policy, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.deviceregistry.models.Policy or JSON or IO[bytes] + :return: An instance of AsyncLROPoller that returns Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Policy] = 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._create_or_update_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + resource=resource, + 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Policy, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: + polling_method = polling + if cont_token: + return AsyncLROPoller[_models.Policy].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return AsyncLROPoller[_models.Policy]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def _delete_initial( + self, resource_group_name: str, namespace_name: str, policy_name: str, **kwargs: Any + ) -> AsyncIterator[bytes]: + 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 = kwargs.pop("params", {}) or {} + + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + _request = build_policies_delete_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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, 204]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def begin_delete( + self, resource_group_name: str, namespace_name: str, policy_name: str, **kwargs: Any + ) -> AsyncLROPoller[None]: + """Delete a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :return: An instance of AsyncLROPoller that returns None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + 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._delete_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + 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 + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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 + + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def _update_initial( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + properties: Union[_models.PolicyUpdate, JSON, IO[bytes]], + **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 = kwargs.pop("params", {}) or {} + + 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" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_policies_update_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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 [200, 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + async def begin_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + properties: _models.PolicyUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Policy]: + """Update a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.deviceregistry.models.PolicyUpdate + :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 Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Policy]: + """Update a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :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 Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Policy]: + """Update a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def begin_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + properties: Union[_models.PolicyUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncLROPoller[_models.Policy]: + """Update a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param properties: The resource properties to be updated. Is one of the following types: + PolicyUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.deviceregistry.models.PolicyUpdate or JSON or IO[bytes] + :return: An instance of AsyncLROPoller that returns Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Policy] = 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._update_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + properties=properties, + 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Policy, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: + polling_method = polling + if cont_token: + return AsyncLROPoller[_models.Policy].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return AsyncLROPoller[_models.Policy]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @distributed_trace + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] + }, + api_versions_list=["2026-03-01-preview"], + ) + def list_by_resource_group( + self, resource_group_name: str, namespace_name: str, **kwargs: Any + ) -> AsyncItemPaged["_models.Policy"]: + """List Policy resources by Credential. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An iterator like instance of Policy + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Policy]] = 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_policies_list_by_resource_group_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Policy], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def _revoke_issuer_initial( + self, resource_group_name: str, namespace_name: str, policy_name: str, **kwargs: Any + ) -> AsyncIterator[bytes]: + 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 = kwargs.pop("params", {}) or {} + + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + _request = build_policies_revoke_issuer_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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, 204]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def begin_revoke_issuer( + self, resource_group_name: str, namespace_name: str, policy_name: str, **kwargs: Any + ) -> AsyncLROPoller[None]: + """A long-running resource action. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :return: An instance of AsyncLROPoller that returns None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + 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._revoke_issuer_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + 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 + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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 + + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + "content_type", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def _activate_bring_your_own_root_initial( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + body: Union[_models.ActivateBringYourOwnRootRequest, JSON, IO[bytes]], + **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 = kwargs.pop("params", {}) or {} + + 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" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_policies_activate_bring_your_own_root_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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, 204]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + async def begin_activate_bring_your_own_root( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + body: _models.ActivateBringYourOwnRootRequest, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Activates or renews a Bring Your Own Root policy by accepting a customer-provided signed + certificate. This is a long-running operation that returns no content upon completion. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param body: The content of the action request. Required. + :type body: ~azure.mgmt.deviceregistry.models.ActivateBringYourOwnRootRequest + :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 None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_activate_bring_your_own_root( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + body: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Activates or renews a Bring Your Own Root policy by accepting a customer-provided signed + certificate. This is a long-running operation that returns no content upon completion. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param body: The content of the action request. Required. + :type body: JSON + :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 None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_activate_bring_your_own_root( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + body: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Activates or renews a Bring Your Own Root policy by accepting a customer-provided signed + certificate. This is a long-running operation that returns no content upon completion. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param body: The content of the action request. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + "content_type", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + async def begin_activate_bring_your_own_root( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + body: Union[_models.ActivateBringYourOwnRootRequest, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Activates or renews a Bring Your Own Root policy by accepting a customer-provided signed + certificate. This is a long-running operation that returns no content upon completion. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param body: The content of the action request. Is one of the following types: + ActivateBringYourOwnRootRequest, JSON, IO[bytes] Required. + :type body: ~azure.mgmt.deviceregistry.models.ActivateBringYourOwnRootRequest or JSON or + IO[bytes] + :return: An instance of AsyncLROPoller that returns None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + 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._activate_bring_your_own_root_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + body=body, + 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 + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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 + + +class NamespaceAssetsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.deviceregistry.aio.DeviceRegistryMgmtClient`'s + :attr:`namespace_assets` attribute. + """ + + 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: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace_async + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "asset_name", + "accept", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + async def get( + self, resource_group_name: str, namespace_name: str, asset_name: str, **kwargs: Any + ) -> _models.NamespaceAsset: + """Get a NamespaceAsset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param asset_name: The name of the asset. Required. + :type asset_name: str + :return: NamespaceAsset. The NamespaceAsset is compatible with MutableMapping + :rtype: ~azure.mgmt.deviceregistry.models.NamespaceAsset + :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 = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.NamespaceAsset] = kwargs.pop("cls", None) + + _request = build_namespace_assets_get_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + asset_name=asset_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("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]: + if _stream: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.NamespaceAsset, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "asset_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + async def _create_or_replace_initial( + self, + resource_group_name: str, + namespace_name: str, + asset_name: str, + resource: Union[_models.NamespaceAsset, JSON, IO[bytes]], + **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 = kwargs.pop("params", {}) or {} + + 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" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_namespace_assets_create_or_replace_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + asset_name=asset_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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 [200, 201]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + async def begin_create_or_replace( + self, + resource_group_name: str, + namespace_name: str, + asset_name: str, + resource: _models.NamespaceAsset, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.NamespaceAsset]: + """Create a NamespaceAsset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param asset_name: The name of the asset. Required. + :type asset_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.deviceregistry.models.NamespaceAsset + :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 NamespaceAsset. The NamespaceAsset is + compatible with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.NamespaceAsset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_create_or_replace( + self, + resource_group_name: str, + namespace_name: str, + asset_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.NamespaceAsset]: + """Create a NamespaceAsset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param asset_name: The name of the asset. Required. + :type asset_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :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 NamespaceAsset. The NamespaceAsset is + compatible with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.NamespaceAsset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_create_or_replace( + self, + resource_group_name: str, + namespace_name: str, + asset_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.NamespaceAsset]: + """Create a NamespaceAsset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param asset_name: The name of the asset. Required. + :type asset_name: str + :param resource: Resource create parameters. Required. + :type resource: 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 NamespaceAsset. The NamespaceAsset is + compatible with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.NamespaceAsset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "asset_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + async def begin_create_or_replace( + self, + resource_group_name: str, + namespace_name: str, + asset_name: str, + resource: Union[_models.NamespaceAsset, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncLROPoller[_models.NamespaceAsset]: + """Create a NamespaceAsset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param asset_name: The name of the asset. Required. + :type asset_name: str + :param resource: Resource create parameters. Is one of the following types: NamespaceAsset, + JSON, IO[bytes] Required. + :type resource: ~azure.mgmt.deviceregistry.models.NamespaceAsset or JSON or IO[bytes] + :return: An instance of AsyncLROPoller that returns NamespaceAsset. The NamespaceAsset is + compatible with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.NamespaceAsset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.NamespaceAsset] = 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._create_or_replace_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + asset_name=asset_name, + resource=resource, + 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.NamespaceAsset, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: + polling_method = polling + if cont_token: + return AsyncLROPoller[_models.NamespaceAsset].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return AsyncLROPoller[_models.NamespaceAsset]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "asset_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + async def _update_initial( + self, + resource_group_name: str, + namespace_name: str, + asset_name: str, + properties: Union[_models.NamespaceAssetUpdate, JSON, IO[bytes]], + **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 = kwargs.pop("params", {}) or {} + + 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" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_namespace_assets_update_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + asset_name=asset_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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 [200, 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + async def begin_update( + self, + resource_group_name: str, + namespace_name: str, + asset_name: str, + properties: _models.NamespaceAssetUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.NamespaceAsset]: + """Update a NamespaceAsset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param asset_name: The name of the asset. Required. + :type asset_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.deviceregistry.models.NamespaceAssetUpdate + :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 NamespaceAsset. The NamespaceAsset is + compatible with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.deviceregistry.models.NamespaceAsset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_update( + self, + resource_group_name: str, + namespace_name: str, + asset_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.NamespaceAsset]: + """Update a NamespaceAsset. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. @@ -3879,7 +6365,7 @@ async def begin_update( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_update( self, @@ -3970,7 +6456,7 @@ def get_long_running_output(pipeline_response): "asset_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _delete_initial( self, resource_group_name: str, namespace_name: str, asset_name: str, **kwargs: Any @@ -4002,6 +6488,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4015,7 +6502,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -4023,7 +6513,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -4042,7 +6532,7 @@ async def _delete_initial( "asset_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_delete( self, resource_group_name: str, namespace_name: str, asset_name: str, **kwargs: Any @@ -4111,7 +6601,7 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- params_added_on={ "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def list_by_resource_group( self, resource_group_name: str, namespace_name: str, **kwargs: Any @@ -4183,7 +6673,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.NamespaceAsset], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.NamespaceAsset], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -4199,7 +6692,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -4237,7 +6733,7 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def get( self, resource_group_name: str, namespace_name: str, device_name: str, **kwargs: Any @@ -4282,6 +6778,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4296,11 +6793,14 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.NamespaceDevice, response.json()) @@ -4322,7 +6822,7 @@ async def get( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _create_or_replace_initial( self, @@ -4369,6 +6869,7 @@ async def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4382,7 +6883,10 @@ async def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -4392,7 +6896,7 @@ async def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -4506,7 +7010,7 @@ async def begin_create_or_replace( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_create_or_replace( self, @@ -4599,7 +7103,7 @@ def get_long_running_output(pipeline_response): "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _update_initial( self, @@ -4646,6 +7150,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4659,7 +7164,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -4667,7 +7175,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -4781,7 +7289,7 @@ async def begin_update( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_update( self, @@ -4872,10 +7380,274 @@ def get_long_running_output(pipeline_response): "device_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + async def _delete_initial( + self, resource_group_name: str, namespace_name: str, device_name: str, **kwargs: Any + ) -> AsyncIterator[bytes]: + 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 = kwargs.pop("params", {}) or {} + + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + _request = build_namespace_devices_delete_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + device_name=device_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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, 204]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "device_name", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + async def begin_delete( + self, resource_group_name: str, namespace_name: str, device_name: str, **kwargs: Any + ) -> AsyncLROPoller[None]: + """Delete a NamespaceDevice. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param device_name: The name of the device. Required. + :type device_name: str + :return: An instance of AsyncLROPoller that returns None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + 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._delete_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + device_name=device_name, + 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 + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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 + + @distributed_trace + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def list_by_resource_group( + self, resource_group_name: str, namespace_name: str, **kwargs: Any + ) -> AsyncItemPaged["_models.NamespaceDevice"]: + """List NamespaceDevice resources by Namespace. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An iterator like instance of NamespaceDevice + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.deviceregistry.models.NamespaceDevice] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.NamespaceDevice]] = 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_namespace_devices_list_by_resource_group_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.NamespaceDevice], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "device_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-03-01-preview"], ) - async def _delete_initial( - self, resource_group_name: str, namespace_name: str, device_name: str, **kwargs: Any + async def _revoke_initial( + self, + resource_group_name: str, + namespace_name: str, + device_name: str, + body: Union[_models.DeviceCredentialsRevokeRequest, JSON, IO[bytes]], + **kwargs: Any ) -> AsyncIterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -4885,17 +7657,27 @@ async def _delete_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) - _request = build_namespace_devices_delete_request( + content_type = content_type or "application/json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_namespace_devices_revoke_request( resource_group_name=resource_group_name, namespace_name=namespace_name, device_name=device_name, subscription_id=self._config.subscription_id, + content_type=content_type, api_version=self._config.api_version, + content=_content, headers=_headers, params=_params, ) @@ -4904,6 +7686,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4911,45 +7694,148 @@ async def _delete_initial( response = pipeline_response.http_response - if response.status_code not in [202, 204]: + if response.status_code not in [200, 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} if response.status_code == 202: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore + @overload + async def begin_revoke( + self, + resource_group_name: str, + namespace_name: str, + device_name: str, + body: _models.DeviceCredentialsRevokeRequest, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[None]: + """A long-running resource action. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param device_name: The name of the device. Required. + :type device_name: str + :param body: The content of the action request. Required. + :type body: ~azure.mgmt.deviceregistry.models.DeviceCredentialsRevokeRequest + :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 None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_revoke( + self, + resource_group_name: str, + namespace_name: str, + device_name: str, + body: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[None]: + """A long-running resource action. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param device_name: The name of the device. Required. + :type device_name: str + :param body: The content of the action request. Required. + :type body: JSON + :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 None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_revoke( + self, + resource_group_name: str, + namespace_name: str, + device_name: str, + body: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[None]: + """A long-running resource action. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param device_name: The name of the device. Required. + :type device_name: str + :param body: The content of the action request. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + @distributed_trace_async @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2026-03-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", "device_name", + "content_type", + "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - async def begin_delete( - self, resource_group_name: str, namespace_name: str, device_name: str, **kwargs: Any + async def begin_revoke( + self, + resource_group_name: str, + namespace_name: str, + device_name: str, + body: Union[_models.DeviceCredentialsRevokeRequest, JSON, IO[bytes]], + **kwargs: Any ) -> AsyncLROPoller[None]: - """Delete a NamespaceDevice. + """A long-running resource action. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. @@ -4958,22 +7844,29 @@ async def begin_delete( :type namespace_name: str :param device_name: The name of the device. Required. :type device_name: str + :param body: The content of the action request. Is one of the following types: + DeviceCredentialsRevokeRequest, JSON, IO[bytes] Required. + :type body: ~azure.mgmt.deviceregistry.models.DeviceCredentialsRevokeRequest or JSON or + IO[bytes] :return: An instance of AsyncLROPoller that returns None :rtype: ~azure.core.polling.AsyncLROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} + 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._delete_initial( + raw_result = await self._revoke_initial( resource_group_name=resource_group_name, namespace_name=namespace_name, device_name=device_name, + body=body, + content_type=content_type, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -5007,107 +7900,6 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- ) return AsyncLROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore - @distributed_trace - @api_version_validation( - method_added_on="2025-07-01-preview", - params_added_on={ - "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] - }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], - ) - def list_by_resource_group( - self, resource_group_name: str, namespace_name: str, **kwargs: Any - ) -> AsyncItemPaged["_models.NamespaceDevice"]: - """List NamespaceDevice resources by Namespace. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param namespace_name: The name of the namespace. Required. - :type namespace_name: str - :return: An iterator like instance of NamespaceDevice - :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.deviceregistry.models.NamespaceDevice] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.NamespaceDevice]] = 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_namespace_devices_list_by_resource_group_request( - resource_group_name=resource_group_name, - namespace_name=namespace_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request - - async def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.NamespaceDevice], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, AsyncList(list_of_elem) - - async def get_next(next_link=None): - _request = prepare_request(next_link) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - return pipeline_response - - return AsyncItemPaged(get_next, extract_data) - class NamespaceDiscoveredAssetsOperations: """ @@ -5139,7 +7931,7 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def get( self, resource_group_name: str, namespace_name: str, discovered_asset_name: str, **kwargs: Any @@ -5185,6 +7977,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5199,11 +7992,14 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.NamespaceDiscoveredAsset, response.json()) @@ -5225,7 +8021,7 @@ async def get( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _create_or_replace_initial( self, @@ -5272,6 +8068,7 @@ async def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5285,7 +8082,10 @@ async def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -5295,7 +8095,7 @@ async def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -5412,7 +8212,7 @@ async def begin_create_or_replace( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_create_or_replace( self, @@ -5506,7 +8306,7 @@ def get_long_running_output(pipeline_response): "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _update_initial( self, @@ -5553,6 +8353,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5566,7 +8367,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -5574,7 +8378,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -5691,7 +8495,7 @@ async def begin_update( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_update( self, @@ -5784,7 +8588,7 @@ def get_long_running_output(pipeline_response): "discovered_asset_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _delete_initial( self, resource_group_name: str, namespace_name: str, discovered_asset_name: str, **kwargs: Any @@ -5816,6 +8620,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5829,7 +8634,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -5837,7 +8645,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -5856,7 +8664,7 @@ async def _delete_initial( "discovered_asset_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_delete( self, resource_group_name: str, namespace_name: str, discovered_asset_name: str, **kwargs: Any @@ -5925,7 +8733,7 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- params_added_on={ "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def list_by_resource_group( self, resource_group_name: str, namespace_name: str, **kwargs: Any @@ -5997,7 +8805,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.NamespaceDiscoveredAsset], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.NamespaceDiscoveredAsset], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -6013,7 +8824,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -6051,7 +8865,7 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def get( self, resource_group_name: str, namespace_name: str, discovered_device_name: str, **kwargs: Any @@ -6097,6 +8911,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -6111,11 +8926,14 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.NamespaceDiscoveredDevice, response.json()) @@ -6137,7 +8955,7 @@ async def get( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _create_or_replace_initial( self, @@ -6184,6 +9002,7 @@ async def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -6197,7 +9016,10 @@ async def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -6207,7 +9029,7 @@ async def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -6324,7 +9146,7 @@ async def begin_create_or_replace( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_create_or_replace( self, @@ -6419,7 +9241,7 @@ def get_long_running_output(pipeline_response): "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _update_initial( self, @@ -6466,6 +9288,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -6479,7 +9302,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -6487,7 +9313,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -6604,7 +9430,7 @@ async def begin_update( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_update( self, @@ -6697,7 +9523,7 @@ def get_long_running_output(pipeline_response): "discovered_device_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _delete_initial( self, resource_group_name: str, namespace_name: str, discovered_device_name: str, **kwargs: Any @@ -6729,6 +9555,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -6742,7 +9569,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -6750,7 +9580,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -6769,7 +9599,7 @@ async def _delete_initial( "discovered_device_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_delete( self, resource_group_name: str, namespace_name: str, discovered_device_name: str, **kwargs: Any @@ -6838,7 +9668,7 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- params_added_on={ "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def list_by_resource_group( self, resource_group_name: str, namespace_name: str, **kwargs: Any @@ -6910,7 +9740,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.NamespaceDiscoveredDevice], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.NamespaceDiscoveredDevice], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -6926,7 +9759,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -6963,7 +9799,13 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def get(self, resource_group_name: str, schema_registry_name: str, **kwargs: Any) -> _models.SchemaRegistry: """Get a SchemaRegistry. @@ -7003,6 +9845,7 @@ async def get(self, resource_group_name: str, schema_registry_name: str, **kwarg } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -7017,11 +9860,14 @@ async def get(self, resource_group_name: str, schema_registry_name: str, **kwarg except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.SchemaRegistry, response.json()) @@ -7042,7 +9888,13 @@ async def get(self, resource_group_name: str, schema_registry_name: str, **kwarg "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def _create_or_replace_initial( self, @@ -7087,6 +9939,7 @@ async def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -7100,7 +9953,10 @@ async def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -7110,7 +9966,7 @@ async def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -7214,7 +10070,13 @@ async def begin_create_or_replace( "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def begin_create_or_replace( self, @@ -7302,7 +10164,13 @@ def get_long_running_output(pipeline_response): "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def _update_initial( self, @@ -7347,6 +10215,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -7360,7 +10229,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -7368,7 +10240,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -7472,7 +10344,13 @@ async def begin_update( "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def begin_update( self, @@ -7553,7 +10431,13 @@ def get_long_running_output(pipeline_response): params_added_on={ "2024-09-01-preview": ["api_version", "subscription_id", "resource_group_name", "schema_registry_name"] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def _delete_initial( self, resource_group_name: str, schema_registry_name: str, **kwargs: Any @@ -7584,6 +10468,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -7597,7 +10482,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -7605,7 +10493,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -7618,7 +10506,13 @@ async def _delete_initial( params_added_on={ "2024-09-01-preview": ["api_version", "subscription_id", "resource_group_name", "schema_registry_name"] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def begin_delete( self, resource_group_name: str, schema_registry_name: str, **kwargs: Any @@ -7682,7 +10576,13 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- @api_version_validation( method_added_on="2024-09-01-preview", params_added_on={"2024-09-01-preview": ["api_version", "subscription_id", "resource_group_name", "accept"]}, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def list_by_resource_group( self, resource_group_name: str, **kwargs: Any @@ -7751,7 +10651,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.SchemaRegistry], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.SchemaRegistry], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -7767,7 +10670,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -7778,7 +10684,13 @@ async def get_next(next_link=None): @api_version_validation( method_added_on="2024-09-01-preview", params_added_on={"2024-09-01-preview": ["api_version", "subscription_id", "accept"]}, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def list_by_subscription(self, **kwargs: Any) -> AsyncItemPaged["_models.SchemaRegistry"]: """List SchemaRegistry resources by subscription ID. @@ -7841,7 +10753,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.SchemaRegistry], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.SchemaRegistry], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -7857,7 +10772,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -7895,7 +10813,13 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def get( self, resource_group_name: str, schema_registry_name: str, schema_name: str, **kwargs: Any @@ -7940,6 +10864,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -7954,11 +10879,14 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.Schema, response.json()) @@ -8071,7 +10999,13 @@ async def create_or_replace( "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def create_or_replace( self, @@ -8134,6 +11068,7 @@ async def create_or_replace( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -8148,11 +11083,14 @@ async def create_or_replace( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.Schema, response.json()) @@ -8172,7 +11110,7 @@ async def create_or_replace( "schema_name", ] }, - api_versions_list=["2025-10-01"], + api_versions_list=["2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _delete_initial( self, resource_group_name: str, schema_registry_name: str, schema_name: str, **kwargs: Any @@ -8204,6 +11142,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -8217,7 +11156,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -8225,7 +11167,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -8244,7 +11186,7 @@ async def _delete_initial( "schema_name", ] }, - api_versions_list=["2025-10-01"], + api_versions_list=["2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_delete( self, resource_group_name: str, schema_registry_name: str, schema_name: str, **kwargs: Any @@ -8319,7 +11261,13 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def list_by_schema_registry( self, resource_group_name: str, schema_registry_name: str, **kwargs: Any @@ -8390,7 +11338,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Schema], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Schema], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -8406,7 +11357,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -8445,7 +11399,13 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def get( self, @@ -8498,6 +11458,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -8512,11 +11473,14 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.SchemaVersion, response.json()) @@ -8639,7 +11603,13 @@ async def create_or_replace( "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) async def create_or_replace( self, @@ -8706,6 +11676,7 @@ async def create_or_replace( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -8720,11 +11691,14 @@ async def create_or_replace( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.SchemaVersion, response.json()) @@ -8745,7 +11719,7 @@ async def create_or_replace( "schema_version_name", ] }, - api_versions_list=["2025-10-01"], + api_versions_list=["2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def _delete_initial( self, @@ -8783,6 +11757,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -8796,7 +11771,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -8804,7 +11782,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -8824,7 +11802,7 @@ async def _delete_initial( "schema_version_name", ] }, - api_versions_list=["2025-10-01"], + api_versions_list=["2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) async def begin_delete( self, @@ -8908,7 +11886,13 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def list_by_schema( self, resource_group_name: str, schema_registry_name: str, schema_name: str, **kwargs: Any @@ -8983,7 +11967,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.SchemaVersion], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.SchemaVersion], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -8999,7 +11986,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/__init__.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/__init__.py index 5f39e339c418..56e28c1ec462 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/__init__.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/__init__.py @@ -14,6 +14,7 @@ from ._models import ( # type: ignore + ActivateBringYourOwnRootRequest, Asset, AssetEndpointProfile, AssetEndpointProfileProperties, @@ -31,7 +32,13 @@ Authentication, BillingContainer, BillingContainerProperties, + BringYourOwnRoot, BrokerStateStoreDestinationConfiguration, + CertificateAuthorityConfiguration, + CertificateConfiguration, + Credential, + CredentialProperties, + CredentialUpdate, DataPoint, DataPointBase, Dataset, @@ -39,6 +46,8 @@ DatasetDestination, DatasetMqttDestination, DatasetStorageDestination, + DeviceCredentialPolicy, + DeviceCredentialsRevokeRequest, DeviceMessagingEndpoint, DeviceRef, DeviceStatus, @@ -59,6 +68,7 @@ ExtendedLocation, HostAuthentication, InboundEndpoints, + LeafCertificateConfiguration, ManagementAction, ManagementGroup, MessageSchemaReference, @@ -111,6 +121,10 @@ OperationDisplay, OperationStatusResult, OutboundEndpoints, + Policy, + PolicyProperties, + PolicyUpdate, + PolicyUpdateProperties, ProxyResource, Resource, Schema, @@ -140,6 +154,7 @@ from ._enums import ( # type: ignore ActionType, AuthenticationMethod, + BringYourOwnRootStatus, CreatedByType, DataPointObservabilityMode, DatasetDestinationTarget, @@ -154,6 +169,7 @@ SchemaType, Scope, StreamDestinationTarget, + SupportedKeyType, SystemAssignedServiceIdentityType, TopicRetainType, ) @@ -162,6 +178,7 @@ from ._patch import patch_sdk as _patch_sdk __all__ = [ + "ActivateBringYourOwnRootRequest", "Asset", "AssetEndpointProfile", "AssetEndpointProfileProperties", @@ -179,7 +196,13 @@ "Authentication", "BillingContainer", "BillingContainerProperties", + "BringYourOwnRoot", "BrokerStateStoreDestinationConfiguration", + "CertificateAuthorityConfiguration", + "CertificateConfiguration", + "Credential", + "CredentialProperties", + "CredentialUpdate", "DataPoint", "DataPointBase", "Dataset", @@ -187,6 +210,8 @@ "DatasetDestination", "DatasetMqttDestination", "DatasetStorageDestination", + "DeviceCredentialPolicy", + "DeviceCredentialsRevokeRequest", "DeviceMessagingEndpoint", "DeviceRef", "DeviceStatus", @@ -207,6 +232,7 @@ "ExtendedLocation", "HostAuthentication", "InboundEndpoints", + "LeafCertificateConfiguration", "ManagementAction", "ManagementGroup", "MessageSchemaReference", @@ -259,6 +285,10 @@ "OperationDisplay", "OperationStatusResult", "OutboundEndpoints", + "Policy", + "PolicyProperties", + "PolicyUpdate", + "PolicyUpdateProperties", "ProxyResource", "Resource", "Schema", @@ -285,6 +315,7 @@ "X509Credentials", "ActionType", "AuthenticationMethod", + "BringYourOwnRootStatus", "CreatedByType", "DataPointObservabilityMode", "DatasetDestinationTarget", @@ -299,6 +330,7 @@ "SchemaType", "Scope", "StreamDestinationTarget", + "SupportedKeyType", "SystemAssignedServiceIdentityType", "TopicRetainType", ] diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/_enums.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/_enums.py index e57a6175b562..f4a63a6af773 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/_enums.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/_enums.py @@ -30,6 +30,18 @@ class AuthenticationMethod(str, Enum, metaclass=CaseInsensitiveEnumMeta): """The user authentication method is a username and password.""" +class BringYourOwnRootStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Status of the Bring Your Own Root configuration.""" + + PENDING_ACTIVATION = "PendingActivation" + """The CSR has been generated and is waiting for the customer to provide the signed certificate.""" + ACTIVE = "Active" + """The signed certificate has been successfully uploaded and validated, and the CA is active.""" + ACTIVE_BUT_PENDING_RENEWAL = "ActiveButPendingRenewal" + """The certificate is nearing expiration (within renewal window) or has expired. A new CSR has + been generated and is waiting for the customer to provide a new signed certificate.""" + + class CreatedByType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """The kind of entity that created the resource.""" @@ -91,9 +103,9 @@ class Format(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Defines the schema format.""" JSON_SCHEMA_DRAFT7 = "JsonSchema/draft-07" - """JSON Schema version draft 7 format""" + """JSON Schema version draft 7 format.""" DELTA1_0 = "Delta/1.0" - """Delta format""" + """Delta format.""" class ManagementActionType(str, Enum, metaclass=CaseInsensitiveEnumMeta): @@ -159,14 +171,14 @@ class SchemaType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Defines the schema type.""" MESSAGE_SCHEMA = "MessageSchema" - """Message Schema schema type""" + """Message Schema schema type.""" class Scope(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Scope of the migrate resources operation.""" RESOURCES = "Resources" - """Scoping the migration to resourceIds provided""" + """Scoping the migration to resourceIds provided.""" class StreamDestinationTarget(str, Enum, metaclass=CaseInsensitiveEnumMeta): @@ -178,6 +190,13 @@ class StreamDestinationTarget(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Storage target.""" +class SupportedKeyType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Supported key types.""" + + ECC = "ECC" + """Indicates the ECC key type.""" + + class SystemAssignedServiceIdentityType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Type of managed service identity (either system assigned, or none).""" diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/_models.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/_models.py index f67945143b48..893147949ca8 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/_models.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/models/_models.py @@ -18,6 +18,43 @@ from .. import models as _models +class ActivateBringYourOwnRootRequest(_Model): + """Request payload for activating a Bring Your Own Root policy with a customer-provided signed + certificate. + + :ivar certificate_chain: Certificate chain in PEM format, including the signed certificate. The + first certificate must be the signed certificate (matching the CSR generated by the service), + followed by any intermediate CAs, and optionally the root CA. Certificates must be ordered from + leaf to root and concatenated in PEM format. Required. + :vartype certificate_chain: str + """ + + certificate_chain: str = rest_field( + name="certificateChain", visibility=["read", "create", "update", "delete", "query"] + ) + """Certificate chain in PEM format, including the signed certificate. The first certificate must + be the signed certificate (matching the CSR generated by the service), followed by any + intermediate CAs, and optionally the root CA. Certificates must be ordered from leaf to root + and concatenated in PEM format. Required.""" + + @overload + def __init__( + self, + *, + certificate_chain: str, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class Resource(_Model): """Resource. @@ -545,7 +582,7 @@ class AssetProperties(_Model): \"Accepted\", and \"Deleting\".""" @overload - def __init__( # pylint: disable=too-many-locals + def __init__( self, *, asset_endpoint_profile_ref: str, @@ -965,6 +1002,58 @@ class BillingContainerProperties(_Model): \"Accepted\", and \"Deleting\".""" +class BringYourOwnRoot(_Model): + """Configuration for Bring Your Own Root. When enabled, customers provide their own CA-signed + certificates instead of using the service-managed CA. + + :ivar enabled: Indicates whether Bring Your Own Root is enabled. This can only be set at + creation time and cannot be changed afterward. Required. + :vartype enabled: bool + :ivar certificate_signing_request: Certificate Signing Request (CSR) in PEM format, generated + by the service. Sign this CSR with your Certificate Authority and activate via the + activateBringYourOwnRoot action. A new CSR is generated at policy creation and when + certificates near expiration. + :vartype certificate_signing_request: str + :ivar issuing_certificate_thumbprint: Thumbprint of the issuing certificate. + :vartype issuing_certificate_thumbprint: str + :ivar status: The status of the Bring Your Own Root configuration, indicating the current state + of the certificate lifecycle. Known values are: "PendingActivation", "Active", and + "ActiveButPendingRenewal". + :vartype status: str or ~azure.mgmt.deviceregistry.models.BringYourOwnRootStatus + """ + + enabled: bool = rest_field(visibility=["read", "create"]) + """Indicates whether Bring Your Own Root is enabled. This can only be set at creation time and + cannot be changed afterward. Required.""" + certificate_signing_request: Optional[str] = rest_field(name="certificateSigningRequest", visibility=["read"]) + """Certificate Signing Request (CSR) in PEM format, generated by the service. Sign this CSR with + your Certificate Authority and activate via the activateBringYourOwnRoot action. A new CSR is + generated at policy creation and when certificates near expiration.""" + issuing_certificate_thumbprint: Optional[str] = rest_field(name="issuingCertificateThumbprint", visibility=["read"]) + """Thumbprint of the issuing certificate.""" + status: Optional[Union[str, "_models.BringYourOwnRootStatus"]] = rest_field(visibility=["read"]) + """The status of the Bring Your Own Root configuration, indicating the current state of the + certificate lifecycle. Known values are: \"PendingActivation\", \"Active\", and + \"ActiveButPendingRenewal\".""" + + @overload + def __init__( + self, + *, + enabled: bool, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class BrokerStateStoreDestinationConfiguration(_Model): """The configuration for a MQTT broker state store destination. @@ -993,6 +1082,189 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) +class CertificateAuthorityConfiguration(_Model): + """The configuration to set up an ICA. + + :ivar key_type: Crypto type: ECC. Required. "ECC" + :vartype key_type: str or ~azure.mgmt.deviceregistry.models.SupportedKeyType + :ivar subject: Certificate subject. + :vartype subject: str + :ivar validity_not_before: Certificate is valid not before this date. Format ISO8601. Generated + based on on validity period. + :vartype validity_not_before: ~datetime.datetime + :ivar validity_not_after: Certificate is valid not after this date. Format ISO8601. Generated + based on validity period. + :vartype validity_not_after: ~datetime.datetime + :ivar bring_your_own_root: Configuration for Bring Your Own Root. + :vartype bring_your_own_root: ~azure.mgmt.deviceregistry.models.BringYourOwnRoot + """ + + key_type: Union[str, "_models.SupportedKeyType"] = rest_field(name="keyType", visibility=["read", "create"]) + """Crypto type: ECC. Required. \"ECC\"""" + subject: Optional[str] = rest_field(visibility=["read"]) + """Certificate subject.""" + validity_not_before: Optional[datetime.datetime] = rest_field( + name="validityNotBefore", visibility=["read"], format="rfc3339" + ) + """Certificate is valid not before this date. Format ISO8601. Generated based on on validity + period.""" + validity_not_after: Optional[datetime.datetime] = rest_field( + name="validityNotAfter", visibility=["read"], format="rfc3339" + ) + """Certificate is valid not after this date. Format ISO8601. Generated based on validity period.""" + bring_your_own_root: Optional["_models.BringYourOwnRoot"] = rest_field( + name="bringYourOwnRoot", visibility=["read", "create", "update", "delete", "query"] + ) + """Configuration for Bring Your Own Root.""" + + @overload + def __init__( + self, + *, + key_type: Union[str, "_models.SupportedKeyType"], + bring_your_own_root: Optional["_models.BringYourOwnRoot"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class CertificateConfiguration(_Model): + """The certificate configuration. + + :ivar certificate_authority_configuration: The configuration to set up an ICA. Required. + :vartype certificate_authority_configuration: + ~azure.mgmt.deviceregistry.models.CertificateAuthorityConfiguration + :ivar leaf_certificate_configuration: The leaf certificate configuration. Required. + :vartype leaf_certificate_configuration: + ~azure.mgmt.deviceregistry.models.LeafCertificateConfiguration + """ + + certificate_authority_configuration: "_models.CertificateAuthorityConfiguration" = rest_field( + name="certificateAuthorityConfiguration", visibility=["read", "create", "update", "delete", "query"] + ) + """The configuration to set up an ICA. Required.""" + leaf_certificate_configuration: "_models.LeafCertificateConfiguration" = rest_field( + name="leafCertificateConfiguration", visibility=["read", "create", "update", "delete", "query"] + ) + """The leaf certificate configuration. Required.""" + + @overload + def __init__( + self, + *, + certificate_authority_configuration: "_models.CertificateAuthorityConfiguration", + leaf_certificate_configuration: "_models.LeafCertificateConfiguration", + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class Credential(TrackedResource): + """A Credential Resource. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.deviceregistry.models.SystemData + :ivar tags: Resource tags. + :vartype tags: dict[str, str] + :ivar location: The geo-location where the resource lives. Required. + :vartype location: str + :ivar properties: The resource-specific properties for this resource. + :vartype properties: ~azure.mgmt.deviceregistry.models.CredentialProperties + """ + + properties: Optional["_models.CredentialProperties"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """The resource-specific properties for this resource.""" + + @overload + def __init__( + self, + *, + location: str, + tags: Optional[dict[str, str]] = None, + properties: Optional["_models.CredentialProperties"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class CredentialProperties(_Model): + """Details of the Credential Resource. + + :ivar provisioning_state: The status of the last operation. Known values are: "Succeeded", + "Failed", "Canceled", "Accepted", and "Deleting". + :vartype provisioning_state: str or ~azure.mgmt.deviceregistry.models.ProvisioningState + """ + + provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = rest_field( + name="provisioningState", visibility=["read"] + ) + """The status of the last operation. Known values are: \"Succeeded\", \"Failed\", \"Canceled\", + \"Accepted\", and \"Deleting\".""" + + +class CredentialUpdate(_Model): + """The type used for update operations of the Credential. + + :ivar tags: Resource tags. + :vartype tags: dict[str, str] + """ + + tags: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """Resource tags.""" + + @overload + def __init__( + self, + *, + tags: Optional[dict[str, str]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class DataPointBase(_Model): """Defines the data point properties. @@ -1273,6 +1545,66 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: self.target = DatasetDestinationTarget.STORAGE # type: ignore +class DeviceCredentialPolicy(_Model): + """Defines the Policy used to issue device certificates if any. + + :ivar resource_id: Resource Id of the Policy. + :vartype resource_id: str + """ + + resource_id: Optional[str] = rest_field( + name="resourceId", visibility=["read", "create", "update", "delete", "query"] + ) + """Resource Id of the Policy.""" + + @overload + def __init__( + self, + *, + resource_id: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class DeviceCredentialsRevokeRequest(_Model): + """Request payload for revoking device credentials. + + :ivar disable: Indicates whether to disable the device(s) after revoking credentials. Prevents + new credentials to be issued. + :vartype disable: bool + """ + + disable: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """Indicates whether to disable the device(s) after revoking credentials. Prevents new credentials + to be issued.""" + + @overload + def __init__( + self, + *, + disable: Optional[bool] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class DeviceMessagingEndpoint(_Model): """Device messaging endpoint model. @@ -1957,6 +2289,36 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) +class LeafCertificateConfiguration(_Model): + """The leaf certificate configuration. + + :ivar validity_period_in_days: The validity period in days. Required. + :vartype validity_period_in_days: int + """ + + validity_period_in_days: int = rest_field( + name="validityPeriodInDays", visibility=["read", "create", "update", "delete", "query"] + ) + """The validity period in days. Required.""" + + @overload + def __init__( + self, + *, + validity_period_in_days: int, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class ManagementAction(_Model): """Defines the action properties. @@ -3001,7 +3363,7 @@ class NamespaceAssetUpdateProperties(_Model): per-group configuration.""" @overload - def __init__( # pylint: disable=too-many-locals + def __init__( self, *, enabled: Optional[bool] = None, @@ -3248,6 +3610,8 @@ class NamespaceDeviceProperties(_Model): :ivar provisioning_state: Provisioning state of the resource. Known values are: "Succeeded", "Failed", "Canceled", "Accepted", and "Deleting". :vartype provisioning_state: str or ~azure.mgmt.deviceregistry.models.ProvisioningState + :ivar policy: Policy used to issue device certificates. + :vartype policy: ~azure.mgmt.deviceregistry.models.DeviceCredentialPolicy """ uuid: Optional[str] = rest_field(visibility=["read"]) @@ -3288,6 +3652,10 @@ class NamespaceDeviceProperties(_Model): ) """Provisioning state of the resource. Known values are: \"Succeeded\", \"Failed\", \"Canceled\", \"Accepted\", and \"Deleting\".""" + policy: Optional["_models.DeviceCredentialPolicy"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """Policy used to issue device certificates.""" @overload def __init__( @@ -3302,6 +3670,7 @@ def __init__( operating_system_version: Optional[str] = None, endpoints: Optional["_models.MessagingEndpoints"] = None, attributes: Optional[dict[str, Any]] = None, + policy: Optional["_models.DeviceCredentialPolicy"] = None, ) -> None: ... @overload @@ -3359,6 +3728,8 @@ class NamespaceDeviceUpdateProperties(_Model): :vartype endpoints: ~azure.mgmt.deviceregistry.models.MessagingEndpoints :ivar attributes: A set of key-value pairs that contain custom attributes set by the customer. :vartype attributes: dict[str, any] + :ivar policy: Policy used to issue device certificates. + :vartype policy: ~azure.mgmt.deviceregistry.models.DeviceCredentialPolicy :ivar enabled: Indicates if the resource and identity are enabled or not. A disabled device cannot authenticate with Microsoft Entra ID. :vartype enabled: bool @@ -3374,6 +3745,10 @@ class NamespaceDeviceUpdateProperties(_Model): """Property bag containing the device's unassigned and assigned endpoints.""" attributes: Optional[dict[str, Any]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """A set of key-value pairs that contain custom attributes set by the customer.""" + policy: Optional["_models.DeviceCredentialPolicy"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """Policy used to issue device certificates.""" enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Indicates if the resource and identity are enabled or not. A disabled device cannot authenticate with Microsoft Entra ID.""" @@ -3385,6 +3760,7 @@ def __init__( operating_system_version: Optional[str] = None, endpoints: Optional["_models.MessagingEndpoints"] = None, attributes: Optional[dict[str, Any]] = None, + policy: Optional["_models.DeviceCredentialPolicy"] = None, enabled: Optional[bool] = None, ) -> None: ... @@ -5042,7 +5418,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class OperationDisplay(_Model): - """Localized display information for and operation. + """Localized display information for an operation. :ivar provider: The localized friendly form of the resource provider name, e.g. "Microsoft Monitoring Insights" or "Microsoft Compute". @@ -5185,6 +5561,145 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) +class Policy(ProxyResource): + """A Credential Policy. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.deviceregistry.models.SystemData + :ivar properties: The resource-specific properties for this resource. + :vartype properties: ~azure.mgmt.deviceregistry.models.PolicyProperties + """ + + properties: Optional["_models.PolicyProperties"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """The resource-specific properties for this resource.""" + + @overload + def __init__( + self, + *, + properties: Optional["_models.PolicyProperties"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class PolicyProperties(_Model): + """Details of the Credential Policy. + + :ivar provisioning_state: The status of the last operation. Known values are: "Succeeded", + "Failed", "Canceled", "Accepted", and "Deleting". + :vartype provisioning_state: str or ~azure.mgmt.deviceregistry.models.ProvisioningState + :ivar certificate: The certificate configuration. + :vartype certificate: ~azure.mgmt.deviceregistry.models.CertificateConfiguration + """ + + provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = rest_field( + name="provisioningState", visibility=["read"] + ) + """The status of the last operation. Known values are: \"Succeeded\", \"Failed\", \"Canceled\", + \"Accepted\", and \"Deleting\".""" + certificate: Optional["_models.CertificateConfiguration"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """The certificate configuration.""" + + @overload + def __init__( + self, + *, + certificate: Optional["_models.CertificateConfiguration"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class PolicyUpdate(_Model): + """The type used for update operations of the Policy. + + :ivar properties: The resource-specific properties for this resource. + :vartype properties: ~azure.mgmt.deviceregistry.models.PolicyUpdateProperties + """ + + properties: Optional["_models.PolicyUpdateProperties"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """The resource-specific properties for this resource.""" + + @overload + def __init__( + self, + *, + properties: Optional["_models.PolicyUpdateProperties"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class PolicyUpdateProperties(_Model): + """The updatable properties of the Policy. + + :ivar certificate: The certificate configuration. + :vartype certificate: ~azure.mgmt.deviceregistry.models.CertificateConfiguration + """ + + certificate: Optional["_models.CertificateConfiguration"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """The certificate configuration.""" + + @overload + def __init__( + self, + *, + certificate: Optional["_models.CertificateConfiguration"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class Schema(ProxyResource): """Schema definition. diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/operations/__init__.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/operations/__init__.py index efff1fb6e0ed..0e32b3a3ba1b 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/operations/__init__.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/operations/__init__.py @@ -18,6 +18,8 @@ from ._operations import AssetEndpointProfilesOperations # type: ignore from ._operations import BillingContainersOperations # type: ignore from ._operations import NamespacesOperations # type: ignore +from ._operations import CredentialsOperations # type: ignore +from ._operations import PoliciesOperations # type: ignore from ._operations import NamespaceAssetsOperations # type: ignore from ._operations import NamespaceDevicesOperations # type: ignore from ._operations import NamespaceDiscoveredAssetsOperations # type: ignore @@ -37,6 +39,8 @@ "AssetEndpointProfilesOperations", "BillingContainersOperations", "NamespacesOperations", + "CredentialsOperations", + "PoliciesOperations", "NamespaceAssetsOperations", "NamespaceDevicesOperations", "NamespaceDiscoveredAssetsOperations", diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/operations/_operations.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/operations/_operations.py index 4a58229eca53..98b231cf6b79 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/operations/_operations.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/azure/mgmt/deviceregistry/operations/_operations.py @@ -51,7 +51,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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -72,7 +72,7 @@ def build_operation_status_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -100,7 +100,7 @@ def build_assets_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -129,7 +129,7 @@ def build_assets_create_or_replace_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -160,7 +160,7 @@ def build_assets_update_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -189,7 +189,7 @@ def build_assets_delete_request( ) -> HttpRequest: _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/assets/{assetName}" path_format_arguments = { @@ -212,7 +212,7 @@ def build_assets_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -241,7 +241,7 @@ def build_assets_list_by_subscription_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -267,7 +267,7 @@ def build_asset_endpoint_profiles_get_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -296,7 +296,7 @@ def build_asset_endpoint_profiles_create_or_replace_request( # pylint: disable= _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -327,7 +327,7 @@ def build_asset_endpoint_profiles_update_request( # pylint: disable=name-too-lo _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -356,7 +356,7 @@ def build_asset_endpoint_profiles_delete_request( # pylint: disable=name-too-lo ) -> HttpRequest: _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/assetEndpointProfiles/{assetEndpointProfileName}" path_format_arguments = { @@ -379,7 +379,7 @@ def build_asset_endpoint_profiles_list_by_resource_group_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -406,7 +406,7 @@ def build_asset_endpoint_profiles_list_by_subscription_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -432,7 +432,7 @@ def build_billing_containers_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -459,7 +459,7 @@ def build_billing_containers_list_by_subscription_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -485,7 +485,7 @@ def build_namespaces_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -514,7 +514,7 @@ def build_namespaces_create_or_replace_request( # pylint: disable=name-too-long _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -545,7 +545,7 @@ def build_namespaces_update_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -574,7 +574,7 @@ def build_namespaces_delete_request( ) -> HttpRequest: _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}" path_format_arguments = { @@ -597,7 +597,7 @@ def build_namespaces_list_by_resource_group_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -624,7 +624,7 @@ def build_namespaces_list_by_subscription_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -651,7 +651,7 @@ def build_namespaces_migrate_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -675,22 +675,21 @@ def build_namespaces_migrate_request( return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_assets_get_request( - resource_group_name: str, namespace_name: str, asset_name: str, subscription_id: str, **kwargs: Any +def build_credentials_get_request( + resource_group_name: str, namespace_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/assets/{assetName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "assetName": _SERIALIZER.url("asset_name", asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -704,23 +703,22 @@ def build_namespace_assets_get_request( return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_assets_create_or_replace_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, asset_name: str, subscription_id: str, **kwargs: Any +def build_credentials_create_or_update_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/assets/{assetName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "assetName": _SERIALIZER.url("asset_name", asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -736,23 +734,44 @@ def build_namespace_assets_create_or_replace_request( # pylint: disable=name-to return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_assets_update_request( - resource_group_name: str, namespace_name: str, asset_name: str, subscription_id: str, **kwargs: Any +def build_credentials_delete_request( + resource_group_name: str, namespace_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) + + +def build_credentials_update_request( + resource_group_name: str, namespace_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/assets/{assetName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "assetName": _SERIALIZER.url("asset_name", asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -768,19 +787,21 @@ def build_namespace_assets_update_request( return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_assets_delete_request( - resource_group_name: str, namespace_name: str, asset_name: str, subscription_id: str, **kwargs: Any +def build_credentials_list_by_resource_group_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + accept = _headers.pop("Accept", "application/json") + # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/assets/{assetName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "assetName": _SERIALIZER.url("asset_name", asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -788,24 +809,50 @@ def build_namespace_assets_delete_request( # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_assets_list_by_resource_group_request( # pylint: disable=name-too-long +def build_credentials_synchronize_request( resource_group_name: str, namespace_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default/synchronize" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + return HttpRequest(method="POST", url=_url, params=_params, **kwargs) + + +def build_policies_get_request( + resource_group_name: str, namespace_name: str, policy_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/assets" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default/policies/{policyName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "policyName": _SERIALIZER.url("policy_name", policy_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -819,22 +866,23 @@ def build_namespace_assets_list_by_resource_group_request( # pylint: disable=na return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_devices_get_request( - resource_group_name: str, namespace_name: str, device_name: str, subscription_id: str, **kwargs: Any +def build_policies_create_or_update_request( + resource_group_name: str, namespace_name: str, policy_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", "2025-10-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", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices/{deviceName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default/policies/{policyName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "deviceName": _SERIALIZER.url("device_name", device_name, "str"), + "policyName": _SERIALIZER.url("policy_name", policy_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -843,28 +891,53 @@ def build_namespace_devices_get_request( _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="GET", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_devices_create_or_replace_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, device_name: str, subscription_id: str, **kwargs: Any +def build_policies_delete_request( + resource_group_name: str, namespace_name: str, policy_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default/policies/{policyName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "policyName": _SERIALIZER.url("policy_name", policy_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) + + +def build_policies_update_request( + resource_group_name: str, namespace_name: str, policy_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices/{deviceName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default/policies/{policyName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "deviceName": _SERIALIZER.url("device_name", device_name, "str"), + "policyName": _SERIALIZER.url("policy_name", policy_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -877,26 +950,24 @@ def build_namespace_devices_create_or_replace_request( # pylint: disable=name-t _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) + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_devices_update_request( - resource_group_name: str, namespace_name: str, device_name: str, subscription_id: str, **kwargs: Any +def build_policies_list_by_resource_group_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices/{deviceName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default/policies" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "deviceName": _SERIALIZER.url("device_name", device_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -905,26 +976,24 @@ def build_namespace_devices_update_request( _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) + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_devices_delete_request( - resource_group_name: str, namespace_name: str, device_name: str, subscription_id: str, **kwargs: Any +def build_policies_revoke_issuer_request( + resource_group_name: str, namespace_name: str, policy_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices/{deviceName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default/policies/{policyName}/revokeIssuer" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "deviceName": _SERIALIZER.url("device_name", device_name, "str"), + "policyName": _SERIALIZER.url("policy_name", policy_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -932,24 +1001,24 @@ def build_namespace_devices_delete_request( # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) + return HttpRequest(method="POST", url=_url, params=_params, **kwargs) -def build_namespace_devices_list_by_resource_group_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, subscription_id: str, **kwargs: Any +def build_policies_activate_bring_your_own_root_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, policy_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", "2025-10-01")) - accept = _headers.pop("Accept", "application/json") - + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/credentials/default/policies/{policyName}/activateBringYourOwnRoot" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "policyName": _SERIALIZER.url("policy_name", policy_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -958,27 +1027,28 @@ def build_namespace_devices_list_by_resource_group_request( # pylint: disable=n _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_discovered_assets_get_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, discovered_asset_name: str, subscription_id: str, **kwargs: Any +def build_namespace_assets_get_request( + resource_group_name: str, namespace_name: str, asset_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredAssets/{discoveredAssetName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/assets/{assetName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "discoveredAssetName": _SERIALIZER.url("discovered_asset_name", discovered_asset_name, "str"), + "assetName": _SERIALIZER.url("asset_name", asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -992,23 +1062,23 @@ def build_namespace_discovered_assets_get_request( # pylint: disable=name-too-l return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_discovered_assets_create_or_replace_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, discovered_asset_name: str, subscription_id: str, **kwargs: Any +def build_namespace_assets_create_or_replace_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, asset_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredAssets/{discoveredAssetName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/assets/{assetName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "discoveredAssetName": _SERIALIZER.url("discovered_asset_name", discovered_asset_name, "str"), + "assetName": _SERIALIZER.url("asset_name", asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1024,23 +1094,23 @@ def build_namespace_discovered_assets_create_or_replace_request( # pylint: disa return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_discovered_assets_update_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, discovered_asset_name: str, subscription_id: str, **kwargs: Any +def build_namespace_assets_update_request( + resource_group_name: str, namespace_name: str, asset_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredAssets/{discoveredAssetName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/assets/{assetName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "discoveredAssetName": _SERIALIZER.url("discovered_asset_name", discovered_asset_name, "str"), + "assetName": _SERIALIZER.url("asset_name", asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1056,19 +1126,19 @@ def build_namespace_discovered_assets_update_request( # pylint: disable=name-to return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_discovered_assets_delete_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, discovered_asset_name: str, subscription_id: str, **kwargs: Any +def build_namespace_assets_delete_request( + resource_group_name: str, namespace_name: str, asset_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredAssets/{discoveredAssetName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/assets/{assetName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "discoveredAssetName": _SERIALIZER.url("discovered_asset_name", discovered_asset_name, "str"), + "assetName": _SERIALIZER.url("asset_name", asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1079,17 +1149,17 @@ def build_namespace_discovered_assets_delete_request( # pylint: disable=name-to return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) -def build_namespace_discovered_assets_list_by_resource_group_request( # pylint: disable=name-too-long +def build_namespace_assets_list_by_resource_group_request( # pylint: disable=name-too-long resource_group_name: str, namespace_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredAssets" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/assets" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1107,22 +1177,22 @@ def build_namespace_discovered_assets_list_by_resource_group_request( # pylint: return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_discovered_devices_get_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, discovered_device_name: str, subscription_id: str, **kwargs: Any +def build_namespace_devices_get_request( + resource_group_name: str, namespace_name: str, device_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredDevices/{discoveredDeviceName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices/{deviceName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "discoveredDeviceName": _SERIALIZER.url("discovered_device_name", discovered_device_name, "str"), + "deviceName": _SERIALIZER.url("device_name", device_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1136,23 +1206,23 @@ def build_namespace_discovered_devices_get_request( # pylint: disable=name-too- return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_discovered_devices_create_or_replace_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, discovered_device_name: str, subscription_id: str, **kwargs: Any +def build_namespace_devices_create_or_replace_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, device_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredDevices/{discoveredDeviceName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices/{deviceName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "discoveredDeviceName": _SERIALIZER.url("discovered_device_name", discovered_device_name, "str"), + "deviceName": _SERIALIZER.url("device_name", device_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1168,23 +1238,23 @@ def build_namespace_discovered_devices_create_or_replace_request( # pylint: dis return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_discovered_devices_update_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, discovered_device_name: str, subscription_id: str, **kwargs: Any +def build_namespace_devices_update_request( + resource_group_name: str, namespace_name: str, device_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredDevices/{discoveredDeviceName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices/{deviceName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "discoveredDeviceName": _SERIALIZER.url("discovered_device_name", discovered_device_name, "str"), + "deviceName": _SERIALIZER.url("device_name", device_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1200,19 +1270,19 @@ def build_namespace_discovered_devices_update_request( # pylint: disable=name-t return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) -def build_namespace_discovered_devices_delete_request( # pylint: disable=name-too-long - resource_group_name: str, namespace_name: str, discovered_device_name: str, subscription_id: str, **kwargs: Any +def build_namespace_devices_delete_request( + resource_group_name: str, namespace_name: str, device_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredDevices/{discoveredDeviceName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices/{deviceName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), - "discoveredDeviceName": _SERIALIZER.url("discovered_device_name", discovered_device_name, "str"), + "deviceName": _SERIALIZER.url("device_name", device_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1223,17 +1293,17 @@ def build_namespace_discovered_devices_delete_request( # pylint: disable=name-t return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) -def build_namespace_discovered_devices_list_by_resource_group_request( # pylint: disable=name-too-long +def build_namespace_devices_list_by_resource_group_request( # pylint: disable=name-too-long resource_group_name: str, namespace_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredDevices" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), @@ -1251,21 +1321,23 @@ def build_namespace_discovered_devices_list_by_resource_group_request( # pylint return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_schema_registries_get_request( - resource_group_name: str, schema_registry_name: str, subscription_id: str, **kwargs: Any +def build_namespace_devices_revoke_request( + resource_group_name: str, namespace_name: str, device_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", "2025-10-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", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/devices/{deviceName}/revoke" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "deviceName": _SERIALIZER.url("device_name", device_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1274,27 +1346,29 @@ def build_schema_registries_get_request( _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="GET", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) -def build_schema_registries_create_or_replace_request( # pylint: disable=name-too-long - resource_group_name: str, schema_registry_name: str, subscription_id: str, **kwargs: Any +def build_namespace_discovered_assets_get_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, discovered_asset_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredAssets/{discoveredAssetName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "discoveredAssetName": _SERIALIZER.url("discovered_asset_name", discovered_asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1303,29 +1377,28 @@ def build_schema_registries_create_or_replace_request( # pylint: disable=name-t _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) + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_schema_registries_update_request( - resource_group_name: str, schema_registry_name: str, subscription_id: str, **kwargs: Any +def build_namespace_discovered_assets_create_or_replace_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, discovered_asset_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredAssets/{discoveredAssetName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "discoveredAssetName": _SERIALIZER.url("discovered_asset_name", discovered_asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1338,21 +1411,26 @@ def build_schema_registries_update_request( _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) + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) -def build_schema_registries_delete_request( - resource_group_name: str, schema_registry_name: str, subscription_id: str, **kwargs: Any +def build_namespace_discovered_assets_update_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, discovered_asset_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", "2025-10-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", "2026-03-01-preview")) + accept = _headers.pop("Accept", "application/json") + # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredAssets/{discoveredAssetName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "discoveredAssetName": _SERIALIZER.url("discovered_asset_name", discovered_asset_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1360,23 +1438,52 @@ def build_schema_registries_delete_request( # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) + # 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_schema_registries_list_by_resource_group_request( # pylint: disable=name-too-long - resource_group_name: str, subscription_id: str, **kwargs: Any -) -> HttpRequest: + +def build_namespace_discovered_assets_delete_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, discovered_asset_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredAssets/{discoveredAssetName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "discoveredAssetName": _SERIALIZER.url("discovered_asset_name", discovered_asset_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) + + +def build_namespace_discovered_assets_list_by_resource_group_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredAssets" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1390,19 +1497,22 @@ def build_schema_registries_list_by_resource_group_request( # pylint: disable=n return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_schema_registries_list_by_subscription_request( # pylint: disable=name-too-long - subscription_id: str, **kwargs: Any +def build_namespace_discovered_devices_get_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, discovered_device_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/providers/Microsoft.DeviceRegistry/schemaRegistries" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredDevices/{discoveredDeviceName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "discoveredDeviceName": _SERIALIZER.url("discovered_device_name", discovered_device_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1416,22 +1526,23 @@ def build_schema_registries_list_by_subscription_request( # pylint: disable=nam return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_schemas_get_request( - resource_group_name: str, schema_registry_name: str, schema_name: str, subscription_id: str, **kwargs: Any +def build_namespace_discovered_devices_create_or_replace_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, discovered_device_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", "2025-10-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", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredDevices/{discoveredDeviceName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), - "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "discoveredDeviceName": _SERIALIZER.url("discovered_device_name", discovered_device_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1440,28 +1551,30 @@ def build_schemas_get_request( _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="GET", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) -def build_schemas_create_or_replace_request( - resource_group_name: str, schema_registry_name: str, schema_name: str, subscription_id: str, **kwargs: Any +def build_namespace_discovered_devices_update_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, discovered_device_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredDevices/{discoveredDeviceName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), - "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "discoveredDeviceName": _SERIALIZER.url("discovered_device_name", discovered_device_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1474,22 +1587,22 @@ def build_schemas_create_or_replace_request( _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) + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) -def build_schemas_delete_request( - resource_group_name: str, schema_registry_name: str, schema_name: str, subscription_id: str, **kwargs: Any +def build_namespace_discovered_devices_delete_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_name: str, discovered_device_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredDevices/{discoveredDeviceName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), - "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), + "discoveredDeviceName": _SERIALIZER.url("discovered_device_name", discovered_device_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1500,21 +1613,21 @@ def build_schemas_delete_request( return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) -def build_schemas_list_by_schema_registry_request( # pylint: disable=name-too-long - resource_group_name: str, schema_registry_name: str, subscription_id: str, **kwargs: Any +def build_namespace_discovered_devices_list_by_resource_group_request( # pylint: disable=name-too-long + resource_group_name: str, namespace_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/namespaces/{namespaceName}/discoveredDevices" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "namespaceName": _SERIALIZER.url("namespace_name", namespace_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1528,28 +1641,21 @@ def build_schemas_list_by_schema_registry_request( # pylint: disable=name-too-l return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_schema_versions_get_request( - resource_group_name: str, - schema_registry_name: str, - schema_name: str, - schema_version_name: str, - subscription_id: str, - **kwargs: Any +def build_schema_registries_get_request( + resource_group_name: str, schema_registry_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}/schemaVersions/{schemaVersionName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), - "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), - "schemaVersionName": _SERIALIZER.url("schema_version_name", schema_version_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1563,29 +1669,22 @@ def build_schema_versions_get_request( return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_schema_versions_create_or_replace_request( # pylint: disable=name-too-long - resource_group_name: str, - schema_registry_name: str, - schema_name: str, - schema_version_name: str, - subscription_id: str, - **kwargs: Any +def build_schema_registries_create_or_replace_request( # pylint: disable=name-too-long + resource_group_name: str, schema_registry_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}/schemaVersions/{schemaVersionName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), - "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), - "schemaVersionName": _SERIALIZER.url("schema_version_name", schema_version_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1601,25 +1700,49 @@ def build_schema_versions_create_or_replace_request( # pylint: disable=name-too return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) -def build_schema_versions_delete_request( - resource_group_name: str, - schema_registry_name: str, - schema_name: str, - schema_version_name: str, - subscription_id: str, - **kwargs: Any +def build_schema_registries_update_request( + resource_group_name: str, schema_registry_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", "2025-10-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", "2026-03-01-preview")) + accept = _headers.pop("Accept", "application/json") + # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}/schemaVersions/{schemaVersionName}" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + 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_schema_registries_delete_request( + resource_group_name: str, schema_registry_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), - "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), - "schemaVersionName": _SERIALIZER.url("schema_version_name", schema_version_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1630,22 +1753,20 @@ def build_schema_versions_delete_request( return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) -def build_schema_versions_list_by_schema_request( # pylint: disable=name-too-long - resource_group_name: str, schema_registry_name: str, schema_name: str, subscription_id: str, **kwargs: Any +def build_schema_registries_list_by_resource_group_request( # pylint: disable=name-too-long + resource_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", "2025-10-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}/schemaVersions" + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries" path_format_arguments = { "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), - "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), - "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), } _url: str = _url.format(**path_format_arguments) # type: ignore @@ -1659,280 +1780,2767 @@ def build_schema_versions_list_by_schema_request( # pylint: disable=name-too-lo return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -class Operations: - """ - .. warning:: - **DO NOT** instantiate this class directly. +def build_schema_registries_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 {}) - Instead, you should access the following operations through - :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s - :attr:`operations` attribute. - """ + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + accept = _headers.pop("Accept", "application/json") - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + # Construct URL + _url = "/subscriptions/{subscriptionId}/providers/Microsoft.DeviceRegistry/schemaRegistries" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + } - @distributed_trace - def list(self, **kwargs: Any) -> ItemPaged["_models.Operation"]: - """List the operations for the provider. + _url: str = _url.format(**path_format_arguments) # type: ignore - :return: An iterator like instance of Operation - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Operation] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - cls: ClsType[List[_models.Operation]] = kwargs.pop("cls", None) + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - def prepare_request(next_link=None): - if not next_link: - _request = build_operations_list_request( - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) +def build_schemas_get_request( + resource_group_name: str, schema_registry_name: str, schema_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + accept = _headers.pop("Accept", "application/json") - return _request + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), + } - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Operation], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) + _url: str = _url.format(**path_format_arguments) # type: ignore - def get_next(next_link=None): - _request = prepare_request(next_link) + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - return pipeline_response - return ItemPaged(get_next, extract_data) +def build_schemas_create_or_replace_request( + resource_group_name: str, schema_registry_name: str, schema_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + accept = _headers.pop("Accept", "application/json") -class OperationStatusOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), + } - Instead, you should access the following operations through - :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s - :attr:`operation_status` attribute. - """ + _url: str = _url.format(**path_format_arguments) # type: ignore - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - @distributed_trace - def get(self, location: str, operation_id: str, **kwargs: Any) -> _models.OperationStatusResult: - """Returns the current status of an async operation. + # 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") - :param location: The location name. Required. - :type location: str - :param operation_id: The ID of an ongoing async operation. Required. - :type operation_id: str - :return: OperationStatusResult. The OperationStatusResult is compatible with MutableMapping - :rtype: ~azure.mgmt.deviceregistry.models.OperationStatusResult - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.OperationStatusResult] = kwargs.pop("cls", None) +def build_schemas_delete_request( + resource_group_name: str, schema_registry_name: str, schema_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - _request = build_operation_status_get_request( - location=location, - operation_id=operation_id, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), + } - _stream = kwargs.pop("stream", False) - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) + _url: str = _url.format(**path_format_arguments) # type: ignore - response = pipeline_response.http_response + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - if response.status_code not in [200]: - if _stream: - 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.OperationStatusResult, response.json()) - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore +def build_schemas_list_by_schema_registry_request( # pylint: disable=name-too-long + resource_group_name: str, schema_registry_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - return deserialized # type: ignore + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + accept = _headers.pop("Accept", "application/json") + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + } -class AssetsOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. + _url: str = _url.format(**path_format_arguments) # type: ignore - Instead, you should access the following operations through - :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s - :attr:`assets` attribute. - """ + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - @distributed_trace - def get(self, resource_group_name: str, asset_name: str, **kwargs: Any) -> _models.Asset: - """Get a Asset. + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param asset_name: Asset name parameter. Required. - :type asset_name: str - :return: Asset. The Asset is compatible with MutableMapping - :rtype: ~azure.mgmt.deviceregistry.models.Asset - :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 = kwargs.pop("params", {}) or {} +def build_schema_versions_get_request( + resource_group_name: str, + schema_registry_name: str, + schema_name: str, + schema_version_name: str, + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - cls: ClsType[_models.Asset] = kwargs.pop("cls", None) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + accept = _headers.pop("Accept", "application/json") - _request = build_assets_get_request( - resource_group_name=resource_group_name, - asset_name=asset_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}/schemaVersions/{schemaVersionName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), + "schemaVersionName": _SERIALIZER.url("schema_version_name", schema_version_name, "str"), + } - _stream = kwargs.pop("stream", False) - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) + _url: str = _url.format(**path_format_arguments) # type: ignore - response = pipeline_response.http_response + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - if response.status_code not in [200]: - if _stream: - 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.Asset, response.json()) + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized # type: ignore +def build_schema_versions_create_or_replace_request( # pylint: disable=name-too-long + resource_group_name: str, + schema_registry_name: str, + schema_name: str, + schema_version_name: str, + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - def _create_or_replace_initial( - self, resource_group_name: str, asset_name: str, resource: Union[_models.Asset, JSON, IO[bytes]], **kwargs: Any - ) -> Iterator[bytes]: - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}/schemaVersions/{schemaVersionName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), + "schemaVersionName": _SERIALIZER.url("schema_version_name", schema_version_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + 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_schema_versions_delete_request( + resource_group_name: str, + schema_registry_name: str, + schema_name: str, + schema_version_name: str, + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01-preview")) + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}/schemaVersions/{schemaVersionName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), + "schemaVersionName": _SERIALIZER.url("schema_version_name", schema_version_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) + + +def build_schema_versions_list_by_schema_request( # pylint: disable=name-too-long + resource_group_name: str, schema_registry_name: str, schema_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", "2026-03-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DeviceRegistry/schemaRegistries/{schemaRegistryName}/schemas/{schemaName}/schemaVersions" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "schemaRegistryName": _SERIALIZER.url("schema_registry_name", schema_registry_name, "str"), + "schemaName": _SERIALIZER.url("schema_name", schema_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +class Operations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s + :attr:`operations` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list(self, **kwargs: Any) -> ItemPaged["_models.Operation"]: + """List the operations for the provider. + + :return: An iterator like instance of Operation + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Operation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Operation]] = 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_operations_list_request( + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Operation], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + +class OperationStatusOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s + :attr:`operation_status` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def get(self, location: str, operation_id: str, **kwargs: Any) -> _models.OperationStatusResult: + """Returns the current status of an async operation. + + :param location: The location name. Required. + :type location: str + :param operation_id: The ID of an ongoing async operation. Required. + :type operation_id: str + :return: OperationStatusResult. The OperationStatusResult is compatible with MutableMapping + :rtype: ~azure.mgmt.deviceregistry.models.OperationStatusResult + :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 = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.OperationStatusResult] = kwargs.pop("cls", None) + + _request = build_operation_status_get_request( + location=location, + operation_id=operation_id, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("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]: + if _stream: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.OperationStatusResult, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + +class AssetsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s + :attr:`assets` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def get(self, resource_group_name: str, asset_name: str, **kwargs: Any) -> _models.Asset: + """Get a Asset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_name: Asset name parameter. Required. + :type asset_name: str + :return: Asset. The Asset is compatible with MutableMapping + :rtype: ~azure.mgmt.deviceregistry.models.Asset + :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 = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.Asset] = kwargs.pop("cls", None) + + _request = build_assets_get_request( + resource_group_name=resource_group_name, + asset_name=asset_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("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]: + if _stream: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.Asset, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + def _create_or_replace_initial( + self, resource_group_name: str, asset_name: str, resource: Union[_models.Asset, JSON, 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 = kwargs.pop("params", {}) or {} + + 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" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_assets_create_or_replace_request( + resource_group_name=resource_group_name, + asset_name=asset_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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, 201]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + def begin_create_or_replace( + self, + resource_group_name: str, + asset_name: str, + resource: _models.Asset, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Asset]: + """Create a Asset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_name: Asset name parameter. Required. + :type asset_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.deviceregistry.models.Asset + :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 Asset. The Asset is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create_or_replace( + self, + resource_group_name: str, + asset_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Asset]: + """Create a Asset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_name: Asset name parameter. Required. + :type asset_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :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 Asset. The Asset is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create_or_replace( + self, + resource_group_name: str, + asset_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Asset]: + """Create a Asset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_name: Asset name parameter. Required. + :type asset_name: str + :param resource: Resource create parameters. Required. + :type resource: 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 Asset. The Asset is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def begin_create_or_replace( + self, resource_group_name: str, asset_name: str, resource: Union[_models.Asset, JSON, IO[bytes]], **kwargs: Any + ) -> LROPoller[_models.Asset]: + """Create a Asset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_name: Asset name parameter. Required. + :type asset_name: str + :param resource: Resource create parameters. Is one of the following types: Asset, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.deviceregistry.models.Asset or JSON or IO[bytes] + :return: An instance of LROPoller that returns Asset. The Asset is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Asset] = 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._create_or_replace_initial( + resource_group_name=resource_group_name, + asset_name=asset_name, + resource=resource, + 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Asset, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.Asset].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.Asset]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + def _update_initial( + self, + resource_group_name: str, + asset_name: str, + properties: Union[_models.AssetUpdate, JSON, 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 = kwargs.pop("params", {}) or {} + + 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" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_assets_update_request( + resource_group_name=resource_group_name, + asset_name=asset_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + def begin_update( + self, + resource_group_name: str, + asset_name: str, + properties: _models.AssetUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Asset]: + """Update a Asset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_name: Asset name parameter. Required. + :type asset_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.deviceregistry.models.AssetUpdate + :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 Asset. The Asset is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + asset_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Asset]: + """Update a Asset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_name: Asset name parameter. Required. + :type asset_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :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 Asset. The Asset is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + asset_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Asset]: + """Update a Asset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_name: Asset name parameter. Required. + :type asset_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Asset. The Asset is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def begin_update( + self, + resource_group_name: str, + asset_name: str, + properties: Union[_models.AssetUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.Asset]: + """Update a Asset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_name: Asset name parameter. Required. + :type asset_name: str + :param properties: The resource properties to be updated. Is one of the following types: + AssetUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.deviceregistry.models.AssetUpdate or JSON or IO[bytes] + :return: An instance of LROPoller that returns Asset. The Asset is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Asset] = 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._update_initial( + resource_group_name=resource_group_name, + asset_name=asset_name, + properties=properties, + 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Asset, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.Asset].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.Asset]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + def _delete_initial(self, resource_group_name: str, asset_name: str, **kwargs: Any) -> Iterator[bytes]: + 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 = kwargs.pop("params", {}) or {} + + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + _request = build_assets_delete_request( + resource_group_name=resource_group_name, + asset_name=asset_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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 [202, 204]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def begin_delete(self, resource_group_name: str, asset_name: str, **kwargs: Any) -> LROPoller[None]: + """Delete a Asset. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_name: Asset name parameter. Required. + :type asset_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + 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._delete_initial( + resource_group_name=resource_group_name, + asset_name=asset_name, + 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): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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, + ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + @distributed_trace + def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> ItemPaged["_models.Asset"]: + """List Asset resources by resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :return: An iterator like instance of Asset + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Asset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Asset]] = 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_assets_list_by_resource_group_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Asset], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.Asset"]: + """List Asset resources by subscription ID. + + :return: An iterator like instance of Asset + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Asset] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Asset]] = 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_assets_list_by_subscription_request( + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Asset], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + +class AssetEndpointProfilesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s + :attr:`asset_endpoint_profiles` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def get( + self, resource_group_name: str, asset_endpoint_profile_name: str, **kwargs: Any + ) -> _models.AssetEndpointProfile: + """Get a AssetEndpointProfile. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. + :type asset_endpoint_profile_name: str + :return: AssetEndpointProfile. The AssetEndpointProfile is compatible with MutableMapping + :rtype: ~azure.mgmt.deviceregistry.models.AssetEndpointProfile + :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 = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.AssetEndpointProfile] = kwargs.pop("cls", None) + + _request = build_asset_endpoint_profiles_get_request( + resource_group_name=resource_group_name, + asset_endpoint_profile_name=asset_endpoint_profile_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("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]: + if _stream: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.AssetEndpointProfile, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + def _create_or_replace_initial( + self, + resource_group_name: str, + asset_endpoint_profile_name: str, + resource: Union[_models.AssetEndpointProfile, JSON, 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 = kwargs.pop("params", {}) or {} + + 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" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_asset_endpoint_profiles_create_or_replace_request( + resource_group_name=resource_group_name, + asset_endpoint_profile_name=asset_endpoint_profile_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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, 201]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + def begin_create_or_replace( + self, + resource_group_name: str, + asset_endpoint_profile_name: str, + resource: _models.AssetEndpointProfile, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.AssetEndpointProfile]: + """Create a AssetEndpointProfile. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. + :type asset_endpoint_profile_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.deviceregistry.models.AssetEndpointProfile + :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 AssetEndpointProfile. The AssetEndpointProfile + is compatible with MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create_or_replace( + self, + resource_group_name: str, + asset_endpoint_profile_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.AssetEndpointProfile]: + """Create a AssetEndpointProfile. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. + :type asset_endpoint_profile_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :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 AssetEndpointProfile. The AssetEndpointProfile + is compatible with MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create_or_replace( + self, + resource_group_name: str, + asset_endpoint_profile_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.AssetEndpointProfile]: + """Create a AssetEndpointProfile. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. + :type asset_endpoint_profile_name: str + :param resource: Resource create parameters. Required. + :type resource: 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 AssetEndpointProfile. The AssetEndpointProfile + is compatible with MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def begin_create_or_replace( + self, + resource_group_name: str, + asset_endpoint_profile_name: str, + resource: Union[_models.AssetEndpointProfile, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.AssetEndpointProfile]: + """Create a AssetEndpointProfile. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. + :type asset_endpoint_profile_name: str + :param resource: Resource create parameters. Is one of the following types: + AssetEndpointProfile, JSON, IO[bytes] Required. + :type resource: ~azure.mgmt.deviceregistry.models.AssetEndpointProfile or JSON or IO[bytes] + :return: An instance of LROPoller that returns AssetEndpointProfile. The AssetEndpointProfile + is compatible with MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.AssetEndpointProfile] = 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._create_or_replace_initial( + resource_group_name=resource_group_name, + asset_endpoint_profile_name=asset_endpoint_profile_name, + resource=resource, + 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.AssetEndpointProfile, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.AssetEndpointProfile].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.AssetEndpointProfile]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + def _update_initial( + self, + resource_group_name: str, + asset_endpoint_profile_name: str, + properties: Union[_models.AssetEndpointProfileUpdate, JSON, 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 = kwargs.pop("params", {}) or {} + + 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" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_asset_endpoint_profiles_update_request( + resource_group_name=resource_group_name, + asset_endpoint_profile_name=asset_endpoint_profile_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + def begin_update( + self, + resource_group_name: str, + asset_endpoint_profile_name: str, + properties: _models.AssetEndpointProfileUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.AssetEndpointProfile]: + """Update a AssetEndpointProfile. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. + :type asset_endpoint_profile_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.deviceregistry.models.AssetEndpointProfileUpdate + :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 AssetEndpointProfile. The AssetEndpointProfile + is compatible with MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + asset_endpoint_profile_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.AssetEndpointProfile]: + """Update a AssetEndpointProfile. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. + :type asset_endpoint_profile_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :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 AssetEndpointProfile. The AssetEndpointProfile + is compatible with MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + asset_endpoint_profile_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.AssetEndpointProfile]: + """Update a AssetEndpointProfile. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. + :type asset_endpoint_profile_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns AssetEndpointProfile. The AssetEndpointProfile + is compatible with MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def begin_update( + self, + resource_group_name: str, + asset_endpoint_profile_name: str, + properties: Union[_models.AssetEndpointProfileUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.AssetEndpointProfile]: + """Update a AssetEndpointProfile. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. + :type asset_endpoint_profile_name: str + :param properties: The resource properties to be updated. Is one of the following types: + AssetEndpointProfileUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.deviceregistry.models.AssetEndpointProfileUpdate or JSON or + IO[bytes] + :return: An instance of LROPoller that returns AssetEndpointProfile. The AssetEndpointProfile + is compatible with MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.AssetEndpointProfile] = 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._update_initial( + resource_group_name=resource_group_name, + asset_endpoint_profile_name=asset_endpoint_profile_name, + properties=properties, + 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.AssetEndpointProfile, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.AssetEndpointProfile].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.AssetEndpointProfile]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + def _delete_initial( + self, resource_group_name: str, asset_endpoint_profile_name: str, **kwargs: Any + ) -> Iterator[bytes]: + 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 = kwargs.pop("params", {}) or {} + + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + _request = build_asset_endpoint_profiles_delete_request( + resource_group_name=resource_group_name, + asset_endpoint_profile_name=asset_endpoint_profile_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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 [202, 204]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def begin_delete( + self, resource_group_name: str, asset_endpoint_profile_name: str, **kwargs: Any + ) -> LROPoller[None]: + """Delete a AssetEndpointProfile. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. + :type asset_endpoint_profile_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + 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._delete_initial( + resource_group_name=resource_group_name, + asset_endpoint_profile_name=asset_endpoint_profile_name, + 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): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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, + ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + @distributed_trace + def list_by_resource_group( + self, resource_group_name: str, **kwargs: Any + ) -> ItemPaged["_models.AssetEndpointProfile"]: + """List AssetEndpointProfile resources by resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :return: An iterator like instance of AssetEndpointProfile + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.AssetEndpointProfile]] = 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_asset_endpoint_profiles_list_by_resource_group_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.AssetEndpointProfile], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.AssetEndpointProfile"]: + """List AssetEndpointProfile resources by subscription ID. + + :return: An iterator like instance of AssetEndpointProfile + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.AssetEndpointProfile]] = 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_asset_endpoint_profiles_list_by_subscription_request( + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.AssetEndpointProfile], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + +class BillingContainersOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s + :attr:`billing_containers` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + @api_version_validation( + method_added_on="2024-09-01-preview", + params_added_on={"2024-09-01-preview": ["api_version", "subscription_id", "billing_container_name", "accept"]}, + api_versions_list=[ + "2024-09-01-preview", + "2024-11-01", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], + ) + def get(self, billing_container_name: str, **kwargs: Any) -> _models.BillingContainer: + """Get a BillingContainer. + + :param billing_container_name: Name of the billing container. Required. + :type billing_container_name: str + :return: BillingContainer. The BillingContainer is compatible with MutableMapping + :rtype: ~azure.mgmt.deviceregistry.models.BillingContainer + :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 = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.BillingContainer] = kwargs.pop("cls", None) + + _request = build_billing_containers_get_request( + billing_container_name=billing_container_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("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]: + if _stream: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.BillingContainer, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-09-01-preview", + params_added_on={"2024-09-01-preview": ["api_version", "subscription_id", "accept"]}, + api_versions_list=[ + "2024-09-01-preview", + "2024-11-01", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], + ) + def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.BillingContainer"]: + """List BillingContainer resources by subscription ID. + + :return: An iterator like instance of BillingContainer + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.BillingContainer] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.BillingContainer]] = 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_billing_containers_list_by_subscription_request( + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.BillingContainer], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + +class NamespacesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s + :attr:`namespaces` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> _models.Namespace: + """Get a Namespace. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: Namespace. The Namespace is compatible with MutableMapping + :rtype: ~azure.mgmt.deviceregistry.models.Namespace + :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 = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.Namespace] = kwargs.pop("cls", None) + + _request = build_namespaces_get_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("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]: + if _stream: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.Namespace, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def _create_or_replace_initial( + self, + resource_group_name: str, + namespace_name: str, + resource: Union[_models.Namespace, JSON, 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 = kwargs.pop("params", {}) or {} + + 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" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_namespaces_create_or_replace_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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, 201]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + def begin_create_or_replace( + self, + resource_group_name: str, + namespace_name: str, + resource: _models.Namespace, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Namespace]: + """Create a Namespace. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.deviceregistry.models.Namespace + :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 Namespace. The Namespace is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create_or_replace( + self, + resource_group_name: str, + namespace_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Namespace]: + """Create a Namespace. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :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 Namespace. The Namespace is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create_or_replace( + self, + resource_group_name: str, + namespace_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Namespace]: + """Create a Namespace. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param resource: Resource create parameters. Required. + :type resource: 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 Namespace. The Namespace is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def begin_create_or_replace( + self, + resource_group_name: str, + namespace_name: str, + resource: Union[_models.Namespace, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.Namespace]: + """Create a Namespace. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param resource: Resource create parameters. Is one of the following types: Namespace, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.deviceregistry.models.Namespace or JSON or IO[bytes] + :return: An instance of LROPoller that returns Namespace. The Namespace is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Namespace] = 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._create_or_replace_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + resource=resource, + 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Namespace, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.Namespace].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.Namespace]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def _update_initial( + self, + resource_group_name: str, + namespace_name: str, + properties: Union[_models.NamespaceUpdate, JSON, 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 {}) @@ -1945,14 +4553,14 @@ def _create_or_replace_initial( content_type = content_type or "application/json" _content = None - if isinstance(resource, (IOBase, bytes)): - _content = resource + if isinstance(properties, (IOBase, bytes)): + _content = properties else: - _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_assets_create_or_replace_request( + _request = build_namespaces_update_request( resource_group_name=resource_group_name, - asset_name=asset_name, + namespace_name=namespace_name, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -1965,6 +4573,7 @@ def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1972,23 +4581,24 @@ def _create_or_replace_initial( response = pipeline_response.http_response - if response.status_code not in [200, 201]: + 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} - if response.status_code == 201: - response_headers["Azure-AsyncOperation"] = self._deserialize( - "str", response.headers.get("Azure-AsyncOperation") - ) + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -1996,122 +4606,275 @@ def _create_or_replace_initial( return deserialized # type: ignore @overload - def begin_create_or_replace( + def begin_update( self, resource_group_name: str, - asset_name: str, - resource: _models.Asset, + namespace_name: str, + properties: _models.NamespaceUpdate, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Asset]: - """Create a Asset. + ) -> LROPoller[_models.Namespace]: + """Update a Namespace. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_name: Asset name parameter. Required. - :type asset_name: str - :param resource: Resource create parameters. Required. - :type resource: ~azure.mgmt.deviceregistry.models.Asset + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.deviceregistry.models.NamespaceUpdate :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 Asset. The Asset is compatible with + :return: An instance of LROPoller that returns Namespace. The Namespace is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_create_or_replace( + def begin_update( self, resource_group_name: str, - asset_name: str, - resource: JSON, + namespace_name: str, + properties: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Asset]: - """Create a Asset. + ) -> LROPoller[_models.Namespace]: + """Update a Namespace. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_name: Asset name parameter. Required. - :type asset_name: str - :param resource: Resource create parameters. Required. - :type resource: JSON + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON :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 Asset. The Asset is compatible with + :return: An instance of LROPoller that returns Namespace. The Namespace is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_create_or_replace( + def begin_update( self, resource_group_name: str, - asset_name: str, - resource: IO[bytes], + namespace_name: str, + properties: IO[bytes], *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Asset]: - """Create a Asset. + ) -> LROPoller[_models.Namespace]: + """Update a Namespace. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Namespace. The Namespace is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def begin_update( + self, + resource_group_name: str, + namespace_name: str, + properties: Union[_models.NamespaceUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.Namespace]: + """Update a Namespace. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Is one of the following types: + NamespaceUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.deviceregistry.models.NamespaceUpdate or JSON or IO[bytes] + :return: An instance of LROPoller that returns Namespace. The Namespace is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Namespace] = 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._update_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + properties=properties, + 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Namespace, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.Namespace].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.Namespace]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def _delete_initial(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> Iterator[bytes]: + 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 = kwargs.pop("params", {}) or {} + + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + _request = build_namespaces_delete_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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 [202, 204]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param asset_name: Asset name parameter. Required. - :type asset_name: str - :param resource: Resource create parameters. Required. - :type resource: 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 Asset. The Asset is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] - :raises ~azure.core.exceptions.HttpResponseError: - """ + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore @distributed_trace - def begin_create_or_replace( - self, resource_group_name: str, asset_name: str, resource: Union[_models.Asset, JSON, IO[bytes]], **kwargs: Any - ) -> LROPoller[_models.Asset]: - """Create a Asset. + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def begin_delete(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> LROPoller[None]: + """Delete a Namespace. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_name: Asset name parameter. Required. - :type asset_name: str - :param resource: Resource create parameters. Is one of the following types: Asset, JSON, - IO[bytes] Required. - :type resource: ~azure.mgmt.deviceregistry.models.Asset or JSON or IO[bytes] - :return: An instance of LROPoller that returns Asset. The Asset is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.Asset] = kwargs.pop("cls", 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._create_or_replace_initial( + raw_result = self._delete_initial( resource_group_name=resource_group_name, - asset_name=asset_name, - resource=resource, - content_type=content_type, + namespace_name=namespace_name, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -2120,41 +4883,244 @@ def begin_create_or_replace( raw_result.http_response.read() # type: ignore kwargs.pop("error_map", None) - def get_long_running_output(pipeline_response): + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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, + ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={"2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "accept"]}, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> ItemPaged["_models.Namespace"]: + """List Namespace resources by resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :return: An iterator like instance of Namespace + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Namespace] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Namespace]] = 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_namespaces_list_by_resource_group_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Namespace], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") 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 - deserialized = _deserialize(_models.Asset, response.json()) + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={"2025-07-01-preview": ["api_version", "subscription_id", "accept"]}, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.Namespace"]: + """List Namespace resources by subscription ID. + + :return: An iterator like instance of Namespace + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Namespace] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Namespace]] = 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_namespaces_list_by_subscription_request( + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Namespace], + deserialized.get("value", []), + ) if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } + return pipeline_response - if polling is True: - polling_method: PollingMethod = cast( - PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) - ) - elif polling is False: - polling_method = cast(PollingMethod, NoPolling()) - else: - polling_method = polling - if cont_token: - return LROPoller[_models.Asset].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return LROPoller[_models.Asset]( - self._client, raw_result, get_long_running_output, polling_method # type: ignore - ) + return ItemPaged(get_next, extract_data) - def _update_initial( + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def _migrate_initial( self, resource_group_name: str, - asset_name: str, - properties: Union[_models.AssetUpdate, JSON, IO[bytes]], + namespace_name: str, + body: Union[_models.NamespaceMigrateRequest, JSON, IO[bytes]], **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { @@ -2173,14 +5139,14 @@ def _update_initial( content_type = content_type or "application/json" _content = None - if isinstance(properties, (IOBase, bytes)): - _content = properties + if isinstance(body, (IOBase, bytes)): + _content = body else: - _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_assets_update_request( + _request = build_namespaces_migrate_request( resource_group_name=resource_group_name, - asset_name=asset_name, + namespace_name=namespace_name, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -2193,6 +5159,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2206,15 +5173,21 @@ def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} if response.status_code == 202: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -2222,243 +5195,136 @@ def _update_initial( return deserialized # type: ignore @overload - def begin_update( - self, - resource_group_name: str, - asset_name: str, - properties: _models.AssetUpdate, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.Asset]: - """Update a Asset. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param asset_name: Asset name parameter. Required. - :type asset_name: str - :param properties: The resource properties to be updated. Required. - :type properties: ~azure.mgmt.deviceregistry.models.AssetUpdate - :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 Asset. The Asset is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_update( + def begin_migrate( self, resource_group_name: str, - asset_name: str, - properties: JSON, + namespace_name: str, + body: _models.NamespaceMigrateRequest, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Asset]: - """Update a Asset. + ) -> LROPoller[None]: + """Migrate the resources into Namespace. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_name: Asset name parameter. Required. - :type asset_name: str - :param properties: The resource properties to be updated. Required. - :type properties: JSON + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param body: The content of the action request. Required. + :type body: ~azure.mgmt.deviceregistry.models.NamespaceMigrateRequest :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 Asset. The Asset is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_update( + def begin_migrate( self, resource_group_name: str, - asset_name: str, - properties: IO[bytes], + namespace_name: str, + body: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Asset]: - """Update a Asset. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param asset_name: Asset name parameter. Required. - :type asset_name: str - :param properties: The resource properties to be updated. Required. - :type properties: IO[bytes] - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns Asset. The Asset is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @distributed_trace - def begin_update( - self, - resource_group_name: str, - asset_name: str, - properties: Union[_models.AssetUpdate, JSON, IO[bytes]], - **kwargs: Any - ) -> LROPoller[_models.Asset]: - """Update a Asset. + ) -> LROPoller[None]: + """Migrate the resources into Namespace. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. - :type resource_group_name: str - :param asset_name: Asset name parameter. Required. - :type asset_name: str - :param properties: The resource properties to be updated. Is one of the following types: - AssetUpdate, JSON, IO[bytes] Required. - :type properties: ~azure.mgmt.deviceregistry.models.AssetUpdate or JSON or IO[bytes] - :return: An instance of LROPoller that returns Asset. The Asset is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Asset] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.Asset] = 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._update_initial( - resource_group_name=resource_group_name, - asset_name=asset_name, - properties=properties, - 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): - response = pipeline_response.http_response - deserialized = _deserialize(_models.Asset, response.json()) - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - - if polling is True: - polling_method: PollingMethod = cast( - PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) - ) - elif polling is False: - polling_method = cast(PollingMethod, NoPolling()) - else: - polling_method = polling - if cont_token: - return LROPoller[_models.Asset].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return LROPoller[_models.Asset]( - self._client, raw_result, get_long_running_output, polling_method # type: ignore - ) - - def _delete_initial(self, resource_group_name: str, asset_name: str, **kwargs: Any) -> Iterator[bytes]: - 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 = kwargs.pop("params", {}) or {} - - cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - - _request = build_assets_delete_request( - resource_group_name=resource_group_name, - asset_name=asset_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - _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 [202, 204]: - 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - response_headers = {} - if response.status_code == 202: - response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) - response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - - deserialized = response.iter_bytes() + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param body: The content of the action request. Required. + :type body: JSON + :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 None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore + @overload + def begin_migrate( + self, + resource_group_name: str, + namespace_name: str, + body: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[None]: + """Migrate the resources into Namespace. - return deserialized # type: ignore + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param body: The content of the action request. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ @distributed_trace - def begin_delete(self, resource_group_name: str, asset_name: str, **kwargs: Any) -> LROPoller[None]: - """Delete a Asset. + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def begin_migrate( + self, + resource_group_name: str, + namespace_name: str, + body: Union[_models.NamespaceMigrateRequest, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[None]: + """Migrate the resources into Namespace. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_name: Asset name parameter. Required. - :type asset_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param body: The content of the action request. Is one of the following types: + NamespaceMigrateRequest, JSON, IO[bytes] Required. + :type body: ~azure.mgmt.deviceregistry.models.NamespaceMigrateRequest or JSON or IO[bytes] :return: An instance of LROPoller that returns None :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} + 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._delete_initial( + raw_result = self._migrate_initial( resource_group_name=resource_group_name, - asset_name=asset_name, + namespace_name=namespace_name, + body=body, + content_type=content_type, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -2492,187 +5358,15 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- ) return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore - @distributed_trace - def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> ItemPaged["_models.Asset"]: - """List Asset resources by resource group. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :return: An iterator like instance of Asset - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Asset] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.Asset]] = 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_assets_list_by_resource_group_request( - resource_group_name=resource_group_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Asset], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - _request = prepare_request(next_link) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - @distributed_trace - def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.Asset"]: - """List Asset resources by subscription ID. - - :return: An iterator like instance of Asset - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Asset] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.Asset]] = 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_assets_list_by_subscription_request( - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Asset], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - _request = prepare_request(next_link) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - return pipeline_response - return ItemPaged(get_next, extract_data) - - -class AssetEndpointProfilesOperations: +class CredentialsOperations: """ .. warning:: **DO NOT** instantiate this class directly. Instead, you should access the following operations through :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s - :attr:`asset_endpoint_profiles` attribute. + :attr:`credentials` attribute. """ def __init__(self, *args, **kwargs) -> None: @@ -2680,21 +5374,26 @@ def __init__(self, *args, **kwargs) -> None: self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace - def get( - self, resource_group_name: str, asset_endpoint_profile_name: str, **kwargs: Any - ) -> _models.AssetEndpointProfile: - """Get a AssetEndpointProfile. + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> _models.Credential: + """Get a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. - :type asset_endpoint_profile_name: str - :return: AssetEndpointProfile. The AssetEndpointProfile is compatible with MutableMapping - :rtype: ~azure.mgmt.deviceregistry.models.AssetEndpointProfile + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: Credential. The Credential is compatible with MutableMapping + :rtype: ~azure.mgmt.deviceregistry.models.Credential :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2708,11 +5407,11 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.AssetEndpointProfile] = kwargs.pop("cls", None) + cls: ClsType[_models.Credential] = kwargs.pop("cls", None) - _request = build_asset_endpoint_profiles_get_request( + _request = build_credentials_get_request( resource_group_name=resource_group_name, - asset_endpoint_profile_name=asset_endpoint_profile_name, + namespace_name=namespace_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -2723,6 +5422,7 @@ def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2737,24 +5437,41 @@ def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: - deserialized = _deserialize(_models.AssetEndpointProfile, response.json()) + deserialized = _deserialize(_models.Credential, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized # type: ignore - def _create_or_replace_initial( + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + def _create_or_update_initial( self, resource_group_name: str, - asset_endpoint_profile_name: str, - resource: Union[_models.AssetEndpointProfile, JSON, IO[bytes]], + namespace_name: str, + resource: Union[_models.Credential, JSON, IO[bytes]], **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { @@ -2778,9 +5495,9 @@ def _create_or_replace_initial( else: _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_asset_endpoint_profiles_create_or_replace_request( + _request = build_credentials_create_or_update_request( resource_group_name=resource_group_name, - asset_endpoint_profile_name=asset_endpoint_profile_name, + namespace_name=namespace_name, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -2793,6 +5510,7 @@ def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2806,7 +5524,10 @@ def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -2816,7 +5537,7 @@ def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -2824,124 +5545,138 @@ def _create_or_replace_initial( return deserialized # type: ignore @overload - def begin_create_or_replace( + def begin_create_or_update( self, resource_group_name: str, - asset_endpoint_profile_name: str, - resource: _models.AssetEndpointProfile, + namespace_name: str, + resource: _models.Credential, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.AssetEndpointProfile]: - """Create a AssetEndpointProfile. + ) -> LROPoller[_models.Credential]: + """Create a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. - :type asset_endpoint_profile_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str :param resource: Resource create parameters. Required. - :type resource: ~azure.mgmt.deviceregistry.models.AssetEndpointProfile + :type resource: ~azure.mgmt.deviceregistry.models.Credential :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 AssetEndpointProfile. The AssetEndpointProfile - is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :return: An instance of LROPoller that returns Credential. The Credential is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_create_or_replace( + def begin_create_or_update( self, resource_group_name: str, - asset_endpoint_profile_name: str, + namespace_name: str, resource: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.AssetEndpointProfile]: - """Create a AssetEndpointProfile. + ) -> LROPoller[_models.Credential]: + """Create a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. - :type asset_endpoint_profile_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str :param resource: Resource create parameters. Required. :type resource: JSON :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 AssetEndpointProfile. The AssetEndpointProfile - is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :return: An instance of LROPoller that returns Credential. The Credential is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_create_or_replace( + def begin_create_or_update( self, resource_group_name: str, - asset_endpoint_profile_name: str, + namespace_name: str, resource: IO[bytes], *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.AssetEndpointProfile]: - """Create a AssetEndpointProfile. + ) -> LROPoller[_models.Credential]: + """Create a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. - :type asset_endpoint_profile_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str :param resource: Resource create parameters. Required. :type resource: 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 AssetEndpointProfile. The AssetEndpointProfile - is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :return: An instance of LROPoller that returns Credential. The Credential is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace - def begin_create_or_replace( + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + def begin_create_or_update( self, resource_group_name: str, - asset_endpoint_profile_name: str, - resource: Union[_models.AssetEndpointProfile, JSON, IO[bytes]], + namespace_name: str, + resource: Union[_models.Credential, JSON, IO[bytes]], **kwargs: Any - ) -> LROPoller[_models.AssetEndpointProfile]: - """Create a AssetEndpointProfile. + ) -> LROPoller[_models.Credential]: + """Create a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. - :type asset_endpoint_profile_name: str - :param resource: Resource create parameters. Is one of the following types: - AssetEndpointProfile, JSON, IO[bytes] Required. - :type resource: ~azure.mgmt.deviceregistry.models.AssetEndpointProfile or JSON or IO[bytes] - :return: An instance of LROPoller that returns AssetEndpointProfile. The AssetEndpointProfile - is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param resource: Resource create parameters. Is one of the following types: Credential, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.deviceregistry.models.Credential or JSON or IO[bytes] + :return: An instance of LROPoller that returns Credential. The Credential is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.AssetEndpointProfile] = kwargs.pop("cls", None) + cls: ClsType[_models.Credential] = 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._create_or_replace_initial( + raw_result = self._create_or_update_initial( resource_group_name=resource_group_name, - asset_endpoint_profile_name=asset_endpoint_profile_name, + namespace_name=namespace_name, resource=resource, content_type=content_type, cls=lambda x, y, z: x, @@ -2954,7 +5689,7 @@ def begin_create_or_replace( def get_long_running_output(pipeline_response): response = pipeline_response.http_response - deserialized = _deserialize(_models.AssetEndpointProfile, response.json()) + deserialized = _deserialize(_models.Credential, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized @@ -2972,23 +5707,24 @@ def get_long_running_output(pipeline_response): else: polling_method = polling if cont_token: - return LROPoller[_models.AssetEndpointProfile].from_continuation_token( + return LROPoller[_models.Credential].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[_models.AssetEndpointProfile]( + return LROPoller[_models.Credential]( self._client, raw_result, get_long_running_output, polling_method # type: ignore ) - def _update_initial( - self, - resource_group_name: str, - asset_endpoint_profile_name: str, - properties: Union[_models.AssetEndpointProfileUpdate, JSON, IO[bytes]], - **kwargs: Any - ) -> Iterator[bytes]: + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + def _delete_initial(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -2997,26 +5733,16 @@ def _update_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - 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" - _content = None - if isinstance(properties, (IOBase, bytes)): - _content = properties - else: - _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - - _request = build_asset_endpoint_profiles_update_request( + _request = build_credentials_delete_request( resource_group_name=resource_group_name, - asset_endpoint_profile_name=asset_endpoint_profile_name, + namespace_name=namespace_name, subscription_id=self._config.subscription_id, - content_type=content_type, api_version=self._config.api_version, - content=_content, headers=_headers, params=_params, ) @@ -3025,6 +5751,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3032,13 +5759,16 @@ def _update_initial( response = pipeline_response.http_response - if response.status_code not in [200, 202]: + if response.status_code not in [202, 204]: 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -3046,135 +5776,44 @@ def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore - @overload - def begin_update( - self, - resource_group_name: str, - asset_endpoint_profile_name: str, - properties: _models.AssetEndpointProfileUpdate, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.AssetEndpointProfile]: - """Update a AssetEndpointProfile. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. - :type asset_endpoint_profile_name: str - :param properties: The resource properties to be updated. Required. - :type properties: ~azure.mgmt.deviceregistry.models.AssetEndpointProfileUpdate - :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 AssetEndpointProfile. The AssetEndpointProfile - is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_update( - self, - resource_group_name: str, - asset_endpoint_profile_name: str, - properties: JSON, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.AssetEndpointProfile]: - """Update a AssetEndpointProfile. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. - :type asset_endpoint_profile_name: str - :param properties: The resource properties to be updated. Required. - :type properties: JSON - :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 AssetEndpointProfile. The AssetEndpointProfile - is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_update( - self, - resource_group_name: str, - asset_endpoint_profile_name: str, - properties: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.AssetEndpointProfile]: - """Update a AssetEndpointProfile. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. - :type asset_endpoint_profile_name: str - :param properties: The resource properties to be updated. Required. - :type properties: IO[bytes] - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns AssetEndpointProfile. The AssetEndpointProfile - is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] - :raises ~azure.core.exceptions.HttpResponseError: - """ - @distributed_trace - def begin_update( - self, - resource_group_name: str, - asset_endpoint_profile_name: str, - properties: Union[_models.AssetEndpointProfileUpdate, JSON, IO[bytes]], - **kwargs: Any - ) -> LROPoller[_models.AssetEndpointProfile]: - """Update a AssetEndpointProfile. + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + def begin_delete(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> LROPoller[None]: + """Delete a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. - :type asset_endpoint_profile_name: str - :param properties: The resource properties to be updated. Is one of the following types: - AssetEndpointProfileUpdate, JSON, IO[bytes] Required. - :type properties: ~azure.mgmt.deviceregistry.models.AssetEndpointProfileUpdate or JSON or - IO[bytes] - :return: An instance of LROPoller that returns AssetEndpointProfile. The AssetEndpointProfile - is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.AssetEndpointProfile] = kwargs.pop("cls", 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._update_initial( + raw_result = self._delete_initial( resource_group_name=resource_group_name, - asset_endpoint_profile_name=asset_endpoint_profile_name, - properties=properties, - content_type=content_type, + namespace_name=namespace_name, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -3183,12 +5822,9 @@ def begin_update( raw_result.http_response.read() # type: ignore kwargs.pop("error_map", None) - def get_long_running_output(pipeline_response): - response = pipeline_response.http_response - deserialized = _deserialize(_models.AssetEndpointProfile, response.json()) + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized + return cls(pipeline_response, None, {}) # type: ignore path_format_arguments = { "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), @@ -3203,18 +5839,34 @@ def get_long_running_output(pipeline_response): else: polling_method = polling if cont_token: - return LROPoller[_models.AssetEndpointProfile].from_continuation_token( + return LROPoller[None].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[_models.AssetEndpointProfile]( - self._client, raw_result, get_long_running_output, polling_method # type: ignore - ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore - def _delete_initial( - self, resource_group_name: str, asset_endpoint_profile_name: str, **kwargs: Any + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + def _update_initial( + self, + resource_group_name: str, + namespace_name: str, + properties: Union[_models.CredentialUpdate, JSON, IO[bytes]], + **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -3224,16 +5876,26 @@ def _delete_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_asset_endpoint_profiles_delete_request( + content_type = content_type or "application/json" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_credentials_update_request( resource_group_name=resource_group_name, - asset_endpoint_profile_name=asset_endpoint_profile_name, + namespace_name=namespace_name, subscription_id=self._config.subscription_id, + content_type=content_type, api_version=self._config.api_version, + content=_content, headers=_headers, params=_params, ) @@ -3242,6 +5904,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3249,13 +5912,16 @@ def _delete_initial( response = pipeline_response.http_response - if response.status_code not in [202, 204]: + 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -3263,39 +5929,148 @@ def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore + @overload + def begin_update( + self, + resource_group_name: str, + namespace_name: str, + properties: _models.CredentialUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Credential]: + """Update a Credential. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.deviceregistry.models.CredentialUpdate + :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 Credential. The Credential is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Credential] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + namespace_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Credential]: + """Update a Credential. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :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 Credential. The Credential is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Credential] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + namespace_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Credential]: + """Update a Credential. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Credential. The Credential is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Credential] + :raises ~azure.core.exceptions.HttpResponseError: + """ + @distributed_trace - def begin_delete( - self, resource_group_name: str, asset_endpoint_profile_name: str, **kwargs: Any - ) -> LROPoller[None]: - """Delete a AssetEndpointProfile. + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + def begin_update( + self, + resource_group_name: str, + namespace_name: str, + properties: Union[_models.CredentialUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.Credential]: + """Update a Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param asset_endpoint_profile_name: Asset Endpoint Profile name parameter. Required. - :type asset_endpoint_profile_name: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param properties: The resource properties to be updated. Is one of the following types: + CredentialUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.deviceregistry.models.CredentialUpdate or JSON or IO[bytes] + :return: An instance of LROPoller that returns Credential. The Credential is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} - cls: ClsType[None] = kwargs.pop("cls", None) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Credential] = 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._delete_initial( + raw_result = self._update_initial( resource_group_name=resource_group_name, - asset_endpoint_profile_name=asset_endpoint_profile_name, + namespace_name=namespace_name, + properties=properties, + content_type=content_type, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -3304,9 +6079,12 @@ def begin_delete( 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Credential, response.json()) if cls: - return cls(pipeline_response, None, {}) # type: ignore + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized path_format_arguments = { "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), @@ -3321,116 +6099,42 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- else: polling_method = polling if cont_token: - return LROPoller[None].from_continuation_token( + return LROPoller[_models.Credential].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 - - @distributed_trace - def list_by_resource_group( - self, resource_group_name: str, **kwargs: Any - ) -> ItemPaged["_models.AssetEndpointProfile"]: - """List AssetEndpointProfile resources by resource group. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :return: An iterator like instance of AssetEndpointProfile - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.AssetEndpointProfile]] = 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_asset_endpoint_profiles_list_by_resource_group_request( - resource_group_name=resource_group_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AssetEndpointProfile], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") 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 + client=self._client, + deserialization_callback=get_long_running_output, ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) + return LROPoller[_models.Credential]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) @distributed_trace - def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.AssetEndpointProfile"]: - """List AssetEndpointProfile resources by subscription ID. + @api_version_validation( + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], + ) + def list_by_resource_group( + self, resource_group_name: str, namespace_name: str, **kwargs: Any + ) -> ItemPaged["_models.Credential"]: + """List Credential resources by Namespace. - :return: An iterator like instance of AssetEndpointProfile - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.AssetEndpointProfile] + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An iterator like instance of Credential + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Credential] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[List[_models.AssetEndpointProfile]] = kwargs.pop("cls", None) + cls: ClsType[List[_models.Credential]] = kwargs.pop("cls", None) error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -3443,7 +6147,9 @@ def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.AssetEndpoin def prepare_request(next_link=None): if not next_link: - _request = build_asset_endpoint_profiles_list_by_subscription_request( + _request = build_credentials_list_by_resource_group_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -3480,7 +6186,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AssetEndpointProfile], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Credential], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -3496,46 +6205,24 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response return ItemPaged(get_next, extract_data) - -class BillingContainersOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s - :attr:`billing_containers` attribute. - """ - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: DeviceRegistryMgmtClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace @api_version_validation( - method_added_on="2024-09-01-preview", - params_added_on={"2024-09-01-preview": ["api_version", "subscription_id", "billing_container_name", "accept"]}, - api_versions_list=["2024-09-01-preview", "2024-11-01", "2025-07-01-preview", "2025-10-01"], + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], ) - def get(self, billing_container_name: str, **kwargs: Any) -> _models.BillingContainer: - """Get a BillingContainer. - - :param billing_container_name: Name of the billing container. Required. - :type billing_container_name: str - :return: BillingContainer. The BillingContainer is compatible with MutableMapping - :rtype: ~azure.mgmt.deviceregistry.models.BillingContainer - :raises ~azure.core.exceptions.HttpResponseError: - """ + def _synchronize_initial(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -3547,10 +6234,11 @@ def get(self, billing_container_name: str, **kwargs: Any) -> _models.BillingCont _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.BillingContainer] = kwargs.pop("cls", None) + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_billing_containers_get_request( - billing_container_name=billing_container_name, + _request = build_credentials_synchronize_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -3561,131 +6249,110 @@ def get(self, billing_container_name: str, **kwargs: Any) -> _models.BillingCont } _request.url = self._client.format_url(_request.url, **path_format_arguments) - _stream = kwargs.pop("stream", False) + _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]: - if _stream: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass + 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.BillingContainer, response.json()) + response_headers = {} + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore + return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore @distributed_trace @api_version_validation( - method_added_on="2024-09-01-preview", - params_added_on={"2024-09-01-preview": ["api_version", "subscription_id", "accept"]}, - api_versions_list=["2024-09-01-preview", "2024-11-01", "2025-07-01-preview", "2025-10-01"], + method_added_on="2025-11-01-preview", + params_added_on={ + "2025-11-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + }, + api_versions_list=["2025-11-01-preview", "2026-03-01-preview"], ) - def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.BillingContainer"]: - """List BillingContainer resources by subscription ID. + def begin_synchronize(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> LROPoller[None]: + """A long-running resource action. - :return: An iterator like instance of BillingContainer - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.BillingContainer] + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[List[_models.BillingContainer]] = 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_billing_containers_list_by_subscription_request( - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request + 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._synchronize_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.BillingContainer], deserialized.get("value", [])) + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) + return cls(pipeline_response, None, {}) # type: ignore - def get_next(next_link=None): - _request = prepare_request(next_link) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) + 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, + ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore -class NamespacesOperations: +class PoliciesOperations: """ .. warning:: **DO NOT** instantiate this class directly. Instead, you should access the following operations through :class:`~azure.mgmt.deviceregistry.DeviceRegistryMgmtClient`'s - :attr:`namespaces` attribute. + :attr:`policies` attribute. """ def __init__(self, *args, **kwargs) -> None: @@ -3697,22 +6364,31 @@ def __init__(self, *args, **kwargs) -> None: @distributed_trace @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + "accept", + ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> _models.Namespace: - """Get a Namespace. + def get(self, resource_group_name: str, namespace_name: str, policy_name: str, **kwargs: Any) -> _models.Policy: + """Get a Policy. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str - :return: Namespace. The Namespace is compatible with MutableMapping - :rtype: ~azure.mgmt.deviceregistry.models.Namespace + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :return: Policy. The Policy is compatible with MutableMapping + :rtype: ~azure.mgmt.deviceregistry.models.Policy :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -3726,11 +6402,12 @@ def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> _ _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.Namespace] = kwargs.pop("cls", None) + cls: ClsType[_models.Policy] = kwargs.pop("cls", None) - _request = build_namespaces_get_request( + _request = build_policies_get_request( resource_group_name=resource_group_name, namespace_name=namespace_name, + policy_name=policy_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -3741,6 +6418,7 @@ def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> _ } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3755,13 +6433,16 @@ def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> _ except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: - deserialized = _deserialize(_models.Namespace, response.json()) + deserialized = _deserialize(_models.Policy, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore @@ -3769,24 +6450,26 @@ def get(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> _ return deserialized # type: ignore @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2026-03-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", + "policy_name", "content_type", "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - def _create_or_replace_initial( + def _create_or_update_initial( self, resource_group_name: str, namespace_name: str, - resource: Union[_models.Namespace, JSON, IO[bytes]], + policy_name: str, + resource: Union[_models.Policy, JSON, IO[bytes]], **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { @@ -3810,9 +6493,10 @@ def _create_or_replace_initial( else: _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_namespaces_create_or_replace_request( + _request = build_policies_create_or_update_request( resource_group_name=resource_group_name, namespace_name=namespace_name, + policy_name=policy_name, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -3825,6 +6509,7 @@ def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3838,7 +6523,10 @@ def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -3848,7 +6536,7 @@ def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -3856,138 +6544,152 @@ def _create_or_replace_initial( return deserialized # type: ignore @overload - def begin_create_or_replace( + def begin_create_or_update( self, resource_group_name: str, namespace_name: str, - resource: _models.Namespace, + policy_name: str, + resource: _models.Policy, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Namespace]: - """Create a Namespace. + ) -> LROPoller[_models.Policy]: + """Create a Policy. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str :param resource: Resource create parameters. Required. - :type resource: ~azure.mgmt.deviceregistry.models.Namespace + :type resource: ~azure.mgmt.deviceregistry.models.Policy :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 Namespace. The Namespace is compatible with + :return: An instance of LROPoller that returns Policy. The Policy is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Policy] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_create_or_replace( + def begin_create_or_update( self, resource_group_name: str, namespace_name: str, + policy_name: str, resource: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Namespace]: - """Create a Namespace. + ) -> LROPoller[_models.Policy]: + """Create a Policy. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str :param resource: Resource create parameters. Required. :type resource: JSON :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 Namespace. The Namespace is compatible with + :return: An instance of LROPoller that returns Policy. The Policy is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Policy] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_create_or_replace( + def begin_create_or_update( self, resource_group_name: str, namespace_name: str, + policy_name: str, resource: IO[bytes], *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Namespace]: - """Create a Namespace. + ) -> LROPoller[_models.Policy]: + """Create a Policy. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str :param resource: Resource create parameters. Required. :type resource: 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 Namespace. The Namespace is compatible with + :return: An instance of LROPoller that returns Policy. The Policy is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Policy] :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2026-03-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", + "policy_name", "content_type", "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - def begin_create_or_replace( + def begin_create_or_update( self, resource_group_name: str, namespace_name: str, - resource: Union[_models.Namespace, JSON, IO[bytes]], + policy_name: str, + resource: Union[_models.Policy, JSON, IO[bytes]], **kwargs: Any - ) -> LROPoller[_models.Namespace]: - """Create a Namespace. + ) -> LROPoller[_models.Policy]: + """Create a Policy. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str - :param resource: Resource create parameters. Is one of the following types: Namespace, JSON, + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param resource: Resource create parameters. Is one of the following types: Policy, JSON, IO[bytes] Required. - :type resource: ~azure.mgmt.deviceregistry.models.Namespace or JSON or IO[bytes] - :return: An instance of LROPoller that returns Namespace. The Namespace is compatible with + :type resource: ~azure.mgmt.deviceregistry.models.Policy or JSON or IO[bytes] + :return: An instance of LROPoller that returns Policy. The Policy is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Policy] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.Namespace] = kwargs.pop("cls", None) + cls: ClsType[_models.Policy] = 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._create_or_replace_initial( + raw_result = self._create_or_update_initial( resource_group_name=resource_group_name, namespace_name=namespace_name, + policy_name=policy_name, resource=resource, content_type=content_type, cls=lambda x, y, z: x, @@ -4000,7 +6702,7 @@ def begin_create_or_replace( def get_long_running_output(pipeline_response): response = pipeline_response.http_response - deserialized = _deserialize(_models.Namespace, response.json()) + deserialized = _deserialize(_models.Policy, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized @@ -4018,36 +6720,31 @@ def get_long_running_output(pipeline_response): else: polling_method = polling if cont_token: - return LROPoller[_models.Namespace].from_continuation_token( + return LROPoller[_models.Policy].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[_models.Namespace]( + return LROPoller[_models.Policy]( self._client, raw_result, get_long_running_output, polling_method # type: ignore ) @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2026-03-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", - "content_type", - "accept", + "policy_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - def _update_initial( - self, - resource_group_name: str, - namespace_name: str, - properties: Union[_models.NamespaceUpdate, JSON, IO[bytes]], - **kwargs: Any + def _delete_initial( + self, resource_group_name: str, namespace_name: str, policy_name: str, **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -4057,26 +6754,17 @@ def _update_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - 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" - _content = None - if isinstance(properties, (IOBase, bytes)): - _content = properties - else: - _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - - _request = build_namespaces_update_request( + _request = build_policies_delete_request( resource_group_name=resource_group_name, namespace_name=namespace_name, + policy_name=policy_name, subscription_id=self._config.subscription_id, - content_type=content_type, api_version=self._config.api_version, - content=_content, headers=_headers, params=_params, ) @@ -4085,6 +6773,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4092,13 +6781,16 @@ def _update_initial( response = pipeline_response.http_response - if response.status_code not in [200, 202]: + if response.status_code not in [202, 204]: 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -4106,148 +6798,55 @@ def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore - @overload - def begin_update( - self, - resource_group_name: str, - namespace_name: str, - properties: _models.NamespaceUpdate, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.Namespace]: - """Update a Namespace. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param namespace_name: The name of the namespace. Required. - :type namespace_name: str - :param properties: The resource properties to be updated. Required. - :type properties: ~azure.mgmt.deviceregistry.models.NamespaceUpdate - :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 Namespace. The Namespace is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_update( - self, - resource_group_name: str, - namespace_name: str, - properties: JSON, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.Namespace]: - """Update a Namespace. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param namespace_name: The name of the namespace. Required. - :type namespace_name: str - :param properties: The resource properties to be updated. Required. - :type properties: JSON - :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 Namespace. The Namespace is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_update( - self, - resource_group_name: str, - namespace_name: str, - properties: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.Namespace]: - """Update a Namespace. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param namespace_name: The name of the namespace. Required. - :type namespace_name: str - :param properties: The resource properties to be updated. Required. - :type properties: IO[bytes] - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns Namespace. The Namespace is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] - :raises ~azure.core.exceptions.HttpResponseError: - """ - @distributed_trace @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2026-03-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", - "content_type", - "accept", + "policy_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - def begin_update( - self, - resource_group_name: str, - namespace_name: str, - properties: Union[_models.NamespaceUpdate, JSON, IO[bytes]], - **kwargs: Any - ) -> LROPoller[_models.Namespace]: - """Update a Namespace. + def begin_delete( + self, resource_group_name: str, namespace_name: str, policy_name: str, **kwargs: Any + ) -> LROPoller[None]: + """Delete a Policy. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str - :param properties: The resource properties to be updated. Is one of the following types: - NamespaceUpdate, JSON, IO[bytes] Required. - :type properties: ~azure.mgmt.deviceregistry.models.NamespaceUpdate or JSON or IO[bytes] - :return: An instance of LROPoller that returns Namespace. The Namespace is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Namespace] + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.Namespace] = kwargs.pop("cls", 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._update_initial( + raw_result = self._delete_initial( resource_group_name=resource_group_name, namespace_name=namespace_name, - properties=properties, - content_type=content_type, + policy_name=policy_name, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -4256,12 +6855,9 @@ def begin_update( raw_result.http_response.read() # type: ignore kwargs.pop("error_map", None) - def get_long_running_output(pipeline_response): - response = pipeline_response.http_response - deserialized = _deserialize(_models.Namespace, response.json()) + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized + return cls(pipeline_response, None, {}) # type: ignore path_format_arguments = { "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), @@ -4276,24 +6872,37 @@ def get_long_running_output(pipeline_response): else: polling_method = polling if cont_token: - return LROPoller[_models.Namespace].from_continuation_token( + return LROPoller[None].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[_models.Namespace]( - self._client, raw_result, get_long_running_output, polling_method # type: ignore - ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + "content_type", + "accept", + ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - def _delete_initial(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> Iterator[bytes]: + def _update_initial( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + properties: Union[_models.PolicyUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -4302,16 +6911,27 @@ def _delete_initial(self, resource_group_name: str, namespace_name: str, **kwarg } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_namespaces_delete_request( + content_type = content_type or "application/json" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_policies_update_request( resource_group_name=resource_group_name, namespace_name=namespace_name, + policy_name=policy_name, subscription_id=self._config.subscription_id, + content_type=content_type, api_version=self._config.api_version, + content=_content, headers=_headers, params=_params, ) @@ -4320,6 +6940,7 @@ def _delete_initial(self, resource_group_name: str, namespace_name: str, **kwarg } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4327,13 +6948,16 @@ def _delete_initial(self, resource_group_name: str, namespace_name: str, **kwarg response = pipeline_response.http_response - if response.status_code not in [202, 204]: + 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -4341,44 +6965,162 @@ def _delete_initial(self, resource_group_name: str, namespace_name: str, **kwarg response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore + @overload + def begin_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + properties: _models.PolicyUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Policy]: + """Update a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.deviceregistry.models.PolicyUpdate + :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 Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Policy]: + """Update a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :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 Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Policy]: + """Update a Policy. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Policy] + :raises ~azure.core.exceptions.HttpResponseError: + """ + @distributed_trace @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name"] + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + "content_type", + "accept", + ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - def begin_delete(self, resource_group_name: str, namespace_name: str, **kwargs: Any) -> LROPoller[None]: - """Delete a Namespace. + def begin_update( + self, + resource_group_name: str, + namespace_name: str, + policy_name: str, + properties: Union[_models.PolicyUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.Policy]: + """Update a Policy. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :param properties: The resource properties to be updated. Is one of the following types: + PolicyUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.deviceregistry.models.PolicyUpdate or JSON or IO[bytes] + :return: An instance of LROPoller that returns Policy. The Policy is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.deviceregistry.models.Policy] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} - cls: ClsType[None] = kwargs.pop("cls", None) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Policy] = 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._delete_initial( + raw_result = self._update_initial( resource_group_name=resource_group_name, namespace_name=namespace_name, + policy_name=policy_name, + properties=properties, + content_type=content_type, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -4387,9 +7129,12 @@ def begin_delete(self, resource_group_name: str, namespace_name: str, **kwargs: 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): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Policy, response.json()) if cls: - return cls(pipeline_response, None, {}) # type: ignore + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized path_format_arguments = { "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), @@ -4404,34 +7149,42 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- else: polling_method = polling if cont_token: - return LROPoller[None].from_continuation_token( + return LROPoller[_models.Policy].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 + return LROPoller[_models.Policy]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) @distributed_trace @api_version_validation( - method_added_on="2025-07-01-preview", - params_added_on={"2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "accept"]}, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] + }, + api_versions_list=["2026-03-01-preview"], ) - def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> ItemPaged["_models.Namespace"]: - """List Namespace resources by resource group. + def list_by_resource_group( + self, resource_group_name: str, namespace_name: str, **kwargs: Any + ) -> ItemPaged["_models.Policy"]: + """List Policy resources by Credential. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :return: An iterator like instance of Namespace - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Namespace] + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An iterator like instance of Policy + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Policy] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[List[_models.Namespace]] = kwargs.pop("cls", None) + cls: ClsType[List[_models.Policy]] = kwargs.pop("cls", None) error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -4444,8 +7197,9 @@ def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> Ite def prepare_request(next_link=None): if not next_link: - _request = build_namespaces_list_by_resource_group_request( + _request = build_policies_list_by_resource_group_request( resource_group_name=resource_group_name, + namespace_name=namespace_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -4482,7 +7236,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Namespace], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Policy], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -4498,31 +7255,32 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response return ItemPaged(get_next, extract_data) - @distributed_trace @api_version_validation( - method_added_on="2025-07-01-preview", - params_added_on={"2025-07-01-preview": ["api_version", "subscription_id", "accept"]}, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + ] + }, + api_versions_list=["2026-03-01-preview"], ) - def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.Namespace"]: - """List Namespace resources by subscription ID. - - :return: An iterator like instance of Namespace - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.Namespace] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.Namespace]] = kwargs.pop("cls", None) - + def _revoke_issuer_initial( + self, resource_group_name: str, namespace_name: str, policy_name: str, **kwargs: Any + ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -4531,88 +7289,152 @@ def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.Namespace"]: } error_map.update(kwargs.pop("error_map", {}) or {}) - def prepare_request(next_link=None): - if not next_link: + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} - _request = build_namespaces_list_by_subscription_request( - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) + cls: ClsType[Iterator[bytes]] = 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._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) + _request = build_policies_revoke_issuer_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) - 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 = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Namespace], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") 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, 204]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "policy_name", + ] + }, + api_versions_list=["2026-03-01-preview"], + ) + def begin_revoke_issuer( + self, resource_group_name: str, namespace_name: str, policy_name: str, **kwargs: Any + ) -> LROPoller[None]: + """A long-running resource action. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + 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._revoke_issuer_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + policy_name=policy_name, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs ) - response = pipeline_response.http_response + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore - return pipeline_response + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } - return ItemPaged(get_next, extract_data) + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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, + ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2026-03-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", + "policy_name", "content_type", - "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - def _migrate_initial( + def _activate_bring_your_own_root_initial( self, resource_group_name: str, namespace_name: str, - body: Union[_models.NamespaceMigrateRequest, JSON, IO[bytes]], + policy_name: str, + body: Union[_models.ActivateBringYourOwnRootRequest, JSON, IO[bytes]], **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { @@ -4636,9 +7458,10 @@ def _migrate_initial( else: _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_namespaces_migrate_request( + _request = build_policies_activate_bring_your_own_root_request( resource_group_name=resource_group_name, namespace_name=namespace_name, + policy_name=policy_name, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -4651,6 +7474,7 @@ def _migrate_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4658,24 +7482,24 @@ def _migrate_initial( response = pipeline_response.http_response - if response.status_code not in [200, 202]: + if response.status_code not in [202, 204]: 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} if response.status_code == 202: - response_headers["Azure-AsyncOperation"] = self._deserialize( - "str", response.headers.get("Azure-AsyncOperation") - ) response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -4683,24 +7507,28 @@ def _migrate_initial( return deserialized # type: ignore @overload - def begin_migrate( + def begin_activate_bring_your_own_root( self, resource_group_name: str, namespace_name: str, - body: _models.NamespaceMigrateRequest, + policy_name: str, + body: _models.ActivateBringYourOwnRootRequest, *, content_type: str = "application/json", **kwargs: Any ) -> LROPoller[None]: - """Migrate the resources into Namespace. + """Activates or renews a Bring Your Own Root policy by accepting a customer-provided signed + certificate. This is a long-running operation that returns no content upon completion. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str :param body: The content of the action request. Required. - :type body: ~azure.mgmt.deviceregistry.models.NamespaceMigrateRequest + :type body: ~azure.mgmt.deviceregistry.models.ActivateBringYourOwnRootRequest :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str @@ -4710,22 +7538,26 @@ def begin_migrate( """ @overload - def begin_migrate( + def begin_activate_bring_your_own_root( self, resource_group_name: str, namespace_name: str, + policy_name: str, body: JSON, *, content_type: str = "application/json", **kwargs: Any ) -> LROPoller[None]: - """Migrate the resources into Namespace. + """Activates or renews a Bring Your Own Root policy by accepting a customer-provided signed + certificate. This is a long-running operation that returns no content upon completion. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str :param body: The content of the action request. Required. :type body: JSON :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. @@ -4737,22 +7569,26 @@ def begin_migrate( """ @overload - def begin_migrate( + def begin_activate_bring_your_own_root( self, resource_group_name: str, namespace_name: str, + policy_name: str, body: IO[bytes], *, content_type: str = "application/json", **kwargs: Any ) -> LROPoller[None]: - """Migrate the resources into Namespace. + """Activates or renews a Bring Your Own Root policy by accepting a customer-provided signed + certificate. This is a long-running operation that returns no content upon completion. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str :param body: The content of the action request. Required. :type body: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. @@ -4765,36 +7601,41 @@ def begin_migrate( @distributed_trace @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2026-03-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", + "policy_name", "content_type", - "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - def begin_migrate( + def begin_activate_bring_your_own_root( self, resource_group_name: str, namespace_name: str, - body: Union[_models.NamespaceMigrateRequest, JSON, IO[bytes]], + policy_name: str, + body: Union[_models.ActivateBringYourOwnRootRequest, JSON, IO[bytes]], **kwargs: Any ) -> LROPoller[None]: - """Migrate the resources into Namespace. + """Activates or renews a Bring Your Own Root policy by accepting a customer-provided signed + certificate. This is a long-running operation that returns no content upon completion. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param namespace_name: The name of the namespace. Required. :type namespace_name: str + :param policy_name: The name of the Policy proxy resource. Required. + :type policy_name: str :param body: The content of the action request. Is one of the following types: - NamespaceMigrateRequest, JSON, IO[bytes] Required. - :type body: ~azure.mgmt.deviceregistry.models.NamespaceMigrateRequest or JSON or IO[bytes] + ActivateBringYourOwnRootRequest, JSON, IO[bytes] Required. + :type body: ~azure.mgmt.deviceregistry.models.ActivateBringYourOwnRootRequest or JSON or + IO[bytes] :return: An instance of LROPoller that returns None :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -4808,9 +7649,10 @@ def begin_migrate( 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_initial( + raw_result = self._activate_bring_your_own_root_initial( resource_group_name=resource_group_name, namespace_name=namespace_name, + policy_name=policy_name, body=body, content_type=content_type, cls=lambda x, y, z: x, @@ -4877,7 +7719,7 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def get( self, resource_group_name: str, namespace_name: str, asset_name: str, **kwargs: Any @@ -4922,6 +7764,7 @@ def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4936,11 +7779,14 @@ def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.NamespaceAsset, response.json()) @@ -4962,7 +7808,7 @@ def get( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _create_or_replace_initial( self, @@ -5009,6 +7855,7 @@ def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5022,7 +7869,10 @@ def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -5032,7 +7882,7 @@ def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -5146,7 +7996,7 @@ def begin_create_or_replace( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_create_or_replace( self, @@ -5239,7 +8089,7 @@ def get_long_running_output(pipeline_response): "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _update_initial( self, @@ -5286,6 +8136,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5299,7 +8150,10 @@ def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -5307,7 +8161,7 @@ def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -5421,7 +8275,7 @@ def begin_update( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_update( self, @@ -5512,7 +8366,7 @@ def get_long_running_output(pipeline_response): "asset_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _delete_initial( self, resource_group_name: str, namespace_name: str, asset_name: str, **kwargs: Any @@ -5544,6 +8398,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5557,7 +8412,10 @@ def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -5565,7 +8423,7 @@ def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -5584,7 +8442,7 @@ def _delete_initial( "asset_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_delete( self, resource_group_name: str, namespace_name: str, asset_name: str, **kwargs: Any @@ -5653,7 +8511,7 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- params_added_on={ "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def list_by_resource_group( self, resource_group_name: str, namespace_name: str, **kwargs: Any @@ -5724,7 +8582,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.NamespaceAsset], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.NamespaceAsset], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -5740,7 +8601,10 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -5778,7 +8642,7 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def get( self, resource_group_name: str, namespace_name: str, device_name: str, **kwargs: Any @@ -5823,6 +8687,7 @@ def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5837,11 +8702,14 @@ def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.NamespaceDevice, response.json()) @@ -5863,7 +8731,7 @@ def get( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _create_or_replace_initial( self, @@ -5910,6 +8778,7 @@ def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5923,7 +8792,10 @@ def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -5933,7 +8805,7 @@ def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -6047,7 +8919,7 @@ def begin_create_or_replace( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_create_or_replace( self, @@ -6140,7 +9012,7 @@ def get_long_running_output(pipeline_response): "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _update_initial( self, @@ -6187,6 +9059,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -6200,7 +9073,10 @@ def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -6208,7 +9084,7 @@ def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -6322,7 +9198,7 @@ def begin_update( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_update( self, @@ -6413,10 +9289,273 @@ def get_long_running_output(pipeline_response): "device_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def _delete_initial( + self, resource_group_name: str, namespace_name: str, device_name: str, **kwargs: Any + ) -> Iterator[bytes]: + 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 = kwargs.pop("params", {}) or {} + + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + _request = build_namespace_devices_delete_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + device_name=device_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _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 [202, 204]: + 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) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "device_name", + ] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def begin_delete( + self, resource_group_name: str, namespace_name: str, device_name: str, **kwargs: Any + ) -> LROPoller[None]: + """Delete a NamespaceDevice. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param device_name: The name of the device. Required. + :type device_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + 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._delete_initial( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + device_name=device_name, + 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): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **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, + ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2025-07-01-preview", + params_added_on={ + "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] + }, + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], + ) + def list_by_resource_group( + self, resource_group_name: str, namespace_name: str, **kwargs: Any + ) -> ItemPaged["_models.NamespaceDevice"]: + """List NamespaceDevice resources by Namespace. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :return: An iterator like instance of NamespaceDevice + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.NamespaceDevice] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.NamespaceDevice]] = 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_namespace_devices_list_by_resource_group_request( + resource_group_name=resource_group_name, + namespace_name=namespace_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.NamespaceDevice], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @api_version_validation( + method_added_on="2026-03-01-preview", + params_added_on={ + "2026-03-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "namespace_name", + "device_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-03-01-preview"], ) - def _delete_initial( - self, resource_group_name: str, namespace_name: str, device_name: str, **kwargs: Any + def _revoke_initial( + self, + resource_group_name: str, + namespace_name: str, + device_name: str, + body: Union[_models.DeviceCredentialsRevokeRequest, JSON, IO[bytes]], + **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -6426,17 +9565,27 @@ def _delete_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_namespace_devices_delete_request( + content_type = content_type or "application/json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_namespace_devices_revoke_request( resource_group_name=resource_group_name, namespace_name=namespace_name, device_name=device_name, subscription_id=self._config.subscription_id, + content_type=content_type, api_version=self._config.api_version, + content=_content, headers=_headers, params=_params, ) @@ -6445,6 +9594,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -6452,45 +9602,148 @@ def _delete_initial( response = pipeline_response.http_response - if response.status_code not in [202, 204]: + 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) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} if response.status_code == 202: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore + @overload + def begin_revoke( + self, + resource_group_name: str, + namespace_name: str, + device_name: str, + body: _models.DeviceCredentialsRevokeRequest, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[None]: + """A long-running resource action. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param device_name: The name of the device. Required. + :type device_name: str + :param body: The content of the action request. Required. + :type body: ~azure.mgmt.deviceregistry.models.DeviceCredentialsRevokeRequest + :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 None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_revoke( + self, + resource_group_name: str, + namespace_name: str, + device_name: str, + body: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[None]: + """A long-running resource action. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param device_name: The name of the device. Required. + :type device_name: str + :param body: The content of the action request. Required. + :type body: JSON + :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 None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_revoke( + self, + resource_group_name: str, + namespace_name: str, + device_name: str, + body: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[None]: + """A long-running resource action. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param namespace_name: The name of the namespace. Required. + :type namespace_name: str + :param device_name: The name of the device. Required. + :type device_name: str + :param body: The content of the action request. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + @distributed_trace @api_version_validation( - method_added_on="2025-07-01-preview", + method_added_on="2026-03-01-preview", params_added_on={ - "2025-07-01-preview": [ + "2026-03-01-preview": [ "api_version", "subscription_id", "resource_group_name", "namespace_name", "device_name", + "content_type", + "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2026-03-01-preview"], ) - def begin_delete( - self, resource_group_name: str, namespace_name: str, device_name: str, **kwargs: Any + def begin_revoke( + self, + resource_group_name: str, + namespace_name: str, + device_name: str, + body: Union[_models.DeviceCredentialsRevokeRequest, JSON, IO[bytes]], + **kwargs: Any ) -> LROPoller[None]: - """Delete a NamespaceDevice. + """A long-running resource action. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. @@ -6499,22 +9752,29 @@ def begin_delete( :type namespace_name: str :param device_name: The name of the device. Required. :type device_name: str + :param body: The content of the action request. Is one of the following types: + DeviceCredentialsRevokeRequest, JSON, IO[bytes] Required. + :type body: ~azure.mgmt.deviceregistry.models.DeviceCredentialsRevokeRequest or JSON or + IO[bytes] :return: An instance of LROPoller that returns None :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} + 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._delete_initial( + raw_result = self._revoke_initial( resource_group_name=resource_group_name, namespace_name=namespace_name, device_name=device_name, + body=body, + content_type=content_type, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -6548,106 +9808,6 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- ) return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore - @distributed_trace - @api_version_validation( - method_added_on="2025-07-01-preview", - params_added_on={ - "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] - }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], - ) - def list_by_resource_group( - self, resource_group_name: str, namespace_name: str, **kwargs: Any - ) -> ItemPaged["_models.NamespaceDevice"]: - """List NamespaceDevice resources by Namespace. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param namespace_name: The name of the namespace. Required. - :type namespace_name: str - :return: An iterator like instance of NamespaceDevice - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.deviceregistry.models.NamespaceDevice] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.NamespaceDevice]] = 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_namespace_devices_list_by_resource_group_request( - resource_group_name=resource_group_name, - namespace_name=namespace_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.NamespaceDevice], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - _request = prepare_request(next_link) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - class NamespaceDiscoveredAssetsOperations: """ @@ -6679,7 +9839,7 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def get( self, resource_group_name: str, namespace_name: str, discovered_asset_name: str, **kwargs: Any @@ -6725,6 +9885,7 @@ def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -6739,11 +9900,14 @@ def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.NamespaceDiscoveredAsset, response.json()) @@ -6765,7 +9929,7 @@ def get( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _create_or_replace_initial( self, @@ -6812,6 +9976,7 @@ def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -6825,7 +9990,10 @@ def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -6835,7 +10003,7 @@ def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -6952,7 +10120,7 @@ def begin_create_or_replace( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_create_or_replace( self, @@ -7046,7 +10214,7 @@ def get_long_running_output(pipeline_response): "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _update_initial( self, @@ -7093,6 +10261,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -7106,7 +10275,10 @@ def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -7114,7 +10286,7 @@ def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -7231,7 +10403,7 @@ def begin_update( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_update( self, @@ -7324,7 +10496,7 @@ def get_long_running_output(pipeline_response): "discovered_asset_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _delete_initial( self, resource_group_name: str, namespace_name: str, discovered_asset_name: str, **kwargs: Any @@ -7356,6 +10528,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -7369,7 +10542,10 @@ def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -7377,7 +10553,7 @@ def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -7396,7 +10572,7 @@ def _delete_initial( "discovered_asset_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_delete( self, resource_group_name: str, namespace_name: str, discovered_asset_name: str, **kwargs: Any @@ -7465,7 +10641,7 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- params_added_on={ "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def list_by_resource_group( self, resource_group_name: str, namespace_name: str, **kwargs: Any @@ -7537,7 +10713,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.NamespaceDiscoveredAsset], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.NamespaceDiscoveredAsset], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -7553,7 +10732,10 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -7591,7 +10773,7 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def get( self, resource_group_name: str, namespace_name: str, discovered_device_name: str, **kwargs: Any @@ -7637,6 +10819,7 @@ def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -7651,11 +10834,14 @@ def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.NamespaceDiscoveredDevice, response.json()) @@ -7677,7 +10863,7 @@ def get( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _create_or_replace_initial( self, @@ -7724,6 +10910,7 @@ def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -7737,7 +10924,10 @@ def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -7747,7 +10937,7 @@ def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -7864,7 +11054,7 @@ def begin_create_or_replace( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_create_or_replace( self, @@ -7959,7 +11149,7 @@ def get_long_running_output(pipeline_response): "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _update_initial( self, @@ -8006,6 +11196,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -8019,7 +11210,10 @@ def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -8027,7 +11221,7 @@ def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -8144,7 +11338,7 @@ def begin_update( "accept", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_update( self, @@ -8237,7 +11431,7 @@ def get_long_running_output(pipeline_response): "discovered_device_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _delete_initial( self, resource_group_name: str, namespace_name: str, discovered_device_name: str, **kwargs: Any @@ -8269,6 +11463,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -8282,7 +11477,10 @@ def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -8290,7 +11488,7 @@ def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -8309,7 +11507,7 @@ def _delete_initial( "discovered_device_name", ] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_delete( self, resource_group_name: str, namespace_name: str, discovered_device_name: str, **kwargs: Any @@ -8378,7 +11576,7 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- params_added_on={ "2025-07-01-preview": ["api_version", "subscription_id", "resource_group_name", "namespace_name", "accept"] }, - api_versions_list=["2025-07-01-preview", "2025-10-01"], + api_versions_list=["2025-07-01-preview", "2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def list_by_resource_group( self, resource_group_name: str, namespace_name: str, **kwargs: Any @@ -8450,7 +11648,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.NamespaceDiscoveredDevice], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.NamespaceDiscoveredDevice], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -8466,7 +11667,10 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -8503,7 +11707,13 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def get(self, resource_group_name: str, schema_registry_name: str, **kwargs: Any) -> _models.SchemaRegistry: """Get a SchemaRegistry. @@ -8543,6 +11753,7 @@ def get(self, resource_group_name: str, schema_registry_name: str, **kwargs: Any } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -8557,11 +11768,14 @@ def get(self, resource_group_name: str, schema_registry_name: str, **kwargs: Any except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.SchemaRegistry, response.json()) @@ -8582,7 +11796,13 @@ def get(self, resource_group_name: str, schema_registry_name: str, **kwargs: Any "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def _create_or_replace_initial( self, @@ -8627,6 +11847,7 @@ def _create_or_replace_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -8640,7 +11861,10 @@ def _create_or_replace_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -8650,7 +11874,7 @@ def _create_or_replace_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -8754,7 +11978,13 @@ def begin_create_or_replace( "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def begin_create_or_replace( self, @@ -8842,7 +12072,13 @@ def get_long_running_output(pipeline_response): "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def _update_initial( self, @@ -8887,6 +12123,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -8900,7 +12137,10 @@ def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -8908,7 +12148,7 @@ def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -9012,7 +12252,13 @@ def begin_update( "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def begin_update( self, @@ -9093,7 +12339,13 @@ def get_long_running_output(pipeline_response): params_added_on={ "2024-09-01-preview": ["api_version", "subscription_id", "resource_group_name", "schema_registry_name"] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def _delete_initial(self, resource_group_name: str, schema_registry_name: str, **kwargs: Any) -> Iterator[bytes]: error_map: MutableMapping = { @@ -9122,6 +12374,7 @@ def _delete_initial(self, resource_group_name: str, schema_registry_name: str, * } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -9135,7 +12388,10 @@ def _delete_initial(self, resource_group_name: str, schema_registry_name: str, * except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -9143,7 +12399,7 @@ def _delete_initial(self, resource_group_name: str, schema_registry_name: str, * response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -9156,7 +12412,13 @@ def _delete_initial(self, resource_group_name: str, schema_registry_name: str, * params_added_on={ "2024-09-01-preview": ["api_version", "subscription_id", "resource_group_name", "schema_registry_name"] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def begin_delete(self, resource_group_name: str, schema_registry_name: str, **kwargs: Any) -> LROPoller[None]: """Delete a SchemaRegistry. @@ -9218,7 +12480,13 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- @api_version_validation( method_added_on="2024-09-01-preview", params_added_on={"2024-09-01-preview": ["api_version", "subscription_id", "resource_group_name", "accept"]}, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> ItemPaged["_models.SchemaRegistry"]: """List SchemaRegistry resources by resource group. @@ -9284,7 +12552,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.SchemaRegistry], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.SchemaRegistry], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -9300,7 +12571,10 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -9311,7 +12585,13 @@ def get_next(next_link=None): @api_version_validation( method_added_on="2024-09-01-preview", params_added_on={"2024-09-01-preview": ["api_version", "subscription_id", "accept"]}, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.SchemaRegistry"]: """List SchemaRegistry resources by subscription ID. @@ -9373,7 +12653,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.SchemaRegistry], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.SchemaRegistry], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -9389,7 +12672,10 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -9427,7 +12713,13 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def get( self, resource_group_name: str, schema_registry_name: str, schema_name: str, **kwargs: Any @@ -9472,6 +12764,7 @@ def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -9486,11 +12779,14 @@ def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.Schema, response.json()) @@ -9603,7 +12899,13 @@ def create_or_replace( "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def create_or_replace( self, @@ -9666,6 +12968,7 @@ def create_or_replace( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -9680,11 +12983,14 @@ def create_or_replace( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.Schema, response.json()) @@ -9704,7 +13010,7 @@ def create_or_replace( "schema_name", ] }, - api_versions_list=["2025-10-01"], + api_versions_list=["2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _delete_initial( self, resource_group_name: str, schema_registry_name: str, schema_name: str, **kwargs: Any @@ -9736,6 +13042,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -9749,7 +13056,10 @@ def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -9757,7 +13067,7 @@ def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -9776,7 +13086,7 @@ def _delete_initial( "schema_name", ] }, - api_versions_list=["2025-10-01"], + api_versions_list=["2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_delete( self, resource_group_name: str, schema_registry_name: str, schema_name: str, **kwargs: Any @@ -9851,7 +13161,13 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def list_by_schema_registry( self, resource_group_name: str, schema_registry_name: str, **kwargs: Any @@ -9922,7 +13238,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Schema], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Schema], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -9938,7 +13257,10 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -9977,7 +13299,13 @@ def __init__(self, *args, **kwargs) -> None: "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def get( self, @@ -10030,6 +13358,7 @@ def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -10044,11 +13373,14 @@ def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.SchemaVersion, response.json()) @@ -10171,7 +13503,13 @@ def create_or_replace( "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def create_or_replace( self, @@ -10238,6 +13576,7 @@ def create_or_replace( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -10252,11 +13591,14 @@ def create_or_replace( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.SchemaVersion, response.json()) @@ -10277,7 +13619,7 @@ def create_or_replace( "schema_version_name", ] }, - api_versions_list=["2025-10-01"], + api_versions_list=["2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def _delete_initial( self, @@ -10315,6 +13657,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -10328,7 +13671,10 @@ def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -10336,7 +13682,7 @@ def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -10356,7 +13702,7 @@ def _delete_initial( "schema_version_name", ] }, - api_versions_list=["2025-10-01"], + api_versions_list=["2025-10-01", "2025-11-01-preview", "2026-03-01-preview"], ) def begin_delete( self, @@ -10440,7 +13786,13 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- "accept", ] }, - api_versions_list=["2024-09-01-preview", "2025-07-01-preview", "2025-10-01"], + api_versions_list=[ + "2024-09-01-preview", + "2025-07-01-preview", + "2025-10-01", + "2025-11-01-preview", + "2026-03-01-preview", + ], ) def list_by_schema( self, resource_group_name: str, schema_registry_name: str, schema_name: str, **kwargs: Any @@ -10514,7 +13866,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.SchemaVersion], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.SchemaVersion], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -10530,7 +13885,10 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_endpoint_profile.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_endpoint_profile.py index d628d17aea50..bcd9bde3747c 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_endpoint_profile.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_endpoint_profile.py @@ -51,6 +51,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_AssetEndpointProfile.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_AssetEndpointProfile.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_endpoint_profile_with_discovered_aep_ref.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_endpoint_profile_with_discovered_aep_ref.py index ab90ae36b920..5d6055a7b4e0 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_endpoint_profile_with_discovered_aep_ref.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_endpoint_profile_with_discovered_aep_ref.py @@ -52,6 +52,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_AssetEndpointProfile_With_DiscoveredAepRef.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_AssetEndpointProfile_With_DiscoveredAepRef.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_with_discovered_asset_ref.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_with_discovered_asset_ref.py index d9bae9ddd09c..8ec70e5c30aa 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_with_discovered_asset_ref.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_with_discovered_asset_ref.py @@ -101,6 +101,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_Asset_With_DiscoveredAssetRef.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_Asset_With_DiscoveredAssetRef.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_with_external_asset_id.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_with_external_asset_id.py index 246eacd5e70c..02e5bb30f0fa 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_with_external_asset_id.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_with_external_asset_id.py @@ -100,6 +100,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_Asset_With_ExternalAssetId.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_Asset_With_ExternalAssetId.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_without_display_name.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_without_display_name.py index 6908024ffc01..24ce782b0385 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_without_display_name.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_without_display_name.py @@ -99,6 +99,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_Asset_Without_DisplayName.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_Asset_Without_DisplayName.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_without_external_asset_id.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_without_external_asset_id.py index 5b305e6264ea..4b23905a57bf 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_without_external_asset_id.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_asset_without_external_asset_id.py @@ -99,6 +99,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_Asset_Without_ExternalAssetId.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_Asset_Without_ExternalAssetId.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_credentials.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_credentials.py new file mode 100644 index 000000000000..a58df2e8983f --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_credentials.py @@ -0,0 +1,43 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python create_or_replace_credentials.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.credentials.begin_create_or_update( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + resource={"location": "East US 2", "properties": {}, "tags": {"key7121": "mtdjqipusqaqhdvekrknyjeo"}}, + ).result() + print(response) + + +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_Credentials.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_asset.py index a167aa96d4e5..c9566df7d275 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_asset.py @@ -87,37 +87,6 @@ def main(): "displayName": "AssetDisplayName", "documentationUri": "https://www.example.com/manual", "enabled": True, - "eventGroups": [ - { - "events": [ - { - "dataSource": "nsu=http://microsoft.com/Opc/OpcPlc/;s=FastUInt5", - "destinations": [ - { - "configuration": { - "qos": "Qos0", - "retain": "Keep", - "topic": "/contoso/testEvent1", - "ttl": 7200, - }, - "target": "Mqtt", - } - ], - "eventConfiguration": '{"publishingInterval":7,"samplingInterval":1,"queueSize":8}', - "name": "event1", - "typeRef": "event1Ref", - }, - { - "dataSource": "nsu=http://microsoft.com/Opc/OpcPlc/;s=FastUInt8", - "destinations": [{"configuration": {"path": "/tmp/event2"}, "target": "Storage"}], - "eventConfiguration": '{"publishingInterval":7,"samplingInterval":1,"queueSize":8}', - "name": "event2", - "typeRef": "event2Ref", - }, - ], - "name": "default", - } - ], "externalAssetId": "8ZBA6LRHU0A458969", "hardwareRevision": "1.0", "managementGroups": [ @@ -186,6 +155,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_NamespaceAsset.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_NamespaceAsset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device.py index 76cd6f308b90..37f9a933205c 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device.py @@ -42,20 +42,19 @@ def main(): "endpoints": { "outbound": { "assigned": { - "eventGridEndpoint": { - "address": "https://myeventgridtopic.westeurope-1.eventgrid.azure.net/api/events", - "endpointType": "Microsoft.Devices/IoTHubs", + "iothubEndpoint": { + "address": "https://iothub-for-dps.azure-devices.net", + "endpointType": "Microsoft.Devices/IotHubs", } } } }, - "externalDeviceId": "adr-smart-device3-7a848b15-af47-40a7-8c06-a3f43314d44f", }, }, ).result() print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_NamespaceDevice.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_NamespaceDevice.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_anonymous.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_anonymous.py index 2c69e6a41208..a35ae7e596f0 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_anonymous.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_anonymous.py @@ -49,7 +49,7 @@ def main(): "theOnlyOPCUABroker": { "address": "opc.tcp://192.168.86.23:51211/UA/SampleServer", "authentication": {"method": "Anonymous"}, - "endpointType": "microsoft.opcua", + "endpointType": "microsoft.opcua:v1", "version": "2", } } @@ -61,6 +61,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_NamespaceDevice_Edge_Anonymous.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_NamespaceDevice_Edge_Anonymous.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_username_pass.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_username_pass.py index f652cfee0c75..2999b0f234b8 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_username_pass.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_username_pass.py @@ -55,7 +55,7 @@ def main(): "usernameSecretName": "user-ref", }, }, - "endpointType": "microsoft.opcua", + "endpointType": "microsoft.opcua:v1", "version": "2", } } @@ -67,6 +67,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_NamespaceDevice_Edge_UsernamePass.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_NamespaceDevice_Edge_UsernamePass.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_x509.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_x509.py index f18e413a5537..de916909343a 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_x509.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_device_edge_x509.py @@ -50,11 +50,7 @@ def main(): "address": "opc.tcp://192.168.86.23:51211/UA/SampleServer", "authentication": { "method": "Certificate", - "x509Credentials": { - "certificateSecretName": "cert-secret", - "intermediateCertificatesSecretName": "intermediate-certs-secret", - "keySecretName": "key-secret", - }, + "x509Credentials": {"certificateSecretName": "cert-secret"}, }, "endpointType": "microsoft.opcua", "version": "2", @@ -78,6 +74,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_NamespaceDevice_Edge_x509.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_NamespaceDevice_Edge_x509.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_discovered_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_discovered_asset.py index 7260f24eedc2..947209a04f05 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_discovered_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_discovered_asset.py @@ -87,39 +87,6 @@ def main(): "deviceRef": {"deviceName": "myDevice", "endpointName": "opcuaendpointname"}, "discoveryId": "11111111-1111-1111-1111-111111111111", "documentationUri": "https://www.example.com/manual", - "eventGroups": [ - { - "events": [ - { - "dataSource": "nsu=http://microsoft.com/Opc/OpcPlc/;s=FastUInt3", - "destinations": [ - { - "configuration": { - "qos": "Qos0", - "retain": "Keep", - "topic": "/contoso/testEvent1", - "ttl": 7200, - }, - "target": "Mqtt", - } - ], - "eventConfiguration": '{"publishingInterval":7,"samplingInterval":1,"queueSize":8}', - "lastUpdatedOn": "2024-04-09T14:20:00.52Z", - "name": "event1", - "typeRef": "event1Ref", - }, - { - "dataSource": "nsu=http://microsoft.com/Opc/OpcPlc/;s=FastUInt4", - "destinations": [{"configuration": {"path": "/tmp/event2"}, "target": "Storage"}], - "eventConfiguration": '{"publishingInterval":7,"samplingInterval":8,"queueSize":4}', - "lastUpdatedOn": "2024-04-09T14:20:00.52Z", - "name": "event2", - "typeRef": "event2Ref", - }, - ], - "name": "default", - } - ], "hardwareRevision": "1.0", "managementGroups": [ { @@ -193,6 +160,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_NamespaceDiscoveredAsset.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_NamespaceDiscoveredAsset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_discovered_device.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_discovered_device.py index 747bb9574fe3..08d6a108b0af 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_discovered_device.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_discovered_device.py @@ -46,9 +46,9 @@ def main(): "endpoints": { "outbound": { "assigned": { - "eventGridEndpoint": { - "address": "https://myeventgridtopic.westeurope-1.eventgrid.azure.net/api/events", - "endpointType": "Microsoft.Devices/IoTHubs", + "iothubEndpoint": { + "address": "https://iothub-for-dps.azure-devices.net", + "endpointType": "Microsoft.Devices/IotHubs", } } } @@ -61,6 +61,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_NamespaceDiscoveredDevice.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_NamespaceDiscoveredDevice.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_with_endpoints.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_with_endpoints.py index c43e4a210cba..da32ef4abb83 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_with_endpoints.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_namespace_with_endpoints.py @@ -34,18 +34,17 @@ def main(): resource_group_name="myResourceGroup", namespace_name="adr-namespace-gbk0925-n01", resource={ - "identity": {"type": "SystemAssigned"}, "location": "North Europe", "properties": { "messaging": { "endpoints": { - "anotherEventGridEndpoint": { - "address": "https://myeventgridtopic2.westeurope-1.eventgrid.azure.net/api/events", - "endpointType": "Microsoft.Devices/IoTHubs", + "anotherIothubEndpoint": { + "address": "https://iothub-for-dps-2.azure-devices.net", + "endpointType": "Microsoft.Devices/IotHubs", }, - "eventGridEndpoint": { - "address": "https://myeventgridtopic.westeurope-1.eventgrid.azure.net/api/events", - "endpointType": "Microsoft.Devices/IoTHubs", + "iothubEndpoint": { + "address": "https://iothub-for-dps.azure-devices.net", + "endpointType": "Microsoft.Devices/IotHubs", }, } } @@ -55,6 +54,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_Namespace_With_Endpoints.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_Namespace_With_Endpoints.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_policies.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_policies.py new file mode 100644 index 000000000000..6486cb545f9a --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_policies.py @@ -0,0 +1,51 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python create_or_replace_policies.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.policies.begin_create_or_update( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + policy_name="mypolicy", + resource={ + "properties": { + "certificate": { + "certificateAuthorityConfiguration": {"bringYourOwnRoot": {"enabled": True}, "keyType": "ECC"}, + "leafCertificateConfiguration": {"validityPeriodInDays": 10}, + } + } + }, + ).result() + print(response) + + +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_Policies.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema.py index f01e74fbc6f8..ae8d7a2436d9 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema.py @@ -47,6 +47,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_Schema.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_Schema.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema_registry.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema_registry.py index e477895be2ef..36f16f5a2179 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema_registry.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema_registry.py @@ -47,6 +47,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_SchemaRegistry.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_SchemaRegistry.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema_version.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema_version.py index 29826b68b5ee..d87d3422c16f 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema_version.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/create_or_replace_schema_version.py @@ -46,6 +46,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/CreateOrReplace_SchemaVersion.json +# x-ms-original-file: 2026-03-01-preview/CreateOrReplace_SchemaVersion.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/credentials_synchronize.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/credentials_synchronize.py new file mode 100644 index 000000000000..788fa05aba34 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/credentials_synchronize.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python credentials_synchronize.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + client.credentials.begin_synchronize( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + ).result() + + +# x-ms-original-file: 2026-03-01-preview/Credentials_Synchronize.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_asset.py index 06e7b984210d..7a4050330279 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_asset.py @@ -36,6 +36,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Delete_Asset.json +# x-ms-original-file: 2026-03-01-preview/Delete_Asset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_asset_endpoint_profile.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_asset_endpoint_profile.py index 331c23c2b3e6..068951db0274 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_asset_endpoint_profile.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_asset_endpoint_profile.py @@ -36,6 +36,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Delete_AssetEndpointProfile.json +# x-ms-original-file: 2026-03-01-preview/Delete_AssetEndpointProfile.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_credentials.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_credentials.py new file mode 100644 index 000000000000..503a76c8f9c2 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_credentials.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python delete_credentials.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + client.credentials.begin_delete( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + ).result() + + +# x-ms-original-file: 2026-03-01-preview/Delete_Credentials.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace.py index 3fa4a849f246..ae1a34c6ed46 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace.py @@ -36,6 +36,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Delete_Namespace.json +# x-ms-original-file: 2026-03-01-preview/Delete_Namespace.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_asset.py index 5bb9f05e34d0..39a93b5249e8 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_asset.py @@ -37,6 +37,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Delete_NamespaceAsset.json +# x-ms-original-file: 2026-03-01-preview/Delete_NamespaceAsset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_device.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_device.py index fd817bff16f9..bf09ab598e34 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_device.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_device.py @@ -37,6 +37,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Delete_NamespaceDevice.json +# x-ms-original-file: 2026-03-01-preview/Delete_NamespaceDevice.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_discovered_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_discovered_asset.py index db96b890f00c..bdc3e39f4f18 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_discovered_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_discovered_asset.py @@ -37,6 +37,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Delete_NamespaceDiscoveredAsset.json +# x-ms-original-file: 2026-03-01-preview/Delete_NamespaceDiscoveredAsset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_discovered_device.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_discovered_device.py index a0be20106b55..4649e186a61c 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_discovered_device.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_namespace_discovered_device.py @@ -37,6 +37,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Delete_NamespaceDiscoveredDevice.json +# x-ms-original-file: 2026-03-01-preview/Delete_NamespaceDiscoveredDevice.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_policies.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_policies.py new file mode 100644 index 000000000000..7daf4013955f --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_policies.py @@ -0,0 +1,42 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python delete_policies.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + client.policies.begin_delete( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + policy_name="mypolicy", + ).result() + + +# x-ms-original-file: 2026-03-01-preview/Delete_Policies.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema.py index b6edabe658e1..78b6043b5207 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema.py @@ -37,6 +37,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Delete_Schema.json +# x-ms-original-file: 2026-03-01-preview/Delete_Schema.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema_registry.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema_registry.py index fcfeb9ad2337..034566314f63 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema_registry.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema_registry.py @@ -36,6 +36,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Delete_SchemaRegistry.json +# x-ms-original-file: 2026-03-01-preview/Delete_SchemaRegistry.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema_version.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema_version.py index 72db8be7db8f..c7bb77f1494f 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema_version.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/delete_schema_version.py @@ -38,6 +38,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Delete_SchemaVersion.json +# x-ms-original-file: 2026-03-01-preview/Delete_SchemaVersion.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset.py index 01b8bee4e813..a80ae204ce30 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset.py @@ -37,6 +37,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_Asset.json +# x-ms-original-file: 2026-03-01-preview/Get_Asset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_endpoint_profile.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_endpoint_profile.py index b95510ea1131..2a00e0cc604a 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_endpoint_profile.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_endpoint_profile.py @@ -37,6 +37,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_AssetEndpointProfile.json +# x-ms-original-file: 2026-03-01-preview/Get_AssetEndpointProfile.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_endpoint_profile_with_sync_status.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_endpoint_profile_with_sync_status.py index 73fe22d9230c..fbcd97a8bd94 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_endpoint_profile_with_sync_status.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_endpoint_profile_with_sync_status.py @@ -37,6 +37,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_AssetEndpointProfile_With_SyncStatus.json +# x-ms-original-file: 2026-03-01-preview/Get_AssetEndpointProfile_With_SyncStatus.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_with_sync_status.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_with_sync_status.py index 6d854a8631c1..f854251ae2a0 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_with_sync_status.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_asset_with_sync_status.py @@ -37,6 +37,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_Asset_With_SyncStatus.json +# x-ms-original-file: 2026-03-01-preview/Get_Asset_With_SyncStatus.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_billing_container.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_billing_container.py index c302757d28d4..585e4a68cd16 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_billing_container.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_billing_container.py @@ -36,6 +36,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_BillingContainer.json +# x-ms-original-file: 2026-03-01-preview/Get_BillingContainer.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_credentials.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_credentials.py new file mode 100644 index 000000000000..0f244c01f19f --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_credentials.py @@ -0,0 +1,42 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python get_credentials.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.credentials.get( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + ) + print(response) + + +# x-ms-original-file: 2026-03-01-preview/Get_Credentials.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace.py index 0b11a07668dc..dd68466513ff 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace.py @@ -37,6 +37,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_Namespace.json +# x-ms-original-file: 2026-03-01-preview/Get_Namespace.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_asset.py index 33dbba11de9f..07cfbb650139 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_asset.py @@ -38,6 +38,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_NamespaceAsset.json +# x-ms-original-file: 2026-03-01-preview/Get_NamespaceAsset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_device.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_device.py index 653078b1f76b..33594e6917f7 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_device.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_device.py @@ -38,6 +38,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_NamespaceDevice.json +# x-ms-original-file: 2026-03-01-preview/Get_NamespaceDevice.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_device_with_endpoint_error_status.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_device_with_endpoint_error_status.py index 597b528674ba..bf72cc7988a3 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_device_with_endpoint_error_status.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_device_with_endpoint_error_status.py @@ -38,6 +38,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_NamespaceDeviceWithEndpointErrorStatus.json +# x-ms-original-file: 2026-03-01-preview/Get_NamespaceDeviceWithEndpointErrorStatus.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_discovered_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_discovered_asset.py index f2543a049a94..fc092c18763d 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_discovered_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_discovered_asset.py @@ -38,6 +38,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_NamespaceDiscoveredAsset.json +# x-ms-original-file: 2026-03-01-preview/Get_NamespaceDiscoveredAsset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_discovered_device.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_discovered_device.py index b3d85fbfe4af..2ca9b0094161 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_discovered_device.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_namespace_discovered_device.py @@ -38,6 +38,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_NamespaceDiscoveredDevice.json +# x-ms-original-file: 2026-03-01-preview/Get_NamespaceDiscoveredDevice.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_operation_status.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_operation_status.py index 6205cce81bf4..272208d19f96 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_operation_status.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_operation_status.py @@ -37,6 +37,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_OperationStatus.json +# x-ms-original-file: 2026-03-01-preview/Get_OperationStatus.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_policies.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_policies.py new file mode 100644 index 000000000000..c16998a96811 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_policies.py @@ -0,0 +1,43 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python get_policies.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.policies.get( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + policy_name="myPolicy", + ) + print(response) + + +# x-ms-original-file: 2026-03-01-preview/Get_Policies.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema.py index 8aeea133c908..34fe5d80c859 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema.py @@ -38,6 +38,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_Schema.json +# x-ms-original-file: 2026-03-01-preview/Get_Schema.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema_registry.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema_registry.py index 13cd18052ef2..dfd311f8accd 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema_registry.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema_registry.py @@ -37,6 +37,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_SchemaRegistry.json +# x-ms-original-file: 2026-03-01-preview/Get_SchemaRegistry.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema_version.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema_version.py index b19aad25cd2c..99e065fa81a2 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema_version.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/get_schema_version.py @@ -39,6 +39,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Get_SchemaVersion.json +# x-ms-original-file: 2026-03-01-preview/Get_SchemaVersion.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_asset_endpoint_profiles_by_resource_group.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_asset_endpoint_profiles_by_resource_group.py index ae75efa762af..210caa2b27ab 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_asset_endpoint_profiles_by_resource_group.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_asset_endpoint_profiles_by_resource_group.py @@ -37,6 +37,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_AssetEndpointProfiles_ByResourceGroup.json +# x-ms-original-file: 2026-03-01-preview/List_AssetEndpointProfiles_ByResourceGroup.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_asset_endpoint_profiles_by_subscription.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_asset_endpoint_profiles_by_subscription.py index d0d770450be1..f8104600a311 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_asset_endpoint_profiles_by_subscription.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_asset_endpoint_profiles_by_subscription.py @@ -35,6 +35,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_AssetEndpointProfiles_BySubscription.json +# x-ms-original-file: 2026-03-01-preview/List_AssetEndpointProfiles_BySubscription.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_assets_by_resource_group.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_assets_by_resource_group.py index da2092f7c3c7..e55da2fac1f1 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_assets_by_resource_group.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_assets_by_resource_group.py @@ -37,6 +37,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_Assets_ByResourceGroup.json +# x-ms-original-file: 2026-03-01-preview/List_Assets_ByResourceGroup.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_assets_by_subscription.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_assets_by_subscription.py index 57f500f4d70c..1e547654b361 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_assets_by_subscription.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_assets_by_subscription.py @@ -35,6 +35,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_Assets_BySubscription.json +# x-ms-original-file: 2026-03-01-preview/List_Assets_BySubscription.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_billing_containers_by_subscription.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_billing_containers_by_subscription.py index c946d3510b93..bdaee16abcb8 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_billing_containers_by_subscription.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_billing_containers_by_subscription.py @@ -35,6 +35,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_BillingContainers_BySubscription.json +# x-ms-original-file: 2026-03-01-preview/List_BillingContainers_BySubscription.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_credentials_by_resource_group.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_credentials_by_resource_group.py new file mode 100644 index 000000000000..63b856223cc8 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_credentials_by_resource_group.py @@ -0,0 +1,43 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python list_credentials_by_resource_group.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.credentials.list_by_resource_group( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + ) + for item in response: + print(item) + + +# x-ms-original-file: 2026-03-01-preview/List_Credentials_ByResourceGroup.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_assets_by_resource_group.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_assets_by_resource_group.py index 24e5b5b2d6c6..66cca1bdb856 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_assets_by_resource_group.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_assets_by_resource_group.py @@ -38,6 +38,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_NamespaceAssets_ByResourceGroup.json +# x-ms-original-file: 2026-03-01-preview/List_NamespaceAssets_ByResourceGroup.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_by_resource_group.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_by_resource_group.py index 35e507b6b98b..87b77d253429 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_by_resource_group.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_by_resource_group.py @@ -37,6 +37,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_Namespace_ByResourceGroup.json +# x-ms-original-file: 2026-03-01-preview/List_Namespace_ByResourceGroup.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_by_subscription.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_by_subscription.py index ce6e4d0d62f6..0c98fbbec48b 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_by_subscription.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_by_subscription.py @@ -35,6 +35,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_Namespace_BySubscription.json +# x-ms-original-file: 2026-03-01-preview/List_Namespace_BySubscription.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_devices_by_resource_group.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_devices_by_resource_group.py index db898f72c7cc..af191bcd0bb4 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_devices_by_resource_group.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_devices_by_resource_group.py @@ -38,6 +38,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_NamespaceDevices_ByResourceGroup.json +# x-ms-original-file: 2026-03-01-preview/List_NamespaceDevices_ByResourceGroup.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_discovered_assets_by_resource_group.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_discovered_assets_by_resource_group.py index fc2701c5c9b5..5a7eb115163c 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_discovered_assets_by_resource_group.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_discovered_assets_by_resource_group.py @@ -38,6 +38,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_NamespaceDiscoveredAssets_ByResourceGroup.json +# x-ms-original-file: 2026-03-01-preview/List_NamespaceDiscoveredAssets_ByResourceGroup.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_discovered_devices_by_resource_group.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_discovered_devices_by_resource_group.py index 59f26c822c03..ce2115965e7a 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_discovered_devices_by_resource_group.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_namespace_discovered_devices_by_resource_group.py @@ -38,6 +38,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_NamespaceDiscoveredDevices_ByResourceGroup.json +# x-ms-original-file: 2026-03-01-preview/List_NamespaceDiscoveredDevices_ByResourceGroup.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_operations.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_operations.py index 37e9f14f3b7f..c0352f2a5c0a 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_operations.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_operations.py @@ -35,6 +35,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_Operations.json +# x-ms-original-file: 2026-03-01-preview/List_Operations.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_policies_by_resource_group.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_policies_by_resource_group.py new file mode 100644 index 000000000000..0a31083341de --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_policies_by_resource_group.py @@ -0,0 +1,43 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python list_policies_by_resource_group.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.policies.list_by_resource_group( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + ) + for item in response: + print(item) + + +# x-ms-original-file: 2026-03-01-preview/List_Policies_ByResourceGroup.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_registries_by_resource_group.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_registries_by_resource_group.py index 515d1cbb0d92..a7dd44f57565 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_registries_by_resource_group.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_registries_by_resource_group.py @@ -37,6 +37,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_SchemaRegistries_ByResourceGroup.json +# x-ms-original-file: 2026-03-01-preview/List_SchemaRegistries_ByResourceGroup.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_registries_by_subscription.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_registries_by_subscription.py index 47898dbea211..ee8af7cc8d8f 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_registries_by_subscription.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_registries_by_subscription.py @@ -35,6 +35,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_SchemaRegistries_BySubscription.json +# x-ms-original-file: 2026-03-01-preview/List_SchemaRegistries_BySubscription.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_versions_by_schema.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_versions_by_schema.py index c647c11b76ba..fb17e3a5fc4c 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_versions_by_schema.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schema_versions_by_schema.py @@ -39,6 +39,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_SchemaVersions_BySchema.json +# x-ms-original-file: 2026-03-01-preview/List_SchemaVersions_BySchema.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schemas_by_schema_registry.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schemas_by_schema_registry.py index 8faf3af45309..dd0aea7be7a4 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schemas_by_schema_registry.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/list_schemas_by_schema_registry.py @@ -38,6 +38,6 @@ def main(): print(item) -# x-ms-original-file: 2025-10-01/List_Schemas_BySchemaRegistry.json +# x-ms-original-file: 2026-03-01-preview/List_Schemas_BySchemaRegistry.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/migrate_assets_namespace.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/migrate_assets_namespace.py index dc90de1d4dad..4f8eba566395 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/migrate_assets_namespace.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/migrate_assets_namespace.py @@ -45,6 +45,6 @@ def main(): ).result() -# x-ms-original-file: 2025-10-01/Migrate_Assets_Namespace.json +# x-ms-original-file: 2026-03-01-preview/Migrate_Assets_Namespace.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/namespace_devices_revoke.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/namespace_devices_revoke.py new file mode 100644 index 000000000000..837f7e1147da --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/namespace_devices_revoke.py @@ -0,0 +1,43 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python namespace_devices_revoke.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + client.namespace_devices.begin_revoke( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + device_name="device1", + body={"disable": True}, + ).result() + + +# x-ms-original-file: 2026-03-01-preview/NamespaceDevices_Revoke.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/namespace_devices_revoke_failure.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/namespace_devices_revoke_failure.py new file mode 100644 index 000000000000..b8f4cae1ee32 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/namespace_devices_revoke_failure.py @@ -0,0 +1,43 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python namespace_devices_revoke_failure.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + client.namespace_devices.begin_revoke( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + device_name="device1", + body={"disable": True}, + ).result() + + +# x-ms-original-file: 2026-03-01-preview/NamespaceDevices_RevokeFailure.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/policies_activate_bring_your_own_root.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/policies_activate_bring_your_own_root.py new file mode 100644 index 000000000000..d535f437d8d0 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/policies_activate_bring_your_own_root.py @@ -0,0 +1,46 @@ +# pylint: disable=line-too-long,useless-suppression +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python policies_activate_bring_your_own_root.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + client.policies.begin_activate_bring_your_own_root( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + policy_name="mypolicy", + body={ + "certificateChain": "-----BEGIN CERTIFICATE-----\nMIIDXTCCAkWgAwIBAgIJAKL0UG+mRkmWMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV\nBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX\naWRnaXRzIFB0eSBMdGQwHhcNMjQwMTAxMDAwMDAwWhcNMjUwMTAxMDAwMDAwWjBF\nMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50\nZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\nCgKCAQEAw...\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIDXTCCAkWgAwIBAgIJAKL0UG+mRkmXMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV\nBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX\naWRnaXRzIFB0eSBMdGQwHhcNMjQwMTAxMDAwMDAwWhcNMjUwMTAxMDAwMDAwWjBF\nMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50\nZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\nCgKCAQEAx...\n-----END CERTIFICATE-----" + }, + ).result() + + +# x-ms-original-file: 2026-03-01-preview/Policies_ActivateBringYourOwnRoot.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/policies_revoke_issuer.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/policies_revoke_issuer.py new file mode 100644 index 000000000000..de8f8b448ee9 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/policies_revoke_issuer.py @@ -0,0 +1,42 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python policies_revoke_issuer.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + client.policies.begin_revoke_issuer( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + policy_name="mypolicy", + ).result() + + +# x-ms-original-file: 2026-03-01-preview/Policies_RevokeIssuer.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_asset.py index f85ee46c16d2..30e70323193d 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_asset.py @@ -38,6 +38,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Update_Asset.json +# x-ms-original-file: 2026-03-01-preview/Update_Asset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_asset_endpoint_profile.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_asset_endpoint_profile.py index e77ec4e9e1b5..1985cd07e8b8 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_asset_endpoint_profile.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_asset_endpoint_profile.py @@ -38,6 +38,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Update_AssetEndpointProfile.json +# x-ms-original-file: 2026-03-01-preview/Update_AssetEndpointProfile.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_credentials.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_credentials.py new file mode 100644 index 000000000000..c898190f2596 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_credentials.py @@ -0,0 +1,43 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python update_credentials.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.credentials.begin_update( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + properties={"tags": {"key9580": "tpbwnljiiwtlyuiayalpkxyfwnrz"}}, + ).result() + print(response) + + +# x-ms-original-file: 2026-03-01-preview/Update_Credentials.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_asset.py index 4bde130251bf..6b707f184a1c 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_asset.py @@ -45,6 +45,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Update_NamespaceAsset.json +# x-ms-original-file: 2026-03-01-preview/Update_NamespaceAsset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_device.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_device.py index bb3b8f5bd05e..97b066aa6178 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_device.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_device.py @@ -41,9 +41,9 @@ def main(): "endpoints": { "outbound": { "assigned": { - "eventGridEndpoint": { - "address": "https://myeventgridtopic.westeurope-1.eventgrid.azure.net/api/events", - "endpointType": "Microsoft.Devices/IoTHubs", + "iothubEndpoint": { + "address": "https://iothub-for-dps.azure-devices.net", + "endpointType": "Microsoft.Devices/IotHubs", } } } @@ -54,6 +54,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Update_NamespaceDevice.json +# x-ms-original-file: 2026-03-01-preview/Update_NamespaceDevice.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_discovered_asset.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_discovered_asset.py index acfb11c56d62..bbe5542c00eb 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_discovered_asset.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_discovered_asset.py @@ -39,6 +39,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Update_NamespaceDiscoveredAsset.json +# x-ms-original-file: 2026-03-01-preview/Update_NamespaceDiscoveredAsset.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_discovered_device.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_discovered_device.py index 01d1ad1c083f..c080bf86a0bd 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_discovered_device.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_discovered_device.py @@ -39,9 +39,9 @@ def main(): "endpoints": { "outbound": { "assigned": { - "newEventGridEndpoint": { - "address": "https://myneweventgridtopic.westeurope-1.eventgrid.azure.net/api/events", - "endpointType": "Microsoft.Devices/IoTHubs", + "newIothubEndpoint": { + "address": "https://iothub-for-dps.azure-devices.net", + "endpointType": "Microsoft.Devices/IotHubs", } } } @@ -52,6 +52,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Update_NamespaceDiscoveredDevice.json +# x-ms-original-file: 2026-03-01-preview/Update_NamespaceDiscoveredDevice.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_endpoints.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_endpoints.py index b9a13fbce64f..7c3348dc47a9 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_endpoints.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_namespace_endpoints.py @@ -37,9 +37,9 @@ def main(): "properties": { "messaging": { "endpoints": { - "eventGridEndpoint": { - "address": "https://myeventgridtopic.westeurope-1.eventgrid.azure.net/api/events", - "endpointType": "Microsoft.Devices/IoTHubs", + "iothubEndpoint": { + "address": "https://iothub-for-dps.azure-devices.net", + "endpointType": "Microsoft.Devices/IotHubs", } } } @@ -49,6 +49,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Update_Namespace_Endpoints.json +# x-ms-original-file: 2026-03-01-preview/Update_Namespace_Endpoints.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_policies.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_policies.py new file mode 100644 index 000000000000..ba499507d86c --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_policies.py @@ -0,0 +1,51 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-deviceregistry +# USAGE + python update_policies.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = DeviceRegistryMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.policies.begin_update( + resource_group_name="rgdeviceregistry", + namespace_name="mynamespace", + policy_name="mypolicy", + properties={ + "properties": { + "certificate": { + "certificateAuthorityConfiguration": {}, + "leafCertificateConfiguration": {"validityPeriodInDays": 10}, + } + } + }, + ).result() + print(response) + + +# x-ms-original-file: 2026-03-01-preview/Update_Policies.json +if __name__ == "__main__": + main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_schema_registry.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_schema_registry.py index 8a5b9f956106..ca31c7549e11 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_schema_registry.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_samples/update_schema_registry.py @@ -44,6 +44,6 @@ def main(): print(response) -# x-ms-original-file: 2025-10-01/Update_SchemaRegistry.json +# x-ms-original-file: 2026-03-01-preview/Update_SchemaRegistry.json if __name__ == "__main__": main() diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_credentials_operations.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_credentials_operations.py new file mode 100644 index 000000000000..39f19433a37c --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_credentials_operations.py @@ -0,0 +1,102 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestDeviceRegistryMgmtCredentialsOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(DeviceRegistryMgmtClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_credentials_get(self, resource_group): + response = self.client.credentials.get( + resource_group_name=resource_group.name, + namespace_name="str", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_credentials_begin_create_or_update(self, resource_group): + response = self.client.credentials.begin_create_or_update( + resource_group_name=resource_group.name, + namespace_name="str", + resource={ + "location": "str", + "id": "str", + "name": "str", + "properties": {"provisioningState": "str"}, + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "tags": {"str": "str"}, + "type": "str", + }, + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_credentials_begin_delete(self, resource_group): + response = self.client.credentials.begin_delete( + resource_group_name=resource_group.name, + namespace_name="str", + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_credentials_begin_update(self, resource_group): + response = self.client.credentials.begin_update( + resource_group_name=resource_group.name, + namespace_name="str", + properties={"tags": {"str": "str"}}, + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_credentials_list_by_resource_group(self, resource_group): + response = self.client.credentials.list_by_resource_group( + resource_group_name=resource_group.name, + namespace_name="str", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_credentials_begin_synchronize(self, resource_group): + response = self.client.credentials.begin_synchronize( + resource_group_name=resource_group.name, + namespace_name="str", + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_credentials_operations_async.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_credentials_operations_async.py new file mode 100644 index 000000000000..999a9782f5c0 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_credentials_operations_async.py @@ -0,0 +1,111 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.deviceregistry.aio import DeviceRegistryMgmtClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestDeviceRegistryMgmtCredentialsOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(DeviceRegistryMgmtClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_credentials_get(self, resource_group): + response = await self.client.credentials.get( + resource_group_name=resource_group.name, + namespace_name="str", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_credentials_begin_create_or_update(self, resource_group): + response = await ( + await self.client.credentials.begin_create_or_update( + resource_group_name=resource_group.name, + namespace_name="str", + resource={ + "location": "str", + "id": "str", + "name": "str", + "properties": {"provisioningState": "str"}, + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "tags": {"str": "str"}, + "type": "str", + }, + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_credentials_begin_delete(self, resource_group): + response = await ( + await self.client.credentials.begin_delete( + resource_group_name=resource_group.name, + namespace_name="str", + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_credentials_begin_update(self, resource_group): + response = await ( + await self.client.credentials.begin_update( + resource_group_name=resource_group.name, + namespace_name="str", + properties={"tags": {"str": "str"}}, + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_credentials_list_by_resource_group(self, resource_group): + response = self.client.credentials.list_by_resource_group( + resource_group_name=resource_group.name, + namespace_name="str", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_credentials_begin_synchronize(self, resource_group): + response = await ( + await self.client.credentials.begin_synchronize( + resource_group_name=resource_group.name, + namespace_name="str", + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_namespace_devices_operations.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_namespace_devices_operations.py index a898fb994dfd..38579538ea50 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_namespace_devices_operations.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_namespace_devices_operations.py @@ -80,6 +80,7 @@ def test_namespace_devices_begin_create_or_replace(self, resource_group): "model": "str", "operatingSystem": "str", "operatingSystemVersion": "str", + "policy": {"resourceId": "str"}, "provisioningState": "str", "status": { "config": { @@ -163,6 +164,7 @@ def test_namespace_devices_begin_update(self, resource_group): }, }, "operatingSystemVersion": "str", + "policy": {"resourceId": "str"}, }, "tags": {"str": "str"}, }, @@ -193,3 +195,16 @@ def test_namespace_devices_list_by_resource_group(self, resource_group): result = [r for r in response] # please add some check logic here by yourself # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_namespace_devices_begin_revoke(self, resource_group): + response = self.client.namespace_devices.begin_revoke( + resource_group_name=resource_group.name, + namespace_name="str", + device_name="str", + body={"disable": bool}, + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_namespace_devices_operations_async.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_namespace_devices_operations_async.py index 2b9b72b23c69..c9087e7bec04 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_namespace_devices_operations_async.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_namespace_devices_operations_async.py @@ -82,6 +82,7 @@ async def test_namespace_devices_begin_create_or_replace(self, resource_group): "model": "str", "operatingSystem": "str", "operatingSystemVersion": "str", + "policy": {"resourceId": "str"}, "provisioningState": "str", "status": { "config": { @@ -169,6 +170,7 @@ async def test_namespace_devices_begin_update(self, resource_group): }, }, "operatingSystemVersion": "str", + "policy": {"resourceId": "str"}, }, "tags": {"str": "str"}, }, @@ -202,3 +204,18 @@ async def test_namespace_devices_list_by_resource_group(self, resource_group): result = [r async for r in response] # please add some check logic here by yourself # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_namespace_devices_begin_revoke(self, resource_group): + response = await ( + await self.client.namespace_devices.begin_revoke( + resource_group_name=resource_group.name, + namespace_name="str", + device_name="str", + body={"disable": bool}, + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_policies_operations.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_policies_operations.py new file mode 100644 index 000000000000..24d9e1ea05c6 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_policies_operations.py @@ -0,0 +1,153 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestDeviceRegistryMgmtPoliciesOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(DeviceRegistryMgmtClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_policies_get(self, resource_group): + response = self.client.policies.get( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_policies_begin_create_or_update(self, resource_group): + response = self.client.policies.begin_create_or_update( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + resource={ + "id": "str", + "name": "str", + "properties": { + "certificate": { + "certificateAuthorityConfiguration": { + "keyType": "str", + "bringYourOwnRoot": { + "enabled": bool, + "certificateSigningRequest": "str", + "issuingCertificateThumbprint": "str", + "status": "str", + }, + "subject": "str", + "validityNotAfter": "2020-02-20 00:00:00", + "validityNotBefore": "2020-02-20 00:00:00", + }, + "leafCertificateConfiguration": {"validityPeriodInDays": 0}, + }, + "provisioningState": "str", + }, + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "type": "str", + }, + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_policies_begin_delete(self, resource_group): + response = self.client.policies.begin_delete( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_policies_begin_update(self, resource_group): + response = self.client.policies.begin_update( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + properties={ + "properties": { + "certificate": { + "certificateAuthorityConfiguration": { + "keyType": "str", + "bringYourOwnRoot": { + "enabled": bool, + "certificateSigningRequest": "str", + "issuingCertificateThumbprint": "str", + "status": "str", + }, + "subject": "str", + "validityNotAfter": "2020-02-20 00:00:00", + "validityNotBefore": "2020-02-20 00:00:00", + }, + "leafCertificateConfiguration": {"validityPeriodInDays": 0}, + } + } + }, + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_policies_list_by_resource_group(self, resource_group): + response = self.client.policies.list_by_resource_group( + resource_group_name=resource_group.name, + namespace_name="str", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_policies_begin_revoke_issuer(self, resource_group): + response = self.client.policies.begin_revoke_issuer( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_policies_begin_activate_bring_your_own_root(self, resource_group): + response = self.client.policies.begin_activate_bring_your_own_root( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + body={"certificateChain": "str"}, + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_policies_operations_async.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_policies_operations_async.py new file mode 100644 index 000000000000..dabafc711935 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/generated_tests/test_device_registry_mgmt_policies_operations_async.py @@ -0,0 +1,164 @@ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.deviceregistry.aio import DeviceRegistryMgmtClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestDeviceRegistryMgmtPoliciesOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(DeviceRegistryMgmtClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_policies_get(self, resource_group): + response = await self.client.policies.get( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_policies_begin_create_or_update(self, resource_group): + response = await ( + await self.client.policies.begin_create_or_update( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + resource={ + "id": "str", + "name": "str", + "properties": { + "certificate": { + "certificateAuthorityConfiguration": { + "keyType": "str", + "bringYourOwnRoot": { + "enabled": bool, + "certificateSigningRequest": "str", + "issuingCertificateThumbprint": "str", + "status": "str", + }, + "subject": "str", + "validityNotAfter": "2020-02-20 00:00:00", + "validityNotBefore": "2020-02-20 00:00:00", + }, + "leafCertificateConfiguration": {"validityPeriodInDays": 0}, + }, + "provisioningState": "str", + }, + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "type": "str", + }, + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_policies_begin_delete(self, resource_group): + response = await ( + await self.client.policies.begin_delete( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_policies_begin_update(self, resource_group): + response = await ( + await self.client.policies.begin_update( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + properties={ + "properties": { + "certificate": { + "certificateAuthorityConfiguration": { + "keyType": "str", + "bringYourOwnRoot": { + "enabled": bool, + "certificateSigningRequest": "str", + "issuingCertificateThumbprint": "str", + "status": "str", + }, + "subject": "str", + "validityNotAfter": "2020-02-20 00:00:00", + "validityNotBefore": "2020-02-20 00:00:00", + }, + "leafCertificateConfiguration": {"validityPeriodInDays": 0}, + } + } + }, + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_policies_list_by_resource_group(self, resource_group): + response = self.client.policies.list_by_resource_group( + resource_group_name=resource_group.name, + namespace_name="str", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_policies_begin_revoke_issuer(self, resource_group): + response = await ( + await self.client.policies.begin_revoke_issuer( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_policies_begin_activate_bring_your_own_root(self, resource_group): + response = await ( + await self.client.policies.begin_activate_bring_your_own_root( + resource_group_name=resource_group.name, + namespace_name="str", + policy_name="str", + body={"certificateChain": "str"}, + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/pyproject.toml b/sdk/deviceregistry/azure-mgmt-deviceregistry/pyproject.toml index 7edfc67d5a80..0d89c7872710 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/pyproject.toml +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/pyproject.toml @@ -1,19 +1,23 @@ +# -------------------------------------------------------------------------- +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + [build-system] -requires = [ - "setuptools>=77.0.3", - "wheel", -] +requires = ["setuptools>=77.0.3", "wheel"] build-backend = "setuptools.build_meta" [project] name = "azure-mgmt-deviceregistry" authors = [ - { name = "Microsoft Corporation", email = "azpysdkhelp@microsoft.com" }, + { name = "Microsoft Corporation", email = "azpysdkhelp@microsoft.com" }, ] description = "Microsoft Azure Deviceregistry Management Client Library for Python" license = "MIT" classifiers = [ - "Development Status :: 5 - Production/Stable", + "Development Status :: 4 - Beta", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", @@ -24,32 +28,23 @@ classifiers = [ "Programming Language :: Python :: 3.13", ] requires-python = ">=3.9" -keywords = [ - "azure", - "azure sdk", -] +keywords = ["azure", "azure sdk"] + dependencies = [ "isodate>=0.6.1", "azure-mgmt-core>=1.6.0", "typing-extensions>=4.6.0", ] dynamic = [ - "version", - "readme", +"version", "readme" ] [project.urls] repository = "https://github.com/Azure/azure-sdk-for-python" -[tool.setuptools.dynamic.version] -attr = "azure.mgmt.deviceregistry._version.VERSION" - -[tool.setuptools.dynamic.readme] -file = [ - "README.md", - "CHANGELOG.md", -] -content-type = "text/markdown" +[tool.setuptools.dynamic] +version = {attr = "azure.mgmt.deviceregistry._version.VERSION"} +readme = {file = ["README.md", "CHANGELOG.md"], content-type = "text/markdown"} [tool.setuptools.packages.find] exclude = [ @@ -63,9 +58,7 @@ exclude = [ ] [tool.setuptools.package-data] -pytyped = [ - "py.typed", -] +pytyped = ["py.typed"] [tool.azure-sdk-build] breaking = false @@ -79,7 +72,7 @@ package_name = "azure-mgmt-deviceregistry" package_nspkg = "azure-mgmt-nspkg" package_pprint_name = "Deviceregistry Management" package_doc_id = "" -is_stable = true +is_stable = false is_arm = true need_msrestazure = false need_azuremgmtcore = true diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/tsp-location.yaml b/sdk/deviceregistry/azure-mgmt-deviceregistry/tsp-location.yaml index 974f78b61b46..c8f015dc22d9 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/tsp-location.yaml +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/tsp-location.yaml @@ -1,4 +1,4 @@ directory: specification/deviceregistry/DeviceRegistry.Management -commit: b562b95b6429f78f6c8629d5751bfeef1be7cacd +commit: 6f8788a943c0b1e7f76906cdf10113e6d04b14de repo: Azure/azure-rest-api-specs -additionalDirectories: +additionalDirectories: From 413fe2795c5ac78b688cfb33610c8e0cb7e65438 Mon Sep 17 00:00:00 2001 From: SIongithub Date: Wed, 25 Mar 2026 17:21:46 -0400 Subject: [PATCH 2/3] Update sdk/deviceregistry/azure-mgmt-deviceregistry/README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- sdk/deviceregistry/azure-mgmt-deviceregistry/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/README.md b/sdk/deviceregistry/azure-mgmt-deviceregistry/README.md index e45ec9fd101e..57175789e3d9 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/README.md +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/README.md @@ -24,7 +24,7 @@ pip install azure-identity ### Authentication -By default, [Microsoft Entra ID](https://aka.ms/awps/aad) token authentication depends on correct configure of following environment variables. +By default, [Microsoft Entra ID](https://aka.ms/awps/aad) token authentication depends on the following environment variables being correctly configured. - `AZURE_CLIENT_ID` for Azure client ID. - `AZURE_TENANT_ID` for Azure tenant ID. From 942a511b591bb2359aa12d08f53413ffa6e14f8c Mon Sep 17 00:00:00 2001 From: Suat Iskender Date: Thu, 26 Mar 2026 14:03:02 -0400 Subject: [PATCH 3/3] add Credentials/Policies tests --- .../tests/conftest.py | 4 + ...stry_mgmt_credentials_and_policies_flow.py | 472 ++++++++++++++++++ 2 files changed, 476 insertions(+) create mode 100644 sdk/deviceregistry/azure-mgmt-deviceregistry/tests/test_device_registry_mgmt_credentials_and_policies_flow.py diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/tests/conftest.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/tests/conftest.py index 364f13f47035..747582ac4f1a 100644 --- a/sdk/deviceregistry/azure-mgmt-deviceregistry/tests/conftest.py +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/tests/conftest.py @@ -33,3 +33,7 @@ def add_sanitizers(test_proxy): add_header_regex_sanitizer(key="Set-Cookie", value="[set-cookie;]") add_header_regex_sanitizer(key="Cookie", value="cookie;") add_body_key_sanitizer(json_path="$..access_token", value="access_token") + + # CMS flow test sanitizers — scrub device UUIDs and certificate signing requests + add_body_key_sanitizer(json_path="$..uuid", value="00000000-0000-0000-0000-000000000000") + add_body_key_sanitizer(json_path="$..certificateSigningRequest", value="-----BEGIN CERTIFICATE REQUEST-----\nSANITIZED\n-----END CERTIFICATE REQUEST-----") diff --git a/sdk/deviceregistry/azure-mgmt-deviceregistry/tests/test_device_registry_mgmt_credentials_and_policies_flow.py b/sdk/deviceregistry/azure-mgmt-deviceregistry/tests/test_device_registry_mgmt_credentials_and_policies_flow.py new file mode 100644 index 000000000000..5d1fb7be1343 --- /dev/null +++ b/sdk/deviceregistry/azure-mgmt-deviceregistry/tests/test_device_registry_mgmt_credentials_and_policies_flow.py @@ -0,0 +1,472 @@ +# 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. +# -------------------------------------------------------------------------- +""" +End-to-end scenario test for Credential Management Service (CMS) flow. + +Ports the .NET DeviceRegistryCredentialsAndPoliciesFlowTest to Python. + +PREREQUISITES +============= +Create RG, UAMI, ADR Namespace, IoT Hub, and DPS BEFORE running in Record/Live mode. +Use the helper scripts from the .NET SDK repo: + Setup: .\\tests\\Scripts\\Setup-CmsTestPrerequisites.ps1 -Suffix both -Iteration -NoPrompt + Teardown: .\\tests\\Scripts\\Teardown-CmsTestPrerequisites.ps1 -Suffix both -Iteration -Force + +The scripts create these resources for each suffix (sync/async): + Resource Group: adr-sdk-test-cms-{suffix}{iteration} + Managed Identity: cms-test-uami-{suffix}{iteration} + ADR Namespace: cms-test-namespace-{suffix}{iteration} + IoT Hub (GEN2): adr-sdk-cms-test-hub-{suffix}{iteration} + DPS: adr-sdk-cms-test-dps-{suffix}{iteration} + +The test itself creates and deletes Credential, Policy, and Device resources during execution. + +Run: + $env:AZURE_TEST_RUN_LIVE = "true" + pytest tests/test_device_registry_mgmt_credentials_and_policies_flow.py -v -s +""" +import time +import uuid + +import pytest +from azure.core.exceptions import HttpResponseError, ResourceNotFoundError +from azure.mgmt.deviceregistry import DeviceRegistryMgmtClient +from azure.mgmt.deviceregistry.models import ( + ActivateBringYourOwnRootRequest, + CertificateAuthorityConfiguration, + CertificateConfiguration, + Credential, + DeviceCredentialsRevokeRequest, + LeafCertificateConfiguration, + MessagingEndpoints, + NamespaceDevice, + NamespaceDeviceProperties, + Policy, + PolicyProperties, + PolicyUpdate, + PolicyUpdateProperties, +) + +from devtools_testutils import AzureMgmtRecordedTestCase, recorded_by_proxy + +# --------------------------------------------------------------------------- +# Constants — must match what Setup-CmsTestPrerequisites.ps1 created. +# Change ITERATION here *and* in the setup script when you need fresh resources. +# --------------------------------------------------------------------------- +ITERATION = "1" +LOCATION = "eastus2euap" +SUFFIX = f"sync{ITERATION}" + +RESOURCE_GROUP_NAME = f"adr-sdk-test-cms-{SUFFIX}" +NAMESPACE_NAME = f"cms-test-namespace-{SUFFIX}" +POLICY_NAME = f"cms-test-policy-{SUFFIX}" +BYOR_POLICY_NAME = f"cms-test-byor-policy-{SUFFIX}" +DEVICE_NAME = f"cms-test-device-{SUFFIX}" + +# How long (seconds) to sleep between BYOR policy deletion and credential deletion +# in live/record mode to avoid RP 409 race condition. +PROPAGATION_DELAY_SECONDS = 10 + +def _delay_if_live(test_instance, seconds, reason=""): + """Sleep only in Live or Record mode (not Playback).""" + # In playback mode the test proxy replays instantly; no delay needed. + # AzureMgmtRecordedTestCase does not expose mode directly, but + # is_live is True for both Live and Record modes. + if getattr(test_instance, "is_live", False): + if reason: + print(f" [delay] {reason} ({seconds}s)") + time.sleep(seconds) + + +@pytest.mark.live_test_only +class TestDeviceRegistryMgmtCredentialsAndPoliciesFlow(AzureMgmtRecordedTestCase): + """ + Single end-to-end test covering: + 1. Namespace GET (prerequisite) + 2. Credential GET-or-CREATE + 3. Policy cleanup → CREATE (ECC, 90-day) → LIST → verify + 4. Credential Synchronize + 5. Policy UPDATE (PATCH validity 90→60) + 6. Device CREATE → GET → LIST + 7. Device Revoke (negative test — known RP LRO bug) + 8. Device DELETE + 9. Policy RevokeIssuer + 10. Policy DELETE (standard) + 11. BYOR Policy CREATE → verify PendingActivation/CSR + 12. BYOR ActivateBringYourOwnRoot with invalid cert (negative test) + 13. BYOR Policy UPDATE (validity 90→45) + 14. BYOR Policy DELETE + 15. Credential DELETE + """ + + def setup_method(self, method): + self.client = self.create_mgmt_client(DeviceRegistryMgmtClient) + + @recorded_by_proxy + def test_credential_and_policy_flow(self): + # ================================================================== + # Step 1: Get namespace (prerequisite — created via setup script) + # ================================================================== + namespace = self.client.namespaces.get( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + ) + assert namespace is not None + assert namespace.location.replace(" ", "").lower() == LOCATION.lower() + assert namespace.name == NAMESPACE_NAME + + # ================================================================== + # Step 2: Credential flow — GET or CREATE + # ================================================================== + try: + credential = self.client.credentials.get( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + ) + except (ResourceNotFoundError, HttpResponseError): + credential = self.client.credentials.begin_create_or_update( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + resource=Credential(location=LOCATION), + ).result() + + assert credential is not None + assert credential.location.replace(" ", "").lower() == LOCATION.lower() + + # ================================================================== + # Step 3: Delete all existing policies, then create a fresh one + # ================================================================== + existing_policies = list( + self.client.policies.list_by_resource_group( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + ) + ) + for p in existing_policies: + self.client.policies.begin_delete( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=p.name, + ).result() + + # Create policy with ECC key type and 90-day leaf certificate validity + policy = self.client.policies.begin_create_or_update( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=POLICY_NAME, + resource=Policy( + properties=PolicyProperties( + certificate=CertificateConfiguration( + certificate_authority_configuration=CertificateAuthorityConfiguration( + key_type="ECC", + ), + leaf_certificate_configuration=LeafCertificateConfiguration( + validity_period_in_days=90, + ), + ), + ), + ), + ).result() + + assert policy is not None + assert policy.name == POLICY_NAME + assert policy.properties is not None + assert policy.properties.certificate is not None + cert_config = policy.properties.certificate + assert cert_config.certificate_authority_configuration.key_type == "ECC" + assert cert_config.leaf_certificate_configuration.validity_period_in_days == 90 + assert policy.properties.provisioning_state == "Succeeded" + + # List policies — verify created policy appears + all_policies = list( + self.client.policies.list_by_resource_group( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + ) + ) + assert any(p.name == POLICY_NAME for p in all_policies) + + # ================================================================== + # Step 4: Synchronize credentials with IoT Hub + # ================================================================== + self.client.credentials.begin_synchronize( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + ).result() + + # ================================================================== + # Step 5: Policy UPDATE (PATCH) — change validity from 90 → 60 days + # + # IMPORTANT: Use raw dict to avoid sending immutable + # certificateAuthorityConfiguration fields (keyType, bringYourOwnRoot) + # which the 2026-03-01-preview API rejects on PATCH. + # The Python SDK's CertificateConfiguration requires both fields, + # unlike the .NET SDK which has a custom int-only constructor. + # ================================================================== + # GET fresh policy after sync + policy = self.client.policies.get( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=POLICY_NAME, + ) + assert policy.properties.certificate.leaf_certificate_configuration.validity_period_in_days == 90 + + # PATCH with raw dict — only mutable fields + self.client.policies.begin_update( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=POLICY_NAME, + properties={ + "properties": { + "certificate": { + "leafCertificateConfiguration": { + "validityPeriodInDays": 60, + } + } + } + }, + ).result() + + # Verify update + policy = self.client.policies.get( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=POLICY_NAME, + ) + assert policy.properties.certificate.leaf_certificate_configuration.validity_period_in_days == 60 + + # ================================================================== + # Step 6: Device CRUD + # ================================================================== + device = self.client.namespace_devices.begin_create_or_replace( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + device_name=DEVICE_NAME, + resource=NamespaceDevice( + location=LOCATION, + properties=NamespaceDeviceProperties( + manufacturer="Contoso", + model="CMS-TestModel-5000", + operating_system="Linux", + operating_system_version="22.04", + endpoints=MessagingEndpoints(), + ), + ), + ).result() + + assert device is not None + assert device.name == DEVICE_NAME + assert device.properties is not None + # UUID is assigned by the RP + assert device.properties.uuid is not None + try: + uuid.UUID(device.properties.uuid) + except ValueError: + pytest.fail(f"Device UUID is not a valid UUID: {device.properties.uuid}") + assert device.properties.manufacturer == "Contoso" + assert device.properties.model == "CMS-TestModel-5000" + + # GET device and verify full properties + device = self.client.namespace_devices.get( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + device_name=DEVICE_NAME, + ) + assert device.properties.manufacturer == "Contoso" + assert device.properties.model == "CMS-TestModel-5000" + assert device.properties.operating_system == "Linux" + assert device.properties.operating_system_version == "22.04" + + # List devices — verify created device appears + all_devices = list( + self.client.namespace_devices.list_by_resource_group( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + ) + ) + assert any(d.name == DEVICE_NAME for d in all_devices) + + # ================================================================== + # Step 7: Device Revoke (negative test) + # + # Known RP bug: RP returns HTTP 200 without LRO headers and missing + # required "result" property. SDK LRO polling fails. + # ARM-created devices have no CMS policy, so revoke also fails + # from a business-logic perspective. + # ================================================================== + with pytest.raises(Exception): + self.client.namespace_devices.begin_revoke( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + device_name=DEVICE_NAME, + body=DeviceCredentialsRevokeRequest(disable=False), + ).result() + + # Verify device state unchanged after failed revoke + device = self.client.namespace_devices.get( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + device_name=DEVICE_NAME, + ) + assert device.properties is not None + assert device.name == DEVICE_NAME + + # ================================================================== + # Step 8: Delete device + # ================================================================== + # Known RP bug: DELETE returns HTTP 200 instead of 202/204, + # which the SDK rejects. Swallow that specific error. + # ================================================================== + try: + self.client.namespace_devices.begin_delete( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + device_name=DEVICE_NAME, + ).result() + except HttpResponseError as e: + if "OK" not in str(e): + raise + # ================================================================== + # Step 9: RevokeIssuer on standard (non-BYOR) policy + # ================================================================== + self.client.policies.begin_revoke_issuer( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=POLICY_NAME, + ).result() + + # Verify policy still healthy after revoke + policy = self.client.policies.get( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=POLICY_NAME, + ) + assert policy.properties.provisioning_state == "Succeeded" + + # ================================================================== + # Step 10: Delete standard policy + # ================================================================== + self.client.policies.begin_delete( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=POLICY_NAME, + ).result() + + # ================================================================== + # Step 11: BYOR (Bring Your Own Root) Policy — CREATE + # ================================================================== + from azure.mgmt.deviceregistry.models import BringYourOwnRoot + + byor_policy = self.client.policies.begin_create_or_update( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=BYOR_POLICY_NAME, + resource=Policy( + properties=PolicyProperties( + certificate=CertificateConfiguration( + certificate_authority_configuration=CertificateAuthorityConfiguration( + key_type="ECC", + bring_your_own_root=BringYourOwnRoot(enabled=True), + ), + leaf_certificate_configuration=LeafCertificateConfiguration( + validity_period_in_days=90, + ), + ), + ), + ), + ).result() + + assert byor_policy is not None + assert byor_policy.name == BYOR_POLICY_NAME + byor_ca = byor_policy.properties.certificate.certificate_authority_configuration + assert byor_ca.bring_your_own_root is not None + assert byor_ca.bring_your_own_root.enabled is True + + # Verify PendingActivation status and CSR + assert byor_ca.bring_your_own_root.status == "PendingActivation" + assert byor_ca.bring_your_own_root.certificate_signing_request is not None + assert "-----BEGIN CERTIFICATE REQUEST-----" in byor_ca.bring_your_own_root.certificate_signing_request + + # ================================================================== + # Step 12: ActivateBringYourOwnRoot with INVALID cert (negative test) + # + # Known RP bug: same LRO issue as Device.Revoke — RP returns HTTP 200 + # instead of proper 4xx. Even if the RP were fixed, the fake cert + # would still fail validation. + # ================================================================== + fake_cert_chain = ( + "-----BEGIN CERTIFICATE-----\n" + "MIIBkTCB+wIJALRiMLAhFake0DQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwEdGVz\n" + "dDAeFw0yNDAzMjAxMjAwMDBaFw0yNTAzMjAxMjAwMDBaMA8xDTALBgNVBAMMBHRl\n" + "-----END CERTIFICATE-----" + ) + with pytest.raises(Exception): + self.client.policies.begin_activate_bring_your_own_root( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=BYOR_POLICY_NAME, + body=ActivateBringYourOwnRootRequest(certificate_chain=fake_cert_chain), + ).result() + + # Verify BYOR state unchanged after failed activation + byor_policy = self.client.policies.get( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=BYOR_POLICY_NAME, + ) + byor_ca = byor_policy.properties.certificate.certificate_authority_configuration + assert byor_ca.bring_your_own_root.enabled is True + assert byor_ca.bring_your_own_root.status == "PendingActivation" + assert byor_ca.bring_your_own_root.certificate_signing_request is not None + + # ================================================================== + # Step 13: BYOR Policy UPDATE — change validity from 90 → 45 days + # (raw dict PATCH, same approach as standard policy update) + # ================================================================== + self.client.policies.begin_update( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=BYOR_POLICY_NAME, + properties={ + "properties": { + "certificate": { + "leafCertificateConfiguration": { + "validityPeriodInDays": 45, + } + } + } + }, + ).result() + + byor_policy = self.client.policies.get( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=BYOR_POLICY_NAME, + ) + assert byor_policy.properties.certificate.leaf_certificate_configuration.validity_period_in_days == 45 + # BYOR should still be enabled after update + assert byor_policy.properties.certificate.certificate_authority_configuration.bring_your_own_root.enabled is True + + # ================================================================== + # Step 14: Delete BYOR policy + # ================================================================== + self.client.policies.begin_delete( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + policy_name=BYOR_POLICY_NAME, + ).result() + + # Delay to avoid RP 409 race condition between BYOR policy deletion + # and credential deletion (RP may still be cleaning up child resources) + _delay_if_live(self, PROPAGATION_DELAY_SECONDS, "Waiting for BYOR policy deletion to propagate") + + # ================================================================== + # Step 15: Delete credential (final cleanup) + # ================================================================== + self.client.credentials.begin_delete( + resource_group_name=RESOURCE_GROUP_NAME, + namespace_name=NAMESPACE_NAME, + ).result()