Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-sushy for openSUSE:Factory 
checked in at 2026-08-09 21:34:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sushy (Old)
 and      /work/SRC/openSUSE:Factory/.python-sushy.new.16738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-sushy"

Sun Aug  9 21:34:54 2026 rev:24 rq:1369788 version:5.12.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-sushy/python-sushy.changes        
2026-05-20 15:26:29.090993998 +0200
+++ /work/SRC/openSUSE:Factory/.python-sushy.new.16738/python-sushy.changes     
2026-08-09 21:37:15.078148215 +0200
@@ -1,0 +2,10 @@
+Wed Aug  5 14:46:07 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 5.12.0:
+  * Remove Python 3.10 support
+  * Add openstack-python3-next-jobs
+  * Allow explicit virtual media transfer protocols
+  * HTTP instead of ping to detect iDRAC reboot state
+  * filter out drives reporting null size on inspect
+
+-------------------------------------------------------------------

Old:
----
  sushy-5.11.0.tar.gz

New:
----
  sushy-5.12.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-sushy.spec ++++++
--- /var/tmp/diff_new_pack.13CBWH/_old  2026-08-09 21:37:15.554164424 +0200
+++ /var/tmp/diff_new_pack.13CBWH/_new  2026-08-09 21:37:15.558164561 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python-sushy
-Version:        5.11.0
+Version:        5.12.0
 Release:        0
 Summary:        Python library to communicate with Redfish based systems
 License:        Apache-2.0

++++++ sushy-5.11.0.tar.gz -> sushy-5.12.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sushy-5.11.0/AUTHORS new/sushy-5.12.0/AUTHORS
--- old/sushy-5.11.0/AUTHORS    2026-05-05 14:02:17.000000000 +0200
+++ new/sushy-5.12.0/AUTHORS    2026-08-03 14:37:45.000000000 +0200
@@ -8,6 +8,7 @@
 Anshul Jain <[email protected]>
 Arne Wiebalck <[email protected]>
 Arundhati Surpur <[email protected]>
+Bertrand Lanson <[email protected]>
 Bill Dodd <[email protected]>
 Bob Fournier <[email protected]>
 Christopher Dearborn <[email protected]>
@@ -57,6 +58,7 @@
 Riccardo Pittau <[email protected]>
 Richard G. Pioso <[email protected]>
 Richard Pioso <[email protected]>
+Rico Lin <[email protected]>
 Ruby Loo <[email protected]>
 Samuel Kunkel <[email protected]>
 Sayali Kutwal <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sushy-5.11.0/ChangeLog new/sushy-5.12.0/ChangeLog
--- old/sushy-5.11.0/ChangeLog  2026-05-05 14:02:17.000000000 +0200
+++ new/sushy-5.12.0/ChangeLog  2026-08-03 14:37:45.000000000 +0200
@@ -1,6 +1,19 @@
 CHANGES
 =======
 
+5.12.0
+------
+
+* Remove Python 3.10 support
+* Add openstack-python3-next-jobs
+* Allow explicit virtual media transfer protocols
+
+5.11.1
+------
+
+* HTTP instead of ping to detect iDRAC reboot state
+* filter out drives reporting null size on inspect
+
 5.11.0
 ------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sushy-5.11.0/PKG-INFO new/sushy-5.12.0/PKG-INFO
--- old/sushy-5.11.0/PKG-INFO   2026-05-05 14:02:17.764028300 +0200
+++ new/sushy-5.12.0/PKG-INFO   2026-08-03 14:37:45.465364700 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: sushy
-Version: 5.11.0
+Version: 5.12.0
 Summary: Sushy is a small Python library to communicate with Redfish based 
systems
 Home-page: https://docs.openstack.org/sushy/latest/
 Author: OpenStack
@@ -14,10 +14,11 @@
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
-Requires-Python: >=3.10
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
+Requires-Python: >=3.11
 License-File: LICENSE
 Requires-Dist: pbr>=6.0.0
 Requires-Dist: requests>=2.14.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sushy-5.11.0/pyproject.toml 
new/sushy-5.12.0/pyproject.toml
--- old/sushy-5.11.0/pyproject.toml     2026-05-05 14:01:27.000000000 +0200
+++ new/sushy-5.12.0/pyproject.toml     2026-08-03 14:36:58.000000000 +0200
@@ -7,7 +7,7 @@
 
 [tool.ruff]
 line-length = 79
