1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-20 10:59:24 +00:00

Update py-improv-ble-client to 2.0.1 (#159233)

This commit is contained in:
Matthew Vance
2025-12-16 23:27:06 -08:00
committed by GitHub
parent 7115db5d22
commit 48d671ad5f
5 changed files with 93 additions and 31 deletions

View File

@@ -261,7 +261,8 @@ class ImprovBLEConfigFlow(ConfigFlow, domain=DOMAIN):
if self._can_identify is None: if self._can_identify is None:
try: try:
self._can_identify = await self._try_call(device.can_identify()) await self._try_call(device.ensure_connected())
self._can_identify = device.can_identify
except AbortFlow as err: except AbortFlow as err:
return self.async_abort(reason=err.reason) return self.async_abort(reason=err.reason)
if self._can_identify: if self._can_identify:

View File

@@ -13,5 +13,5 @@
"documentation": "https://www.home-assistant.io/integrations/improv_ble", "documentation": "https://www.home-assistant.io/integrations/improv_ble",
"integration_type": "device", "integration_type": "device",
"iot_class": "local_polling", "iot_class": "local_polling",
"requirements": ["py-improv-ble-client==1.0.3"] "requirements": ["py-improv-ble-client==2.0.1"]
} }

2
requirements_all.txt generated
View File

@@ -1810,7 +1810,7 @@ py-dactyl==2.0.4
py-dormakaba-dkey==1.0.6 py-dormakaba-dkey==1.0.6
# homeassistant.components.improv_ble # homeassistant.components.improv_ble
py-improv-ble-client==1.0.3 py-improv-ble-client==2.0.1
# homeassistant.components.madvr # homeassistant.components.madvr
py-madvr2==1.6.40 py-madvr2==1.6.40

View File

@@ -1550,7 +1550,7 @@ py-dactyl==2.0.4
py-dormakaba-dkey==1.0.6 py-dormakaba-dkey==1.0.6
# homeassistant.components.improv_ble # homeassistant.components.improv_ble
py-improv-ble-client==1.0.3 py-improv-ble-client==2.0.1
# homeassistant.components.madvr # homeassistant.components.madvr
py-madvr2==1.6.40 py-madvr2==1.6.40

View File

@@ -2,7 +2,7 @@
import asyncio import asyncio
from collections.abc import Callable from collections.abc import Callable
from unittest.mock import patch from unittest.mock import PropertyMock, patch
from bleak.exc import BleakError from bleak.exc import BleakError
from improv_ble_client import ( from improv_ble_client import (
@@ -294,8 +294,13 @@ async def test_bluetooth_rediscovery_after_successful_provision(
assert result["step_id"] == "bluetooth_confirm" assert result["step_id"] == "bluetooth_confirm"
# Start provisioning # Start provisioning
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=False patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=False,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -375,8 +380,13 @@ async def _test_common_success_with_identify(
hass: HomeAssistant, result: FlowResult, address: str hass: HomeAssistant, result: FlowResult, address: str
) -> None: ) -> None:
"""Test bluetooth and user flow success paths.""" """Test bluetooth and user flow success paths."""
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=True patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=True,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -420,8 +430,13 @@ async def _test_common_success_wo_identify(
placeholders: dict[str, str] | None = None, placeholders: dict[str, str] | None = None,
) -> None: ) -> None:
"""Test bluetooth and user flow success paths.""" """Test bluetooth and user flow success paths."""
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=False patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=False,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -475,8 +490,13 @@ async def _test_common_success_wo_identify_w_authorize(
hass: HomeAssistant, result: FlowResult, address: str hass: HomeAssistant, result: FlowResult, address: str
) -> None: ) -> None:
"""Test bluetooth and user flow success paths.""" """Test bluetooth and user flow success paths."""
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=False patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=False,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -571,7 +591,7 @@ async def test_bluetooth_step_already_in_progress(hass: HomeAssistant) -> None:
(improv_ble_errors.CharacteristicMissingError, "characteristic_missing"), (improv_ble_errors.CharacteristicMissingError, "characteristic_missing"),
], ],
) )
async def test_can_identify_fails(hass: HomeAssistant, exc, error) -> None: async def test_ensure_connected_fails(hass: HomeAssistant, exc, error) -> None:
"""Test bluetooth flow with error.""" """Test bluetooth flow with error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@@ -588,7 +608,8 @@ async def test_can_identify_fails(hass: HomeAssistant, exc, error) -> None:
assert result["errors"] is None assert result["errors"] is None
with patch( with patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", side_effect=exc f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected",
side_effect=exc,
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -622,8 +643,13 @@ async def test_identify_fails(hass: HomeAssistant, exc, error) -> None:
assert result["step_id"] == "bluetooth_confirm" assert result["step_id"] == "bluetooth_confirm"
assert result["errors"] is None assert result["errors"] is None
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=True patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=True,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -665,8 +691,13 @@ async def test_need_authorization_fails(hass: HomeAssistant, exc, error) -> None
assert result["step_id"] == "bluetooth_confirm" assert result["step_id"] == "bluetooth_confirm"
assert result["errors"] is None assert result["errors"] is None
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=False patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=False,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -709,8 +740,13 @@ async def test_authorize_fails(hass: HomeAssistant, exc, error) -> None:
assert result["step_id"] == "bluetooth_confirm" assert result["step_id"] == "bluetooth_confirm"
assert result["errors"] is None assert result["errors"] is None
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=False patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=False,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -752,8 +788,13 @@ async def _test_provision_error(hass: HomeAssistant, exc) -> str:
assert result["step_id"] == "bluetooth_confirm" assert result["step_id"] == "bluetooth_confirm"
assert result["errors"] is None assert result["errors"] is None
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=False patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=False,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -878,8 +919,13 @@ async def test_flow_chaining_with_next_flow(hass: HomeAssistant) -> None:
assert result["step_id"] == "bluetooth_confirm" assert result["step_id"] == "bluetooth_confirm"
# Start provisioning # Start provisioning
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=False patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=False,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -946,8 +992,13 @@ async def test_flow_chaining_timeout(hass: HomeAssistant) -> None:
assert result["step_id"] == "bluetooth_confirm" assert result["step_id"] == "bluetooth_confirm"
# Start provisioning # Start provisioning
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=False patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=False,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -998,8 +1049,13 @@ async def test_flow_chaining_with_redirect_url(hass: HomeAssistant) -> None:
assert result["step_id"] == "bluetooth_confirm" assert result["step_id"] == "bluetooth_confirm"
# Start provisioning # Start provisioning
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=False patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=False,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],
@@ -1069,8 +1125,13 @@ async def test_flow_chaining_future_already_done(
assert result["step_id"] == "bluetooth_confirm" assert result["step_id"] == "bluetooth_confirm"
# Start provisioning # Start provisioning
with patch( with (
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify", return_value=False patch(
f"{IMPROV_BLE}.config_flow.ImprovBLEClient.can_identify",
return_value=False,
new_callable=PropertyMock,
),
patch(f"{IMPROV_BLE}.config_flow.ImprovBLEClient.ensure_connected"),
): ):
result = await hass.config_entries.flow.async_configure( result = await hass.config_entries.flow.async_configure(
result["flow_id"], result["flow_id"],