Skip to content

remove pp39

773afe7
Select commit
Loading
Failed to load commit list.
Merged

Remove pypy 3.9 from azure-storage-extensions build matrix #47062

remove pp39
773afe7
Select commit
Loading
Failed to load commit list.
Azure Pipelines / python - storage - tests failed May 21, 2026 in 2h 25m 15s

Build #20260521.4 had test failures

Details

Tests

  • Failed: 132 (0.66%, 132 new, 0 recurring)
  • Passed: 19,248 (96.13%)
  • Other: 642 (3.21%)
  • Total: 20,022

Annotations

Check failure on line 8049 in Build log

See this annotation in the file changed.

@azure-pipelines azure-pipelines / python - storage - tests

Build log #L8049

PowerShell exited with code '1'.

Check failure on line 7981 in Build log

See this annotation in the file changed.

@azure-pipelines azure-pipelines / python - storage - tests

Build log #L7981

PowerShell exited with code '1'.

Check failure on line 19 in Build log

See this annotation in the file changed.

@azure-pipelines azure-pipelines / python - storage - tests

Build log #L19

There are one or more test failures detected in result files. Detailed summary of published test results can be viewed in the Tests tab.

Check failure on line 20 in Build log

See this annotation in the file changed.

@azure-pipelines azure-pipelines / python - storage - tests

Build log #L20

There are one or more test failures detected in result files. Detailed summary of published test results can be viewed in the Tests tab.

Check failure on line 1 in test_data_lake_tags

See this annotation in the file changed.

@azure-pipelines azure-pipelines / python - storage - tests

test_data_lake_tags