-target-version = "py37"
+target-version = "py311"
 
 [tool.ruff.lint]
 select = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sushy-5.11.0/releasenotes/notes/add-virtual-media-transfer-protocol-6dd43b8464953e18.yaml
 
new/sushy-5.12.0/releasenotes/notes/add-virtual-media-transfer-protocol-6dd43b8464953e18.yaml
--- 
old/sushy-5.11.0/releasenotes/notes/add-virtual-media-transfer-protocol-6dd43b8464953e18.yaml
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/sushy-5.12.0/releasenotes/notes/add-virtual-media-transfer-protocol-6dd43b8464953e18.yaml
       2026-08-03 14:36:58.000000000 +0200
@@ -0,0 +1,8 @@
+---
+features:
+  - |
+    Adds an optional ``transfer_protocol`` argument to
+    ``VirtualMedia.insert_media``. When supplied, Sushy includes the
+    corresponding ``TransferProtocolType`` in the initial Redfish
+    ``InsertMedia`` request instead of relying on an error response before
+    adding it.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sushy-5.11.0/releasenotes/notes/idrac-reset-http-reachability-0998606718098c21.yaml
 
new/sushy-5.12.0/releasenotes/notes/idrac-reset-http-reachability-0998606718098c21.yaml
--- 
old/sushy-5.11.0/releasenotes/notes/idrac-reset-http-reachability-0998606718098c21.yaml
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/sushy-5.12.0/releasenotes/notes/idrac-reset-http-reachability-0998606718098c21.yaml
     2026-08-03 14:36:58.000000000 +0200
@@ -0,0 +1,11 @@
+---
+fixes:
+  - |
+    The Dell OEM manager extension no longer shells out to the external
+    ``ping`` binary when waiting for the iDRAC to reboot during
+    ``reset_idrac``. Reachability is now determined over HTTP(S) using the
+    existing Redfish connection. This removes the dependency on a ``ping``
+    executable being present (e.g. in container images) and on ICMP traffic
+    being permitted, and avoids an uncaught ``FileNotFoundError`` when the
+    binary is missing. See `bug 2151783
+    <https://bugs.launchpad.net/sushy/+bug/2151783>`__ for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sushy-5.11.0/releasenotes/notes/redfish-inspect-error-e7c0e4da33c02392.yaml 
new/sushy-5.12.0/releasenotes/notes/redfish-inspect-error-e7c0e4da33c02392.yaml
--- 
old/sushy-5.11.0/releasenotes/notes/redfish-inspect-error-e7c0e4da33c02392.yaml 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/sushy-5.12.0/releasenotes/notes/redfish-inspect-error-e7c0e4da33c02392.yaml 
    2026-08-03 14:36:58.000000000 +0200
@@ -0,0 +1,9 @@
+---
+fixes:
+  - |
+    Fixes a ``TypeError`` raised by ``Storage.drives_sizes_bytes`` when one
+    or more drives report a null ``CapacityBytes`` in the Redfish API response
+    (e.g. empty drive bays). The property now filters out drives with no
+    reported capacity before sorting, consistent with the existing behaviour
+    of ``SimpleStorageCollection.disks_sizes_bytes``.
+    See `LP#2150858 <https://bugs.launchpad.net/sushy/+bug/2150858>`_.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sushy-5.11.0/releasenotes/notes/remove-py310-d8d686ad11a67432.yaml 
new/sushy-5.12.0/releasenotes/notes/remove-py310-d8d686ad11a67432.yaml
--- old/sushy-5.11.0/releasenotes/notes/remove-py310-d8d686ad11a67432.yaml      
1970-01-01 01:00:00.000000000 +0100
+++ new/sushy-5.12.0/releasenotes/notes/remove-py310-d8d686ad11a67432.yaml      
2026-08-03 14:36:58.000000000 +0200
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    Support for Python 3.10 has been removed. Now Python 3.11 is the minimum
+    version supported.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sushy-5.11.0/setup.cfg new/sushy-5.12.0/setup.cfg
--- old/sushy-5.11.0/setup.cfg  2026-05-05 14:02:17.765028500 +0200
+++ new/sushy-5.12.0/setup.cfg  2026-08-03 14:37:45.466364600 +0200
@@ -6,7 +6,7 @@
 author = OpenStack
 author_email = [email protected]
 home_page = https://docs.openstack.org/sushy/latest/
