Mock out the correct greenthread sleep method
It seems at some point oslo_service loopingcall started using eventletutils from oslo_utils to sleep during the loopingcall retries, and some untittests started taking up to 40 seconds to complete. This change mocks out the correct method offering significant speedup to unittests' run time. The EventletEvent class is introduced to eventletutils in version 3.38.0 so lower constraints are bumped as well. Change-Id: Id7e6ff2a4748b5301e2259acdc760ac7f56b96c3
This commit is contained in:
parent
306aaccca6
commit
68a5e31a54
@ -27,7 +27,8 @@ ibmc_client = importutils.try_import('ibmc_client')
|
|||||||
ibmc_error = importutils.try_import('ibmc_client.exceptions')
|
ibmc_error = importutils.try_import('ibmc_client.exceptions')
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('eventlet.greenthread.sleep', lambda _t: None)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait',
|
||||||
|
lambda *args, **kwargs: None)
|
||||||
class IBMCPowerTestCase(base.IBMCTestCase):
|
class IBMCPowerTestCase(base.IBMCTestCase):
|
||||||
|
|
||||||
def test_get_properties(self):
|
def test_get_properties(self):
|
||||||
@ -183,7 +184,8 @@ class IBMCPowerTestCase(base.IBMCTestCase):
|
|||||||
sorted(supported_power_states))
|
sorted(supported_power_states))
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('eventlet.greenthread.sleep', lambda _t: None)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait',
|
||||||
|
lambda *args, **kwargs: None)
|
||||||
class IBMCPowerRebootTestCase(base.IBMCTestCase):
|
class IBMCPowerRebootTestCase(base.IBMCTestCase):
|
||||||
|
|
||||||
@mock.patch.object(ibmc_client, 'connect', autospec=True)
|
@mock.patch.object(ibmc_client, 'connect', autospec=True)
|
||||||
|
@ -22,7 +22,8 @@ from ironic.tests.unit.drivers.modules.ibmc import base
|
|||||||
ibmc_client = importutils.try_import('ibmc_client')
|
ibmc_client = importutils.try_import('ibmc_client')
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('eventlet.greenthread.sleep', lambda _t: None)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait',
|
||||||
|
lambda *args, **kwargs: None)
|
||||||
class IBMCVendorTestCase(base.IBMCTestCase):
|
class IBMCVendorTestCase(base.IBMCTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -50,7 +50,8 @@ class IRMCPowerInternalMethodsTestCase(test_common.BaseIRMCTest):
|
|||||||
self.assertFalse(irmc_power._is_expected_power_state(
|
self.assertFalse(irmc_power._is_expected_power_state(
|
||||||
target_state, boot_status_value))
|
target_state, boot_status_value))
|
||||||
|
|
||||||
@mock.patch('eventlet.greenthread.sleep', lambda n: None)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait',
|
||||||
|
lambda *args, **kwargs: None)
|
||||||
@mock.patch('ironic.drivers.modules.irmc.power.snmp.SNMPClient',
|
@mock.patch('ironic.drivers.modules.irmc.power.snmp.SNMPClient',
|
||||||
spec_set=True, autospec=True)
|
spec_set=True, autospec=True)
|
||||||
def test__wait_power_state_soft_power_off(self, snmpclient_mock):
|
def test__wait_power_state_soft_power_off(self, snmpclient_mock):
|
||||||
@ -69,7 +70,8 @@ class IRMCPowerInternalMethodsTestCase(test_common.BaseIRMCTest):
|
|||||||
self.assertEqual(states.POWER_OFF, task.node.power_state)
|
self.assertEqual(states.POWER_OFF, task.node.power_state)
|
||||||
self.assertEqual(states.NOSTATE, task.node.target_power_state)
|
self.assertEqual(states.NOSTATE, task.node.target_power_state)
|
||||||
|
|
||||||
@mock.patch('eventlet.greenthread.sleep', lambda n: None)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait',
|
||||||
|
lambda *args, **kwargs: None)
|
||||||
@mock.patch('ironic.drivers.modules.irmc.power.snmp.SNMPClient',
|
@mock.patch('ironic.drivers.modules.irmc.power.snmp.SNMPClient',
|
||||||
spec_set=True, autospec=True)
|
spec_set=True, autospec=True)
|
||||||
def test__wait_power_state_soft_reboot(self, snmpclient_mock):
|
def test__wait_power_state_soft_reboot(self, snmpclient_mock):
|
||||||
@ -88,7 +90,8 @@ class IRMCPowerInternalMethodsTestCase(test_common.BaseIRMCTest):
|
|||||||
self.assertEqual(states.POWER_ON, task.node.power_state)
|
self.assertEqual(states.POWER_ON, task.node.power_state)
|
||||||
self.assertEqual(states.NOSTATE, task.node.target_power_state)
|
self.assertEqual(states.NOSTATE, task.node.target_power_state)
|
||||||
|
|
||||||
@mock.patch('eventlet.greenthread.sleep', lambda n: None)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait',
|
||||||
|
lambda *args, **kwargs: None)
|
||||||
@mock.patch('ironic.drivers.modules.irmc.power.snmp.SNMPClient',
|
@mock.patch('ironic.drivers.modules.irmc.power.snmp.SNMPClient',
|
||||||
spec_set=True, autospec=True)
|
spec_set=True, autospec=True)
|
||||||
def test__wait_power_state_timeout(self, snmpclient_mock):
|
def test__wait_power_state_timeout(self, snmpclient_mock):
|
||||||
|
@ -42,7 +42,8 @@ class NoBiosSystem(object):
|
|||||||
resource=self)
|
resource=self)
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('eventlet.greenthread.sleep', lambda _t: None)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait',
|
||||||
|
lambda *args, **kwargs: None)
|
||||||
class RedfishBiosTestCase(db_base.DbTestCase):
|
class RedfishBiosTestCase(db_base.DbTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -36,7 +36,8 @@ sushy = importutils.try_import('sushy')
|
|||||||
INFO_DICT = db_utils.get_test_redfish_info()
|
INFO_DICT = db_utils.get_test_redfish_info()
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('eventlet.greenthread.sleep', lambda _t: None)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait',
|
||||||
|
lambda *args, **kwargs: None)
|
||||||
class RedfishVirtualMediaBootTestCase(db_base.DbTestCase):
|
class RedfishVirtualMediaBootTestCase(db_base.DbTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -30,7 +30,8 @@ sushy = importutils.try_import('sushy')
|
|||||||
INFO_DICT = db_utils.get_test_redfish_info()
|
INFO_DICT = db_utils.get_test_redfish_info()
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('eventlet.greenthread.sleep', lambda _t: None)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait',
|
||||||
|
lambda *args, **kwargs: None)
|
||||||
class RedfishPowerTestCase(db_base.DbTestCase):
|
class RedfishPowerTestCase(db_base.DbTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -1348,7 +1348,7 @@ class IPMIToolPrivateMethodTestCase(Base):
|
|||||||
kill_on_timeout=True)
|
kill_on_timeout=True)
|
||||||
|
|
||||||
@mock.patch.object(ipmi, '_exec_ipmitool', autospec=True)
|
@mock.patch.object(ipmi, '_exec_ipmitool', autospec=True)
|
||||||
@mock.patch('eventlet.greenthread.sleep', autospec=True)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait', autospec=True)
|
||||||
def test__power_on_max_retries(self, sleep_mock, mock_exec):
|
def test__power_on_max_retries(self, sleep_mock, mock_exec):
|
||||||
self.config(command_retry_timeout=2, group='ipmi')
|
self.config(command_retry_timeout=2, group='ipmi')
|
||||||
|
|
||||||
@ -1370,7 +1370,7 @@ class IPMIToolPrivateMethodTestCase(Base):
|
|||||||
self.assertEqual(expected, mock_exec.call_args_list)
|
self.assertEqual(expected, mock_exec.call_args_list)
|
||||||
|
|
||||||
@mock.patch.object(ipmi, '_exec_ipmitool', autospec=True)
|
@mock.patch.object(ipmi, '_exec_ipmitool', autospec=True)
|
||||||
@mock.patch('eventlet.greenthread.sleep', autospec=True)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait', autospec=True)
|
||||||
def test__soft_power_off(self, sleep_mock, mock_exec):
|
def test__soft_power_off(self, sleep_mock, mock_exec):
|
||||||
|
|
||||||
def side_effect(driver_info, command, **kwargs):
|
def side_effect(driver_info, command, **kwargs):
|
||||||
@ -1390,7 +1390,7 @@ class IPMIToolPrivateMethodTestCase(Base):
|
|||||||
self.assertEqual(states.POWER_OFF, state)
|
self.assertEqual(states.POWER_OFF, state)
|
||||||
|
|
||||||
@mock.patch.object(ipmi, '_exec_ipmitool', autospec=True)
|
@mock.patch.object(ipmi, '_exec_ipmitool', autospec=True)
|
||||||
@mock.patch('eventlet.greenthread.sleep', autospec=True)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait', autospec=True)
|
||||||
def test__soft_power_off_max_retries(self, sleep_mock, mock_exec):
|
def test__soft_power_off_max_retries(self, sleep_mock, mock_exec):
|
||||||
|
|
||||||
def side_effect(driver_info, command, **kwargs):
|
def side_effect(driver_info, command, **kwargs):
|
||||||
@ -1412,7 +1412,7 @@ class IPMIToolPrivateMethodTestCase(Base):
|
|||||||
|
|
||||||
@mock.patch.object(ipmi, '_power_status', autospec=True)
|
@mock.patch.object(ipmi, '_power_status', autospec=True)
|
||||||
@mock.patch.object(ipmi, '_exec_ipmitool', autospec=True)
|
@mock.patch.object(ipmi, '_exec_ipmitool', autospec=True)
|
||||||
@mock.patch('eventlet.greenthread.sleep', autospec=True)
|
@mock.patch('oslo_utils.eventletutils.EventletEvent.wait', autospec=True)
|
||||||
def test___set_and_wait_no_needless_status_polling(
|
def test___set_and_wait_no_needless_status_polling(
|
||||||
self, sleep_mock, mock_exec, mock_status):
|
self, sleep_mock, mock_exec, mock_status):
|
||||||
# Check that if the call to power state change fails, it doesn't
|
# Check that if the call to power state change fails, it doesn't
|
||||||
|
@ -747,7 +747,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_called_once_with(driver._snmp_oid())
|
mock_client.get.assert_called_once_with(driver._snmp_oid())
|
||||||
self.assertEqual(states.POWER_OFF, pstate)
|
self.assertEqual(states.POWER_OFF, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_on_delay(self, mock_sleep, mock_get_client):
|
def test_power_on_delay(self, mock_sleep, mock_get_client):
|
||||||
# Ensure driver waits for the state to change following a power on
|
# Ensure driver waits for the state to change following a power on
|
||||||
mock_client = mock_get_client.return_value
|
mock_client = mock_get_client.return_value
|
||||||
@ -761,7 +761,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.POWER_ON, pstate)
|
self.assertEqual(states.POWER_ON, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_off_delay(self, mock_sleep, mock_get_client):
|
def test_power_off_delay(self, mock_sleep, mock_get_client):
|
||||||
# Ensure driver waits for the state to change following a power off
|
# Ensure driver waits for the state to change following a power off
|
||||||
mock_client = mock_get_client.return_value
|
mock_client = mock_get_client.return_value
|
||||||
@ -775,7 +775,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.POWER_OFF, pstate)
|
self.assertEqual(states.POWER_OFF, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_on_invalid_state(self, mock_sleep, mock_get_client):
|
def test_power_on_invalid_state(self, mock_sleep, mock_get_client):
|
||||||
# Ensure driver retries when querying unexpected states following a
|
# Ensure driver retries when querying unexpected states following a
|
||||||
# power on
|
# power on
|
||||||
@ -790,7 +790,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.ERROR, pstate)
|
self.assertEqual(states.ERROR, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_off_invalid_state(self, mock_sleep, mock_get_client):
|
def test_power_off_invalid_state(self, mock_sleep, mock_get_client):
|
||||||
# Ensure driver retries when querying unexpected states following a
|
# Ensure driver retries when querying unexpected states following a
|
||||||
# power off
|
# power off
|
||||||
@ -851,7 +851,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
driver.value_power_off)
|
driver.value_power_off)
|
||||||
mock_client.get.assert_called_once_with(driver._snmp_oid())
|
mock_client.get.assert_called_once_with(driver._snmp_oid())
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_on_timeout(self, mock_sleep, mock_get_client):
|
def test_power_on_timeout(self, mock_sleep, mock_get_client):
|
||||||
# Ensure that a power on consistency poll timeout causes an error
|
# Ensure that a power on consistency poll timeout causes an error
|
||||||
mock_client = mock_get_client.return_value
|
mock_client = mock_get_client.return_value
|
||||||
@ -865,7 +865,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.ERROR, pstate)
|
self.assertEqual(states.ERROR, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_off_timeout(self, mock_sleep, mock_get_client):
|
def test_power_off_timeout(self, mock_sleep, mock_get_client):
|
||||||
# Ensure that a power off consistency poll timeout causes an error
|
# Ensure that a power off consistency poll timeout causes an error
|
||||||
mock_client = mock_get_client.return_value
|
mock_client = mock_get_client.return_value
|
||||||
@ -894,7 +894,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.POWER_ON, pstate)
|
self.assertEqual(states.POWER_ON, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_reset_off_delay(self, mock_sleep, mock_get_client):
|
def test_power_reset_off_delay(self, mock_sleep, mock_get_client):
|
||||||
# Ensure driver waits for the power off state change following a power
|
# Ensure driver waits for the power off state change following a power
|
||||||
# reset
|
# reset
|
||||||
@ -911,7 +911,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.POWER_ON, pstate)
|
self.assertEqual(states.POWER_ON, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_reset_on_delay(self, mock_sleep, mock_get_client):
|
def test_power_reset_on_delay(self, mock_sleep, mock_get_client):
|
||||||
# Ensure driver waits for the power on state change following a power
|
# Ensure driver waits for the power on state change following a power
|
||||||
# reset
|
# reset
|
||||||
@ -928,7 +928,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.POWER_ON, pstate)
|
self.assertEqual(states.POWER_ON, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_reset_off_delay_on_delay(self, mock_sleep, mock_get_client):
|
def test_power_reset_off_delay_on_delay(self, mock_sleep, mock_get_client):
|
||||||
# Ensure driver waits for both state changes following a power reset
|
# Ensure driver waits for both state changes following a power reset
|
||||||
mock_client = mock_get_client.return_value
|
mock_client = mock_get_client.return_value
|
||||||
@ -945,7 +945,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.POWER_ON, pstate)
|
self.assertEqual(states.POWER_ON, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_reset_off_invalid_state(self, mock_sleep, mock_get_client):
|
def test_power_reset_off_invalid_state(self, mock_sleep, mock_get_client):
|
||||||
# Ensure driver retries when querying unexpected states following a
|
# Ensure driver retries when querying unexpected states following a
|
||||||
# power off during a reset
|
# power off during a reset
|
||||||
@ -960,7 +960,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.ERROR, pstate)
|
self.assertEqual(states.ERROR, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_reset_on_invalid_state(self, mock_sleep, mock_get_client):
|
def test_power_reset_on_invalid_state(self, mock_sleep, mock_get_client):
|
||||||
# Ensure driver retries when querying unexpected states following a
|
# Ensure driver retries when querying unexpected states following a
|
||||||
# power on during a reset
|
# power on during a reset
|
||||||
@ -977,7 +977,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.ERROR, pstate)
|
self.assertEqual(states.ERROR, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_reset_off_timeout(self, mock_sleep, mock_get_client):
|
def test_power_reset_off_timeout(self, mock_sleep, mock_get_client):
|
||||||
# Ensure that a power off consistency poll timeout during a reset
|
# Ensure that a power off consistency poll timeout during a reset
|
||||||
# causes an error
|
# causes an error
|
||||||
@ -992,7 +992,7 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_client.get.assert_has_calls(calls)
|
mock_client.get.assert_has_calls(calls)
|
||||||
self.assertEqual(states.ERROR, pstate)
|
self.assertEqual(states.ERROR, pstate)
|
||||||
|
|
||||||
@mock.patch("eventlet.greenthread.sleep", autospec=True)
|
@mock.patch("oslo_utils.eventletutils.EventletEvent.wait", autospec=True)
|
||||||
def test_power_reset_on_timeout(self, mock_sleep, mock_get_client):
|
def test_power_reset_on_timeout(self, mock_sleep, mock_get_client):
|
||||||
# Ensure that a power on consistency poll timeout during a reset
|
# Ensure that a power on consistency poll timeout during a reset
|
||||||
# causes an error
|
# causes an error
|
||||||
|
@ -37,7 +37,7 @@ oslo.rootwrap==5.8.0
|
|||||||
oslo.serialization==2.18.0
|
oslo.serialization==2.18.0
|
||||||
oslo.service==1.24.0
|
oslo.service==1.24.0
|
||||||
oslo.upgradecheck==0.1.0
|
oslo.upgradecheck==0.1.0
|
||||||
oslo.utils==3.33.0
|
oslo.utils==3.38.0
|
||||||
oslo.versionedobjects==1.31.2
|
oslo.versionedobjects==1.31.2
|
||||||
oslotest==3.2.0
|
oslotest==3.2.0
|
||||||
osprofiler==1.5.0
|
osprofiler==1.5.0
|
||||||
|
@ -29,7 +29,7 @@ oslo.reports>=1.18.0 # Apache-2.0
|
|||||||
oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
|
oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
|
||||||
oslo.service!=1.28.1,>=1.24.0 # Apache-2.0
|
oslo.service!=1.28.1,>=1.24.0 # Apache-2.0
|
||||||
oslo.upgradecheck>=0.1.0 # Apache-2.0
|
oslo.upgradecheck>=0.1.0 # Apache-2.0
|
||||||
oslo.utils>=3.33.0 # Apache-2.0
|
oslo.utils>=3.38.0 # Apache-2.0
|
||||||
osprofiler>=1.5.0 # Apache-2.0
|
osprofiler>=1.5.0 # Apache-2.0
|
||||||
os-traits>=0.4.0 # Apache-2.0
|
os-traits>=0.4.0 # Apache-2.0
|
||||||
pecan!=1.0.2,!=1.0.3,!=1.0.4,!=1.2,>=1.0.0 # BSD
|
pecan!=1.0.2,!=1.0.3,!=1.0.4,!=1.2,>=1.0.0 # BSD
|
||||||
|
Loading…
Reference in New Issue
Block a user