azure.core.exceptions.HttpResponseError: A required feature for this operation is not enabled on the account.
RequestId:1e197c96-a01e-00c2-4466-e9e566000000
Time:2026-05-21T21:12:03.5542485Z
ErrorCode:FeatureNotEnabled
featurename:BlobIndexForHns
Content: <?xml version="1.0" encoding="utf-8"?>
<Error><Code>FeatureNotEnabled</Code><Message>A required feature for this operation is not enabled on the account.
RequestId:1e197c96-a01e-00c2-4466-e9e566000000
Time:2026-05-21T21:12:03.5542485Z</Message><FeatureName>BlobIndexForHns</FeatureName></Error>
Raw output
args = (<test_file.TestFile object at 0x107f74b10>,)
kwargs = {'__aggregate_cache_key': ('EnvironmentVariableLoader',), 'datalake_storage_account_key': <devtools_testutils.envvaria..._lake_soft_delete_account_key': <devtools_testutils.envvariable_loader.EnvironmentVariable object at 0x109d6f710>, ...}
trimmed_kwargs = {'__aggregate_cache_key': ('EnvironmentVariableLoader',), 'datalake_storage_account_key': <devtools_testutils.envvaria..._lake_soft_delete_account_key': <devtools_testutils.envvariable_loader.EnvironmentVariable object at 0x109d6f710>, ...}

    def record_wrap(*args, **kwargs):
        # ---- your existing trimming/early-exit logic ----
        trimmed_kwargs = {k: v for k, v in kwargs.items()}
        trim_kwargs_from_test_function(test_func, trimmed_kwargs)
    
        if is_live_and_not_recording():
>           return test_func(*args, **trimmed_kwargs)

../../../.venv/azure-storage-file-datalake/.venv_whl/lib/python3.11/site-packages/devtools_testutils/proxy_testcase.py:306: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_file.py:1926: in test_data_lake_tags
    file_client.set_tags(first_tags, if_modified_since=early)
../../../.venv/azure-storage-file-datalake/.venv_whl/lib/python3.11/site-packages/azure/core/tracing/decorator.py:119: in wrapper_use_tracer
    return func(*args, **kwargs)
../../../.venv/azure-storage-file-datalake/.venv_whl/lib/python3.11/site-packages/azure/storage/filedatalake/_path_client.py:1021: in set_tags
    return self._blob_client.set_blob_tags(tags, **kwargs)
../../../.venv/azure-storage-file-datalake/.venv_whl/lib/python3.11/site-packages/azure/core/tracing/decorator.py:119: in wrapper_use_tracer
    return func(*args, **kwargs)
../../../.venv/azure-storage-file-datalake/.venv_whl/lib/python3.11/site-packages/azure/storage/blob/_blob_client.py:2406: in set_blob_tags
    process_storage_error(error)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

storage_error = None

    def process_storage_error(storage_error) -> NoReturn:  # type: ignore [misc] # pylint:disable=too-many-statements, too-many-branches
        raise_error = HttpResponseError
        serialized = False
        if isinstance(storage_error, AzureSigningError):
            storage_error.message = (
                storage_error.message
                + ". This is likely due to an invalid shared key. Please check your shared key and try again."
            )
        if not storage_error.response or storage_error.response.status_code in [200, 204]:
            raise storage_error
        # If it is one of those three then it has been serialized prior by the generated layer.
        if isinstance(
            storage_error,
            (PartialBatchErrorException, ClientAuthenticationError, ResourceNotFoundError, ResourceExistsError),
        ):
            serialized = True
        error_code = storage_error.response.headers.get("x-ms-error-code")
        error_message = storage_error.message
        additional_data = {}
        error_dict = {}
        try:
            error_body = ContentDecodePolicy.deserialize_from_http_generics(storage_error.response)
            try:
                if error_body is None or len(error_body) == 0:
                    error_body = storage_error.response.reason
            except AttributeError:
                error_body = ""
            # If it is an XML response
            if isinstance(error_body, Element):
                error_dict = {child.tag.lower(): child.text for child in error_body}
            # If it is a JSON response
            elif isinstance(error_body, dict):
                error_dict = error_body.get("error", {})
            elif not error_code:
                _LOGGER.warning(
                    "Unexpected return
... [The stack trace has been truncated as it exceeded the maximum allowed size. Please refer to the complete log available in the Test Run attachments for full details.]

Check failure on line 1 in test_data_lake_tags

See this annotation in the file changed.

@azure-pipelines azure-pipelines / python - storage - tests

test_data_lake_tags

azure.core.exceptions.HttpResponseError: A required feature for this operation is not enabled on the account.
RequestId:4ffed254-801e-0101-3366-e90231000000
Time:2026-05-21T21:12:50.8556158Z
ErrorCode:FeatureNotEnabled
featurename:BlobIndexForHns
Content: <?xml version="1.0" encoding="utf-8"?>
<Error><Code>FeatureNotEnabled</Code><Message>A required feature for this operation is not enabled on the account.
RequestId:4ffed254-801e-0101-3366-e90231000000
Time:2026-05-21T21:12:50.8556158Z</Message><FeatureName>BlobIndexForHns</FeatureName></Error>
Raw output
args = (<test_file_async.TestFileAsync object at 0x1079e89d0>,)
kwargs = {'__aggregate_cache_key': ('EnvironmentVariableLoader',), 'datalake_storage_account_key': <devtools_testutils.envvaria..._lake_soft_delete_account_key': <devtools_testutils.envvariable_loader.EnvironmentVariable object at 0x109fd7e90>, ...}
trimmed_kwargs = {'__aggregate_cache_key': ('EnvironmentVariableLoader',), 'datalake_storage_account_key': <devtools_testutils.envvaria..._lake_soft_delete_account_key': <devtools_testutils.envvariable_loader.EnvironmentVariable object at 0x109fd7e90>, ...}

    async def record_wrap(*args, **kwargs):
        # ---- your existing trimming/early-exit logic ----
        trimmed_kwargs = {k: v for k, v in kwargs.items()}
        trim_kwargs_from_test_function(test_func, trimmed_kwargs)
    
        if is_live_and_not_recording():
>           return await test_func(*args, **trimmed_kwargs)

../../../.venv/azure-storage-file-datalake/.venv_whl/lib/python3.11/site-packages/devtools_testutils/aio/proxy_testcase_async.py:107: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_file_async.py:1824: in test_data_lake_tags
    await file_client.set_tags(first_tags, if_modified_since=early)
../../../.venv/azure-storage-file-datalake/.venv_whl/lib/python3.11/site-packages/azure/core/tracing/decorator_async.py:119: in wrapper_use_tracer
    return await func(*args, **kwargs)
../../../.venv/azure-storage-file-datalake/.venv_whl/lib/python3.11/site-packages/azure/storage/filedatalake/aio/_path_client_async.py:1019: in set_tags
    return await self._blob_client.set_blob_tags(tags, **kwargs)
../../../.venv/azure-storage-file-datalake/.venv_whl/lib/python3.11/site-packages/azure/core/tracing/decorator_async.py:119: in wrapper_use_tracer
    return await func(*args, **kwargs)
../../../.venv/azure-storage-file-datalake/.venv_whl/lib/python3.11/site-packages/azure/storage/blob/aio/_blob_client_async.py:2452: in set_blob_tags
    process_storage_error(error)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

storage_error = None

    def process_storage_error(storage_error) -> NoReturn:  # type: ignore [misc] # pylint:disable=too-many-statements, too-many-branches
        raise_error = HttpResponseError
        serialized = False
        if isinstance(storage_error, AzureSigningError):
            storage_error.message = (
                storage_error.message
                + ". This is likely due to an invalid shared key. Please check your shared key and try again."
            )
        if not storage_error.response or storage_error.response.status_code in [200, 204]:
            raise storage_error
        # If it is one of those three then it has been serialized prior by the generated layer.
        if isinstance(
            storage_error,
            (PartialBatchErrorException, ClientAuthenticationError, ResourceNotFoundError, ResourceExistsError),
        ):
            serialized = True
        error_code = storage_error.response.headers.get("x-ms-error-code")
        error_message = storage_error.message
        additional_data = {}
        error_dict = {}
        try:
            error_body = ContentDecodePolicy.deserialize_from_http_generics(storage_error.response)
            try:
                if error_body is None or len(error_body) == 0:
                    error_body = storage_error.response.reason
            except AttributeError:
                error_body = ""
            # If it is an XML response
            if isinstance(error_body, Element):
                error_dict = {child.tag.lower(): child.text for child in error_body}
            # If it is a JSON response
            elif isinstance(error_body, dict):
                error_dict = error_body.get("error", {})
         
... [The stack trace has been truncated as it exceeded the maximum allowed size. Please refer to the complete log available in the Test Run attachments for full details.]

Check failure on line 1 in test_list_shares_leased_share

See this annotation in the file changed.

@azure-pipelines azure-pipelines / python - storage - tests

test_list_shares_leased_share

assert None == 'infinite'
 +  where None = {'status': 'unlocked', 'state': 'available', 'duration': None}.duration
 +    where {'status': 'unlocked', 'state': 'available', 'duration': None} = {'name': 'listshare060b33191', 'last_modified': datetime.datetime(2026, 5, 21, 21, 14, 26, tzinfo=datetime.timezone.utc), 'etag': '"0x8DEB77DF06BB847"', 'quota': 102400, 'access_tier': 'TransactionOptimized', 'next_allowed_quota_downgrade_time': None, 'metadata': None, 'snapshot': None, 'deleted': None, 'deleted_time': None, 'version': None, 'remaining_retention_days': None, 'provisioned_egress_mbps': None, 'provisioned_ingress_mbps': None, 'provisioned_iops': None, 'provisioned_bandwidth': None, 'lease': {'status': 'unlocked', 'state': 'available', 'duration': None}, 'protocols': None, 'root_squash': None, 'enable_snapshot_virtual_directory_access': None, 'paid_bursting_enabled': None, 'paid_bursting_bandwidth_mibps': None, 'paid_bursting_iops': None, 'included_burst_iops': None, 'max_burst_credits_for_iops': None, 'next_provisioned_iops_downgrade': None, 'next_provisioned_bandwidth_downgrade': None}.lease
Raw output
args = (<test_share_async.TestStorageShareAsync object at 0x7f81ebb1c7f0>,)
kwargs = {'__aggregate_cache_key': ('EnvironmentVariableLoader',), 'premium_storage_file_account_key': <devtools_testutils.envv...ondary_storage_account_key': <devtools_testutils.envvariable_loader.EnvironmentVariable object at 0x7f81e3d131f0>, ...}
trimmed_kwargs = {'__aggregate_cache_key': ('EnvironmentVariableLoader',), 'premium_storage_file_account_key': <devtools_testutils.envv...ondary_storage_account_key': <devtools_testutils.envvariable_loader.EnvironmentVariable object at 0x7f81e3d131f0>, ...}

    async def record_wrap(*args, **kwargs):
        # ---- your existing trimming/early-exit logic ----
        trimmed_kwargs = {k: v for k, v in kwargs.items()}
        trim_kwargs_from_test_function(test_func, trimmed_kwargs)
    
        if is_live_and_not_recording():
>           return await test_func(*args, **trimmed_kwargs)

../../../.venv/azure-storage-file-share/.venv_whl/lib/python3.10/site-packages/devtools_testutils/aio/proxy_testcase_async.py:107: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <test_share_async.TestStorageShareAsync object at 0x7f81ebb1c7f0>
kwargs = {'__aggregate_cache_key': ('EnvironmentVariableLoader',), 'premium_storage_file_account_key': <devtools_testutils.envv...ondary_storage_account_key': <devtools_testutils.envvariable_loader.EnvironmentVariable object at 0x7f81e3d131f0>, ...}
storage_account_name = 'primtcf7d6009b6a54c2b'
storage_account_key = <devtools_testutils.envvariable_loader.EnvironmentVariable object at 0x7f81e3d13850>
share = <azure.storage.fileshare.aio._share_client_async.ShareClient object at 0x7f81e3fecdf0>
lease = <azure.storage.fileshare.aio._lease_async.ShareLeaseClient object at 0x7f81e3fef520>
resp = [{'name': 'listshare060b33191', 'last_modified': datetime.datetime(2026, 5, 21, 21, 14, 26, tzinfo=datetime.timezone.u...t_credits_for_iops': None, 'next_provisioned_iops_downgrade': None, 'next_provisioned_bandwidth_downgrade': None}, ...]
s = {'name': 'utshareffc33c06', 'last_modified': datetime.datetime(2026, 5, 21, 21, 8, 36, tzinfo=datetime.timezone.utc), ...x_burst_credits_for_iops': None, 'next_provisioned_iops_downgrade': None, 'next_provisioned_bandwidth_downgrade': None}
@py_assert2 = {'status': 'unlocked', 'state': 'available', 'duration': None}

    @FileSharePreparer()
    @recorded_by_proxy_async
    async def test_list_shares_leased_share(self, **kwargs):
        storage_account_name = kwargs.pop("storage_account_name")
        storage_account_key = kwargs.pop("storage_account_key")
    
        self._setup(storage_account_name, storage_account_key)
        share = await self._create_share()
    
        # Act
        lease = await share.acquire_lease(lease_id='00000000-1111-2222-3333-444444444444')
        resp = []
        async for s in self.fsc.list_shares():
            resp.append(s)
    
        # Assert
        assert resp is not None
        assert len(resp) >= 1
        assert resp[0] is not None
>       assert resp[0].lease.duration == 'infinite'
E       assert None == 'infinite'
E        +  where None = {'status': 'unlocked', 'state': 'available', 'duration': None}.duration
E        +    where {'status': 'unlocked', 'state': 'available', 'duration': None} = {'name': 'listshare060b33191', 'last_modified': datetime.datetime(2026, 5, 21, 21, 14, 26, tzinfo=datetime.timezone.utc), 'etag': '"0x8DEB77DF06BB847"', 'quota': 102400, 'access_tier': 'TransactionOptimized', 'next_allowed_quota_downgrade_time': None, 'metadata': None, 'snapshot': None, 'deleted': None, 'deleted_time': None, 'version': None, 'remaining_retention_days': None, 'provisioned_egress_mbps': None, 'provisioned_ingress_mbps': None, 'provisioned_iops': None, 'provisioned_bandwidth': None, 'lease': {'s
... [The stack trace has been truncated as it exceeded the maximum allowed size. Please refer to the complete log available in the Test Run attachments for full details.]

Check failure on line 1 in test_list_shares_with_num_results_and_marker

See this annotation in the file changed.

@azure-pipelines azure-pipelines / python - storage - tests

test_list_shares_with_num_results_and_marker

Failed: 'listshare1a88e360c' not found in ['{\'name\': \'listshare060b33191\', \'last_modified\': datetime.datetime(2026, 5, 21, 21, 14, 26, tzinfo=datetime.timezone.utc), \'etag\': \'"0x8DEB77DF06BB847"\', \'quota\': 102400, \'access_tier\': \'TransactionOptimized\', \'next_allowed_quota_downgrade_time\': None, \'metadata\': None, \'snapshot\': None, \'deleted\': None, \'deleted_time\': None, \'version\': None, \'remaining_retention_days\': None, \'provisioned_egress_mbps\': None, \'provisioned_ingress_mbps\': None, \'provisioned_iops\': None, \'provisioned_bandwidth\': None, \'lease\': {\'status\': \'unlocked\', \'state\': \'available\', \'duration\': None}, \'protocols\': None, \'root_squash\': None, \'enable_snapshot_virtual_directory_access\': None, \'paid_bursting_enabled\': None, \'paid_bursting_bandwidth_mibps\': None, \'paid_bursting_iops\': None, \'included_burst_iops\': None, \'max_burst_credits_for_iops\': None, \'next_provisioned_iops_downgrade\': None, \'next_provisioned_bandwidth_downgrade\': None}', '{\'name\': \'listshare0a88e360c\', \'last_modified\': datetime.datetime(2026, 5, 21, 21, 16, 35, tzinfo=datetime.timezone.utc), \'etag\': \'"0x8DEB77E3D4F1044"\', \'quota\': 102400, \'access_tier\': \'TransactionOptimized\', \'next_allowed_quota_downgrade_time\': None, \'metadata\': None, \'snapshot\': None, \'deleted\': None, \'deleted_time\': None, \'version\': None, \'remaining_retention_days\': None, \'provisioned_egress_mbps\': None, \'provisioned_ingress_mbps\': None, \'provisioned_iops\': None, \'provisioned_bandwidth\': None, \'lease\': {\'status\': \'unlocked\', \'state\': \'available\', \'duration\': None}, \'protocols\': None, \'root_squash\': None, \'enable_snapshot_virtual_directory_access\': None, \'paid_bursting_enabled\': None, \'paid_bursting_bandwidth_mibps\': None, \'paid_bursting_iops\': None, \'included_burst_iops\': None, \'max_burst_credits_for_iops\': None, \'next_provisioned_iops_downgrade\': None, \'next_provisioned_bandwidth_downgrade\': None}']
Raw output
args = (<test_share_async.TestStorageShareAsync object at 0x7f81eb2d5a20>,)
kwargs = {'__aggregate_cache_key': ('EnvironmentVariableLoader',), 'premium_storage_file_account_key': <devtools_testutils.envv...ondary_storage_account_key': <devtools_testutils.envvariable_loader.EnvironmentVariable object at 0x7f81e3dd5390>, ...}
trimmed_kwargs = {'__aggregate_cache_key': ('EnvironmentVariableLoader',), 'premium_storage_file_account_key': <devtools_testutils.envv...ondary_storage_account_key': <devtools_testutils.envvariable_loader.EnvironmentVariable object at 0x7f81e3dd5390>, ...}

    async def record_wrap(*args, **kwargs):
        # ---- your existing trimming/early-exit logic ----
        trimmed_kwargs = {k: v for k, v in kwargs.items()}
        trim_kwargs_from_test_function(test_func, trimmed_kwargs)
    
        if is_live_and_not_recording():
>           return await test_func(*args, **trimmed_kwargs)

../../../.venv/azure-storage-file-share/.venv_whl/lib/python3.10/site-packages/devtools_testutils/aio/proxy_testcase_async.py:107: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_share_async.py:971: in test_list_shares_with_num_results_and_marker
    self.assertNamedItemInContainer(shares1, share_names[1])
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <test_share_async.TestStorageShareAsync object at 0x7f81eb2d5a20>
container = [{'name': 'listshare060b33191', 'last_modified': datetime.datetime(2026, 5, 21, 21, 14, 26, tzinfo=datetime.timezone.u..._burst_credits_for_iops': None, 'next_provisioned_iops_downgrade': None, 'next_provisioned_bandwidth_downgrade': None}]
item_name = 'listshare1a88e360c', msg = None

    def assertNamedItemInContainer(self, container, item_name, msg=None):
        def _is_string(obj):
            return isinstance(obj, str)
    
        for item in container:
            if _is_string(item):
                if item == item_name:
                    return
            elif isinstance(item, dict):
                if item_name == item["name"]:
                    return
            elif item.name == item_name:
                return
            elif hasattr(item, "snapshot") and item.snapshot == item_name:
                return
    
        error_message = f"{repr(item_name)} not found in {[str(c) for c in container]}"
>       pytest.fail(error_message)
E       Failed: 'listshare1a88e360c' not found in ['{\'name\': \'listshare060b33191\', \'last_modified\': datetime.datetime(2026, 5, 21, 21, 14, 26, tzinfo=datetime.timezone.utc), \'etag\': \'"0x8DEB77DF06BB847"\', \'quota\': 102400, \'access_tier\': \'TransactionOptimized\', \'next_allowed_quota_downgrade_time\': None, \'metadata\': None, \'snapshot\': None, \'deleted\': None, \'deleted_time\': None, \'version\': None, \'remaining_retention_days\': None, \'provisioned_egress_mbps\': None, \'provisioned_ingress_mbps\': None, \'provisioned_iops\': None, \'provisioned_bandwidth\': None, \'lease\': {\'status\': \'unlocked\', \'state\': \'available\', \'duration\': None}, \'protocols\': None, \'root_squash\': None, \'enable_snapshot_virtual_directory_access\': None, \'paid_bursting_enabled\': None, \'paid_bursting_bandwidth_mibps\': None, \'paid_bursting_iops\': None, \'included_burst_iops\': None, \'max_burst_credits_for_iops\': None, \'next_provisioned_iops_downgrade\': None, \'next_provisioned_bandwidth_downgrade\': None}', '{\'name\': \'listshare0a88e360c\', \'last_modified\': datetime.datetime(2026, 5, 21, 21, 16, 35, tzinfo=datetime.timezone.utc), \'etag\': \'"0x8DEB77E3D4F1044"\', \'quota\': 102400, \'access_tier\': \'TransactionOptimized\', \'next_allowed_quota_downgrade_time\': None, \'metadata\': None, \'snapshot\': None, \'deleted\': None, \'deleted_time\': None, \'version\': None, \'remaini
... [The stack trace has been truncated as it exceeded the maximum allowed size. Please refer to the complete log available in the Test Run attachments for full details.]