-python_requires = >=3.10
+python_requires = >=3.11
 classifier = 
        Environment :: OpenStack
        Intended Audience :: Information Technology
@@ -17,9 +17,10 @@
        Programming Language :: Python :: Implementation :: CPython
        Programming Language :: Python :: 3 :: Only
        Programming Language :: Python :: 3
-       Programming Language :: Python :: 3.10
        Programming Language :: Python :: 3.11
        Programming Language :: Python :: 3.12
+       Programming Language :: Python :: 3.13
+       Programming Language :: Python :: 3.14
 
 [files]
 packages = 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sushy-5.11.0/sushy/oem/dell/resources/manager/manager.py 
new/sushy-5.12.0/sushy/oem/dell/resources/manager/manager.py
--- old/sushy-5.11.0/sushy/oem/dell/resources/manager/manager.py        
2026-05-05 14:01:27.000000000 +0200
+++ new/sushy-5.12.0/sushy/oem/dell/resources/manager/manager.py        
2026-08-03 14:36:58.000000000 +0200
@@ -14,7 +14,6 @@
 
 import json
 import logging
-import subprocess
 import time
 from urllib.parse import urlparse
 
@@ -127,6 +126,10 @@
     _IDRAC_IS_READY_RETRIES = 96
     _IDRAC_IS_READY_RETRY_DELAY_SEC = 10
 
+    # Short per-probe HTTP timeout so reachability checks fail fast during the
+    # iDRAC reboot window instead of blocking on the default request timeout.
+    _IDRAC_REACHABLE_PROBE_TIMEOUT_SEC = 10
+
     @property
     def import_system_configuration_uri(self):
         return self._actions.import_system_configuration.target_uri
@@ -567,76 +570,80 @@
                                             self.redfish_version,
                                             self.registries)
 
-    def _wait_for_idrac_state(self, host, alive=True, ping_count=3,
+    def _wait_for_idrac_state(self, host, alive=True, required_count=3,
                               retries=24):
-        """Wait for iDRAC to become pingable or not pingable.
+        """Wait for iDRAC to become reachable or not reachable.
 
-        :param host: Hostname or IP of the iDRAC interface.
-        :param alive: True for pingable state and False for not pingable
-            state.
-        :param ping_count: Number of consecutive ping results, per
+        Reachability is determined over HTTP(S) via the existing Redfish
+        connection, not ICMP -- no external ``ping`` binary is required.
+
+        :param host: Hostname or IP of the iDRAC interface, for logging.
+        :param alive: True for the reachable state and False for the not
+            reachable state.
+        :param required_count: Number of consecutive matching results, per
             'alive', for success.
-        :param retries: Number of ping retries.
-        :returns: True on reaching specified host ping state; otherwise,
-            False.
+        :param retries: Number of retries.
+        :returns: True on reaching specified host reachability state;
+            otherwise, False.
         """
         if alive:
-            ping_type = "pingable"
+            state = "reachable"
         else:
-            ping_type = "not pingable"
-        LOG.debug("Waiting for iDRAC %(host)s to become %(ping_type)s",
-                  {'host': host, 'ping_type': ping_type})
+            state = "not reachable"
+        LOG.debug("Waiting for iDRAC %(host)s to become %(state)s",
+                  {'host': host, 'state': state})
         response_count = 0
         while retries > 0:
-            response = self._ping_host(host)
+            response = self._is_reachable()
             retries -= 1
             if response == alive:
                 response_count += 1
-                LOG.debug("iDRAC %(host)s is %(ping_type)s, "
+                LOG.debug("iDRAC %(host)s is %(state)s, "
                           "count=%(response_count)s",
-                          {'host': host, 'ping_type': ping_type,
+                          {'host': host, 'state': state,
                            'response_count': response_count})
-                if response_count == ping_count:
+                if response_count == required_count:
                     LOG.debug("Reached specified %(alive)s count for iDRAC "
                               "%(host)s", {'alive': alive, 'host': host})
                     return True
             else:
                 response_count = 0
                 if alive:
-                    LOG.debug("iDRAC %(host)s is still not pingable",
+                    LOG.debug("iDRAC %(host)s is still not reachable",
                               {'host': host})
                 else:
-                    LOG.debug("iDRAC %(host)s is still pingable",
+                    LOG.debug("iDRAC %(host)s is still reachable",
                               {'host': host})
             time.sleep(10)
         return False
 
-    def _wait_for_idrac(self, host, post_pingable_wait_time):
-        """Wait for iDRAC to transition from unpingable to pingable.
+    def _wait_for_idrac(self, host, post_reachable_wait_time):
+        """Wait for iDRAC to transition from not reachable to reachable.
 
         :param host: Hostname or IP of the iDRAC interface.
-        :param post_pingable_wait_time: Amount of time in seconds to
-            wait after the host becomes pingable.
+        :param post_reachable_wait_time: Amount of time in seconds to
+            wait after the host becomes reachable.
         :raises: ExtensionError on failure to perform requested
             operation.
         """
         state_reached = self._wait_for_idrac_state(
-            host, alive=False, ping_count=2, retries=24)
+            host, alive=False, required_count=2, retries=24)
         if not state_reached:
             error_msg = ("Timed out waiting iDRAC %(host)s to become not "
-                         "pingable", {'host': host})
+                         "reachable", {'host': host})
             LOG.error(error_msg)
             raise sushy.exceptions.ExtensionError(error=error_msg)
-        LOG.debug("iDRAC %(host)s has become not pingable", {'host': host})
+        LOG.debug("iDRAC %(host)s has become not reachable", {'host': host})
         state_reached = self._wait_for_idrac_state(host, alive=True,
-                                                   ping_count=3, retries=24)
+                                                   required_count=3,
+                                                   retries=24)
         if not state_reached:
-            error_msg = ("Timed out waiting iDRAC %(host)s to become pingable",
-                         {'host': host})
+            error_msg = ("Timed out waiting iDRAC %(host)s to become "
+                         "reachable", {'host': host})
             LOG.error(error_msg)
             raise sushy.exceptions.ExtensionError(error=error_msg)
-        LOG.debug("iDRAC %(host)s has become pingable", {'host': host})
-        time.sleep(post_pingable_wait_time)
+        LOG.debug("iDRAC %(host)s has become reachable", {'host': host})
+        time.sleep(post_reachable_wait_time)
 
     def _wait_until_idrac_is_ready(self, host, retries, retry_delay):
         """Wait until the iDRAC is in a ready state.
@@ -666,14 +673,28 @@
             LOG.error(error_msg)
             raise sushy.exceptions.ExtensionError(error=error_msg)
 
-    def _ping_host(self, host):
-        """Ping the hostname or IP of a host.
+    def _is_reachable(self):
+        """Check whether the iDRAC HTTP(S) endpoint is reachable.
+
+        Probes the Redfish service root over the existing connection. Any HTTP
+        response (even an error status) means the iDRAC is up; a connection
+        failure (refused/reset/timeout/SSL, as during a reboot) means it is
+        not yet reachable.
 
-        :param host: Hostname or IP.
-        :returns: True if host is alive; otherwise, False.
+        :returns: True if the iDRAC answered, otherwise False.
         """
-        response = subprocess.call(["ping", "-c", "1", host])  # noqa:S603,S607
-        return response == 0
+        try:
+            self._conn.get(
+                path='/redfish/v1/',
+                timeout=self._IDRAC_REACHABLE_PROBE_TIMEOUT_SEC)
+        except sushy.exceptions.ConnectionError as exc:
+            LOG.debug("iDRAC is not reachable over HTTP: %(err)s",
+                      {'err': exc})
+            return False
+        except sushy.exceptions.HTTPError:
+            # An error status still proves the iDRAC is up and serving.
+            return True
+        return True
 
 
 def get_extension(*args, **kwargs):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sushy-5.11.0/sushy/resources/manager/constants.py 
new/sushy-5.12.0/sushy/resources/manager/constants.py
--- old/sushy-5.11.0/sushy/resources/manager/constants.py       2026-05-05 
14:01:27.000000000 +0200
+++ new/sushy-5.12.0/sushy/resources/manager/constants.py       2026-08-03 
14:36:58.000000000 +0200
@@ -148,6 +148,39 @@
     """A DVD-ROM format image."""
 
 
+# Values come from the Redfish VirtualMedia json-schema.
+# 
https://redfish.dmtf.org/schemas/VirtualMedia.v1_6_5.json#/definitions/TransferProtocolType
+class VirtualMediaTransferProtocolType(enum.Enum):
+    """Transfer Protocol Type constants."""
+
+    CIFS = 'CIFS'
+    """Common Internet File System (CIFS)."""
+
+    FTP = 'FTP'
+    """File Transfer Protocol (FTP)."""
+
+    HTTP = 'HTTP'
+    """Hypertext Transfer Protocol (HTTP)."""
+
+    HTTPS = 'HTTPS'
+    """Hypertext Transfer Protocol Secure (HTTPS)."""
+
+    NFS = 'NFS'
+    """Network File System (NFS)."""
+
+    OEM = 'OEM'
+    """A manufacturer-defined protocol."""
+
+    SCP = 'SCP'
+    """Secure Copy Protocol (SCP)."""
+
+    SFTP = 'SFTP'
+    """Secure File Transfer Protocol (SFTP)."""
+
+    TFTP = 'TFTP'
+    """Trivial File Transfer Protocol (TFTP)."""
+
+
 # Backward compatibility
 VIRTUAL_MEDIA_CD = VirtualMediaType.CD
 VIRTUAL_MEDIA_DVD = VirtualMediaType.DVD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sushy-5.11.0/sushy/resources/manager/virtual_media.py 
new/sushy-5.12.0/sushy/resources/manager/virtual_media.py
--- old/sushy-5.11.0/sushy/resources/manager/virtual_media.py   2026-05-05 
14:01:27.000000000 +0200
+++ new/sushy-5.12.0/sushy/resources/manager/virtual_media.py   2026-08-03 
14:36:58.000000000 +0200
@@ -189,7 +189,8 @@
         return False
 
     def insert_media(self, image, inserted=True, write_protected=True,
-                     username=None, password=None, transfer_method=None):
+                     username=None, password=None, transfer_method=None,
+                     transfer_protocol=None):
         """Attach remote media to virtual media
 
         :param image: a URI providing the location of the selected image
@@ -200,6 +201,8 @@
         :param password: Password for the image URI.
         :param transfer_method: Transfer method (stream or upload) to use
             for the image.
+        :param transfer_protocol: Transfer protocol used to retrieve the
+            image. When supplied, it is included in the initial request.
         """
         target_uri, use_patch = self._get_insert_media_uri()
         # NOTE(janders) Inserted and WriteProtected attributes are optional
@@ -226,6 +229,18 @@
                     parameter='transfer_method',
                     value=transfer_method,
                     valid_values=', '.join(map(str, mgr_cons.TransferMethod)))
+        if transfer_protocol is not None:
+            try:
+                payload['TransferProtocolType'] = (
+                    mgr_cons.VirtualMediaTransferProtocolType(
+                        transfer_protocol).value)
+            except ValueError:
+                raise exceptions.InvalidParameterValueError(
+                    parameter='transfer_protocol',
+                    value=transfer_protocol,
+                    valid_values=', '.join(
+                        protocol.value for protocol in
+                        mgr_cons.VirtualMediaTransferProtocolType))
 
         if use_patch:
             payload['Inserted'] = inserted
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sushy-5.11.0/sushy/resources/system/storage/storage.py 
new/sushy-5.12.0/sushy/resources/system/storage/storage.py
--- old/sushy-5.11.0/sushy/resources/system/storage/storage.py  2026-05-05 
14:01:27.000000000 +0200
+++ new/sushy-5.12.0/sushy/resources/system/storage/storage.py  2026-08-03 
14:36:58.000000000 +0200
@@ -112,7 +112,8 @@
         Returns the list of cached values until it (or its parent resource)
         is refreshed.
         """
-        return sorted(drv.capacity_bytes for drv in self.drives)
+        return sorted(drv.capacity_bytes for drv in self.drives
+                      if drv.capacity_bytes is not None)
 
     @property
     def drives_max_size_bytes(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sushy-5.11.0/sushy/tests/oem/dell/unit/resources/manager/test_manager.py 
new/sushy-5.12.0/sushy/tests/oem/dell/unit/resources/manager/test_manager.py
--- 
old/sushy-5.11.0/sushy/tests/oem/dell/unit/resources/manager/test_manager.py    
    2026-05-05 14:01:27.000000000 +0200
+++ 
new/sushy-5.12.0/sushy/tests/oem/dell/unit/resources/manager/test_manager.py    
    2026-08-03 14:36:58.000000000 +0200
@@ -606,9 +606,9 @@
         oem_manager._wait_for_idrac_state.return_value = True
         oem_manager._wait_for_idrac('1.2.3.4', 30)
         oem_manager._wait_for_idrac_state.assert_called_with(
-            '1.2.3.4', alive=True, ping_count=3, retries=24)
+            '1.2.3.4', alive=True, required_count=3, retries=24)
         oem_manager._wait_for_idrac_state.assert_any_call(
-            '1.2.3.4', alive=False, ping_count=2, retries=24)
+            '1.2.3.4', alive=False, required_count=2, retries=24)
         self.assertEqual(2, oem_manager._wait_for_idrac_state.call_count)
 
     @mock.patch('time.sleep', autospec=True)
@@ -630,39 +630,52 @@
                           oem_manager._wait_for_idrac, '1.2.3.4', 30)
 
     @mock.patch('time.sleep', autospec=True)
-    def test__wait_for_idrac_state_with_pingable(self, mock_time_sleep):
+    def test__wait_for_idrac_state_with_reachable(self, mock_time_sleep):
         oem_manager = self.manager.get_oem_extension('Dell')
-        oem_manager._ping_host = mock.Mock()
-        oem_manager._ping_host.return_value = True
+        oem_manager._is_reachable = mock.Mock()
+        oem_manager._is_reachable.return_value = True
         response = oem_manager._wait_for_idrac_state('1.2.3.4')
         self.assertEqual(True, response)
-        self.assertEqual(3, oem_manager._ping_host.call_count)
+        self.assertEqual(3, oem_manager._is_reachable.call_count)
 
     @mock.patch('time.sleep', autospec=True)
-    def test__wait_for_idrac_state_without_pingable(self, mock_time_sleep):
+    def test__wait_for_idrac_state_without_reachable(self, mock_time_sleep):
         oem_manager = self.manager.get_oem_extension('Dell')
-        oem_manager._ping_host = mock.Mock()
-        oem_manager._ping_host.return_value = False
+        oem_manager._is_reachable = mock.Mock()
+        oem_manager._is_reachable.return_value = False
         response = oem_manager._wait_for_idrac_state('1.2.3.4')
         self.assertEqual(False, response)
-        self.assertEqual(24, oem_manager._ping_host.call_count)
+        self.assertEqual(24, oem_manager._is_reachable.call_count)
 
-    @mock.patch('subprocess.call', autospec=True)
-    def test__ping_host_alive(self, mock_call):
+    def test__is_reachable_when_idrac_responds(self):
         oem_manager = self.manager.get_oem_extension('Dell')
-        mock_call.return_value = 0
+        oem_manager._conn.get = mock.Mock()
 
-        result = oem_manager._ping_host('1.2.3.4')
+        result = oem_manager._is_reachable()
 
         self.assertTrue(result)
-        mock_call.assert_called_with(["ping", "-c", "1", '1.2.3.4'])
+        oem_manager._conn.get.assert_called_once_with(
+            path='/redfish/v1/', timeout=mock.ANY)
 
-    @mock.patch('subprocess.call', autospec=True)
-    def test__ping_host_not_alive(self, mock_call):
+    def test__is_reachable_on_http_error(self):
         oem_manager = self.manager.get_oem_extension('Dell')
-        mock_call.return_value = 1
+        response = mock.Mock()
+        response.status_code = 500
+        response.json.return_value = {}
+        oem_manager._conn.get = mock.Mock(
+            side_effect=sushy.exceptions.ServerSideError(
+                'GET', '/redfish/v1/', response))
 
-        result = oem_manager._ping_host('1.2.3.4')
+        result = oem_manager._is_reachable()
+
+        self.assertTrue(result)
+
+    def test__is_reachable_on_connection_error(self):
+        oem_manager = self.manager.get_oem_extension('Dell')
+        oem_manager._conn.get = mock.Mock(
+            side_effect=sushy.exceptions.ConnectionError(
+                url='/redfish/v1/', error='boom'))
+
+        result = oem_manager._is_reachable()
 
         self.assertFalse(result)
-        mock_call.assert_called_with(["ping", "-c", "1", '1.2.3.4'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sushy-5.11.0/sushy/tests/unit/resources/certificateservice/test_certificate.py
 
new/sushy-5.12.0/sushy/tests/unit/resources/certificateservice/test_certificate.py
--- 
old/sushy-5.11.0/sushy/tests/unit/resources/certificateservice/test_certificate.py
  2026-05-05 14:01:27.000000000 +0200
+++ 
new/sushy-5.12.0/sushy/tests/unit/resources/certificateservice/test_certificate.py
  2026-08-03 14:36:58.000000000 +0200
@@ -50,10 +50,10 @@
                           sushy.KeyUsage.SERVER_AUTHENTICATION],
                          self.cert.key_usage)
         self.assertEqual(datetime.datetime(2018, 9, 7, 13, 22, 5,
-                                           tzinfo=datetime.timezone.utc),
+                                           tzinfo=datetime.UTC),
                          self.cert.valid_not_before)
         self.assertEqual(datetime.datetime(2019, 9, 7, 13, 22, 5,
-                                           tzinfo=datetime.timezone.utc),
+                                           tzinfo=datetime.UTC),
                          self.cert.valid_not_after)
         self.assertTrue(self.cert.serial_number)
         self.assertTrue(self.cert.fingerprint)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sushy-5.11.0/sushy/tests/unit/resources/manager/test_virtual_media.py 
new/sushy-5.12.0/sushy/tests/unit/resources/manager/test_virtual_media.py
--- old/sushy-5.11.0/sushy/tests/unit/resources/manager/test_virtual_media.py   
2026-05-05 14:01:27.000000000 +0200
+++ new/sushy-5.12.0/sushy/tests/unit/resources/manager/test_virtual_media.py   
2026-08-03 14:36:58.000000000 +0200
@@ -175,6 +175,27 @@
                           "https://www.dmtf.org/freeImages/Sardine.img";,
                           True, False, transfer_method='quickly!')
 
+    def test_insert_media_transfer_protocol(self):
+        self.assertFalse(self.sys_virtual_media._is_stale)
+        self.sys_virtual_media.insert_media(
+            "https://www.dmtf.org/freeImages/Sardine.img";, True, False,
+            transfer_protocol=(
+                mgr_cons.VirtualMediaTransferProtocolType.HTTPS))
+        self.sys_virtual_media._conn.post.assert_called_once_with(
+            ("/redfish/v1/Managers/BMC/VirtualMedia/Floppy1/Actions"
+             "/VirtualMedia.InsertMedia"),
+            data={"Image": "https://www.dmtf.org/freeImages/Sardine.img";,
+                  "WriteProtected": False,
+                  "TransferProtocolType": "HTTPS"}
+        )
+        self.assertTrue(self.sys_virtual_media._is_stale)
+
+    def test_insert_media_transfer_protocol_wrong_input(self):
+        self.assertRaises(exceptions.InvalidParameterValueError,
+                          self.sys_virtual_media.insert_media,
+                          "https://www.dmtf.org/freeImages/Sardine.img";,
+                          True, False, transfer_protocol='IPoIB')
+
     def test_insert_media_fallback(self):
         self.conn.get.return_value.headers = {'Allow': 'GET,HEAD,PATCH'}
         self.sys_virtual_media._actions.insert_media = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sushy-5.11.0/sushy.egg-info/PKG-INFO 
new/sushy-5.12.0/sushy.egg-info/PKG-INFO
--- old/sushy-5.11.0/sushy.egg-info/PKG-INFO    2026-05-05 14:02:17.000000000 
+0200
+++ new/sushy-5.12.0/sushy.egg-info/PKG-INFO    2026-08-03 14:37:45.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: sushy
-Version: 5.11.0
+Version: 5.12.0
 Summary: Sushy is a small Python library to communicate with Redfish based 
systems
 Home-page: https://docs.openstack.org/sushy/latest/
 Author: OpenStack
@@ -14,10 +14,11 @@
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
-Requires-Python: >=3.10
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
+Requires-Python: >=3.11
 License-File: LICENSE
 Requires-Dist: pbr>=6.0.0
 Requires-Dist: requests>=2.14.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sushy-5.11.0/sushy.egg-info/SOURCES.txt 
new/sushy-5.12.0/sushy.egg-info/SOURCES.txt
--- old/sushy-5.11.0/sushy.egg-info/SOURCES.txt 2026-05-05 14:02:17.000000000 
+0200
+++ new/sushy-5.12.0/sushy.egg-info/SOURCES.txt 2026-08-03 14:37:45.000000000 
+0200
@@ -68,6 +68,7 @@
 releasenotes/notes/add-thermal-resource-5c965a3c940f9028.yaml
 releasenotes/notes/add-tls-configuration-8a94bb1bbeb79e6a.yaml
 releasenotes/notes/add-virtual-media-support-f522fbec4420341c.yaml
+releasenotes/notes/add-virtual-media-transfer-protocol-6dd43b8464953e18.yaml
 releasenotes/notes/add_composition_service-84750d8d1d96474a.yaml
 releasenotes/notes/add_ethernet_interface-df308f814f0e4bce.yaml
 releasenotes/notes/add_keyword_argument_for_connector-cea5dc4e6c01b548.yaml
@@ -130,6 +131,7 @@
 releasenotes/notes/handle-missing-collection-members-8ccbd4588790eabe.yaml
 releasenotes/notes/handle_transfer_method-a51d5a17e381ebee.yaml
 releasenotes/notes/health_literals_change-0e3fc0c439b765e3.yaml
+releasenotes/notes/idrac-reset-http-reachability-0998606718098c21.yaml
 releasenotes/notes/idrac10-settings-resource-c18e754c661a7056.yaml
 releasenotes/notes/ignore-empty-string-etags-ee44617d7b0f72ce.yaml
 releasenotes/notes/increase-server-retries-5f11edde8ee0b461.yaml
@@ -148,10 +150,12 @@
 releasenotes/notes/raise-error-on-async-task-failure-b67c7bc189a4d6ca.yaml
 releasenotes/notes/re-raise-1fe9f912691e893e.yaml
 
releasenotes/notes/reauthentication-session-fallback-failure-fixes-4f0dcfdad1afd2d7.yaml
+releasenotes/notes/redfish-inspect-error-e7c0e4da33c02392.yaml
 releasenotes/notes/redfish-response-log-294f3f10b770e356.yaml
 releasenotes/notes/refactor-taskmonitor-update-volume-ba99380188395852.yaml
 releasenotes/notes/releasenote-d7138d1e1d414632.yaml
 releasenotes/notes/remove-deprecated-task-monitors-58c505d43e1fa6a7.yaml
+releasenotes/notes/remove-py310-d8d686ad11a67432.yaml
 releasenotes/notes/remove-py38-6eebcd268c6f8e37.yaml
 releasenotes/notes/remove-py39-9d9717edf25353f8.yaml
 releasenotes/notes/retry-if-transferprototype-missing-9cae57f3ecf470a9.yaml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sushy-5.11.0/sushy.egg-info/pbr.json 
new/sushy-5.12.0/sushy.egg-info/pbr.json
--- old/sushy-5.11.0/sushy.egg-info/pbr.json    2026-05-05 14:02:17.000000000 
+0200
+++ new/sushy-5.12.0/sushy.egg-info/pbr.json    2026-08-03 14:37:45.000000000 
+0200
@@ -1 +1 @@
-{"git_version": "1909826", "is_release": true}
\ No newline at end of file
+{"git_version": "ebc9454", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sushy-5.11.0/zuul.d/project.yaml 
new/sushy-5.12.0/zuul.d/project.yaml
--- old/sushy-5.11.0/zuul.d/project.yaml        2026-05-05 14:01:27.000000000 
+0200
+++ new/sushy-5.12.0/zuul.d/project.yaml        2026-08-03 14:36:58.000000000 
+0200
@@ -3,6 +3,7 @@
       - check-requirements
       - openstack-cover-jobs
       - openstack-python3-jobs
+      - openstack-python3-next-jobs
       - publish-openstack-docs-pti
       - release-notes-jobs-python3
     check:

Reply via email to