1
mirror of https://github.com/home-assistant/core synced 2024-07-30 21:18:57 +02:00

Use disabled_by constants (#49584)

Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
Ville Skyttä 2021-04-23 10:56:42 +03:00 committed by GitHub
parent d52bc2373f
commit a396619251
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 92 additions and 75 deletions

View File

@ -311,7 +311,7 @@ async def config_entry_update(hass, connection, msg):
"type": "config_entries/disable",
"entry_id": str,
# We only allow setting disabled_by user via API.
"disabled_by": vol.Any("user", None),
"disabled_by": vol.Any(config_entries.DISABLED_USER, None),
}
)
async def config_entry_disable(hass, connection, msg):

View File

@ -7,7 +7,7 @@ from homeassistant.components.websocket_api.decorators import (
require_admin,
)
from homeassistant.core import callback
from homeassistant.helpers.device_registry import async_get_registry
from homeassistant.helpers.device_registry import DISABLED_USER, async_get_registry
WS_TYPE_LIST = "config/device_registry/list"
SCHEMA_WS_LIST = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend(
@ -22,7 +22,7 @@ SCHEMA_WS_UPDATE = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend(
vol.Optional("area_id"): vol.Any(str, None),
vol.Optional("name_by_user"): vol.Any(str, None),
# We only allow setting disabled_by user via API.
vol.Optional("disabled_by"): vol.Any("user", None),
vol.Optional("disabled_by"): vol.Any(DISABLED_USER, None),
}
)

View File

@ -10,7 +10,7 @@ from homeassistant.components.websocket_api.decorators import (
)
from homeassistant.core import callback
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.entity_registry import async_get_registry
from homeassistant.helpers.entity_registry import DISABLED_USER, async_get_registry
async def async_setup(hass):
@ -75,7 +75,7 @@ async def websocket_get_entity(hass, connection, msg):
vol.Optional("area_id"): vol.Any(str, None),
vol.Optional("new_entity_id"): str,
# We only allow setting disabled_by user via API.
vol.Optional("disabled_by"): vol.Any("user", None),
vol.Optional("disabled_by"): vol.Any(DISABLED_USER, None),
}
)
async def websocket_update_entity(hass, connection, msg):

View File

@ -173,7 +173,7 @@ async def test_sensor_disabled(hass):
assert entry
assert entry.unique_id == "0123456-apparenttemperature"
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
# Test enabling entity
updated_entry = registry.async_update_entity(

View File

@ -250,7 +250,7 @@ async def test_disabled_by_default_sensors(hass):
assert entry
assert entry.unique_id == "0123456789_uptime"
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
async def test_availability(hass):

View File

@ -73,7 +73,7 @@ async def test_get_entries(hass, client):
domain="comp3",
title="Test 3",
source="bla3",
disabled_by="user",
disabled_by=core_ce.DISABLED_USER,
).add_to_hass(hass)
resp = await client.get("/api/config/config_entries/entry")
@ -112,7 +112,7 @@ async def test_get_entries(hass, client):
"connection_class": "unknown",
"supports_options": False,
"supports_unload": False,
"disabled_by": "user",
"disabled_by": core_ce.DISABLED_USER,
"reason": None,
},
]
@ -800,14 +800,14 @@ async def test_disable_entry(hass, hass_ws_client):
"id": 5,
"type": "config_entries/disable",
"entry_id": entry.entry_id,
"disabled_by": "user",
"disabled_by": core_ce.DISABLED_USER,
}
)
response = await ws_client.receive_json()
assert response["success"]
assert response["result"] == {"require_restart": True}
assert entry.disabled_by == "user"
assert entry.disabled_by == core_ce.DISABLED_USER
assert entry.state == "failed_unload"
# Enable
@ -853,7 +853,7 @@ async def test_disable_entry_nonexisting(hass, hass_ws_client):
"id": 5,
"type": "config_entries/disable",
"entry_id": "non_existing",
"disabled_by": "user",
"disabled_by": core_ce.DISABLED_USER,
}
)
response = await ws_client.receive_json()

View File

@ -2,6 +2,7 @@
import pytest
from homeassistant.components.config import device_registry
from homeassistant.helpers import device_registry as helpers_dr
from tests.common import mock_device_registry
from tests.components.blueprint.conftest import stub_blueprint_populate # noqa: F401
@ -94,7 +95,7 @@ async def test_update_device(hass, client, registry):
"device_id": device.id,
"area_id": "12345A",
"name_by_user": "Test Friendly Name",
"disabled_by": "user",
"disabled_by": helpers_dr.DISABLED_USER,
"type": "config/device_registry/update",
}
)
@ -104,5 +105,5 @@ async def test_update_device(hass, client, registry):
assert msg["result"]["id"] == device.id
assert msg["result"]["area_id"] == "12345A"
assert msg["result"]["name_by_user"] == "Test Friendly Name"
assert msg["result"]["disabled_by"] == "user"
assert msg["result"]["disabled_by"] == helpers_dr.DISABLED_USER
assert len(registry.devices) == 1

View File

@ -5,7 +5,7 @@ import pytest
from homeassistant.components.config import entity_registry
from homeassistant.const import ATTR_ICON
from homeassistant.helpers.entity_registry import RegistryEntry
from homeassistant.helpers.entity_registry import DISABLED_USER, RegistryEntry
from tests.common import (
MockConfigEntry,
@ -200,14 +200,14 @@ async def test_update_entity(hass, client):
"id": 7,
"type": "config/entity_registry/update",
"entity_id": "test_domain.world",
"disabled_by": "user",
"disabled_by": DISABLED_USER,
}
)
msg = await client.receive_json()
assert hass.states.get("test_domain.world") is None
assert registry.entities["test_domain.world"].disabled_by == "user"
assert registry.entities["test_domain.world"].disabled_by == DISABLED_USER
# UPDATE DISABLED_BY TO NONE
await client.send_json(
@ -305,7 +305,7 @@ async def test_enable_entity_disabled_device(hass, client, device_registry):
identifiers={("bridgeid", "0123")},
manufacturer="manufacturer",
model="model",
disabled_by="user",
disabled_by=DISABLED_USER,
)
mock_registry(

View File

@ -1345,7 +1345,7 @@ async def test_lights_can_be_enabled(hass: HomeAssistantType) -> None:
entry = entity_registry.async_get(TEST_PRIORITY_LIGHT_ENTITY_ID_1)
assert entry
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
entity_state = hass.states.get(TEST_PRIORITY_LIGHT_ENTITY_ID_1)
assert not entity_state

View File

@ -199,7 +199,7 @@ async def test_switches_can_be_enabled(hass: HomeAssistantType) -> None:
entry = entity_registry.async_get(entity_id)
assert entry
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
entity_state = hass.states.get(entity_id)
assert not entity_state

View File

@ -95,7 +95,7 @@ async def test_disabled_by_default_sensors(
entry = registry.async_get("sensor.epson_xp_6000_series_uptime")
assert entry
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
async def test_missing_entry_unique_id(

View File

@ -23,7 +23,7 @@ async def test_disabled_by_default(hass, mock_litejet):
entry = registry.async_get(ENTITY_SCENE)
assert entry
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
async def test_activate(hass, mock_litejet):

View File

@ -21,7 +21,7 @@ async def test_tracking_home(hass, mock_weather):
entry = registry.async_get("weather.test_home_hourly")
assert entry
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
# Test we track config
await hass.config.async_update(latitude=10, longitude=20)

View File

@ -518,7 +518,7 @@ async def test_first_run_with_failing_zones(hass):
entry = registry.async_get(ZONE_7_ID)
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
async def test_not_first_run_with_failing_zone(hass):

View File

@ -22,7 +22,7 @@ async def test_binary_sensor(hass, generic_data, binary_sensor_msg):
entry = registry.async_get(entity_id)
assert entry
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
# Test enabling legacy entity
updated_entry = registry.async_update_entity(

View File

@ -43,7 +43,7 @@ async def test_sensor(hass, generic_data):
entry = registry.async_get(entity_id)
assert entry
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
# Test enabling entity
updated_entry = registry.async_update_entity(

View File

@ -117,7 +117,7 @@ async def test_disabled_by_default_sensors(
entry = registry.async_get(entity_id)
assert entry
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
async def test_availability(

View File

@ -542,7 +542,7 @@ async def test_enable_status_sensor(hass, mqtt_mock, setup_tasmota):
assert state is None
entry = entity_reg.async_get("sensor.tasmota_signal")
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
# Enable the status sensor
updated_entry = entity_reg.async_update_entity(

View File

@ -194,4 +194,4 @@ async def test_disabled_by_default_sensors(
entry = registry.async_get(entity_id)
assert entry
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION

View File

@ -69,7 +69,7 @@ async def test_disabled_legacy_sensor(hass, multisensor_6, integration):
entry = registry.async_get(entity_id)
assert entry
assert entry.disabled
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
# Test enabling legacy entity
updated_entry = registry.async_update_entity(

View File

@ -4,6 +4,7 @@ from unittest.mock import patch
import pytest
from homeassistant import config_entries
from homeassistant.const import EVENT_HOMEASSISTANT_STARTED
from homeassistant.core import CoreState, callback
from homeassistant.exceptions import RequiredParameterMissing
@ -181,7 +182,7 @@ async def test_loading_from_storage(hass, hass_storage):
"entry_type": "service",
"area_id": "12345A",
"name_by_user": "Test Friendly Name",
"disabled_by": "user",
"disabled_by": device_registry.DISABLED_USER,
"suggested_area": "Kitchen",
}
],
@ -212,7 +213,7 @@ async def test_loading_from_storage(hass, hass_storage):
assert entry.area_id == "12345A"
assert entry.name_by_user == "Test Friendly Name"
assert entry.entry_type == "service"
assert entry.disabled_by == "user"
assert entry.disabled_by == device_registry.DISABLED_USER
assert isinstance(entry.config_entries, set)
assert isinstance(entry.connections, set)
assert isinstance(entry.identifiers, set)
@ -493,7 +494,7 @@ async def test_loading_saving_data(hass, registry, area_registry):
manufacturer="manufacturer",
model="light",
via_device=("hue", "0123"),
disabled_by="user",
disabled_by=device_registry.DISABLED_USER,
)
orig_light2 = registry.async_get_or_create(
@ -542,7 +543,7 @@ async def test_loading_saving_data(hass, registry, area_registry):
manufacturer="manufacturer",
model="light",
via_device=("hue", "0123"),
disabled_by="user",
disabled_by=device_registry.DISABLED_USER,
suggested_area="Kitchen",
)
@ -651,7 +652,7 @@ async def test_update(registry):
name_by_user="Test Friendly Name",
new_identifiers=new_identifiers,
via_device_id="98765B",
disabled_by="user",
disabled_by=device_registry.DISABLED_USER,
)
assert mock_save.call_count == 1
@ -662,7 +663,7 @@ async def test_update(registry):
assert updated_entry.name_by_user == "Test Friendly Name"
assert updated_entry.identifiers == new_identifiers
assert updated_entry.via_device_id == "98765B"
assert updated_entry.disabled_by == "user"
assert updated_entry.disabled_by == device_registry.DISABLED_USER
assert registry.async_get_device({("hue", "456")}) is None
assert registry.async_get_device({("bla", "123")}) is None
@ -1226,21 +1227,23 @@ async def test_disable_config_entry_disables_devices(hass, registry):
entry2 = registry.async_get_or_create(
config_entry_id=config_entry.entry_id,
connections={("mac", "34:56:AB:CD:EF:12")},
disabled_by="user",
disabled_by=device_registry.DISABLED_USER,
)
assert not entry1.disabled
assert entry2.disabled
await hass.config_entries.async_set_disabled_by(config_entry.entry_id, "user")
await hass.config_entries.async_set_disabled_by(
config_entry.entry_id, config_entries.DISABLED_USER
)
await hass.async_block_till_done()
entry1 = registry.async_get(entry1.id)
assert entry1.disabled
assert entry1.disabled_by == "config_entry"
assert entry1.disabled_by == device_registry.DISABLED_CONFIG_ENTRY
entry2 = registry.async_get(entry2.id)
assert entry2.disabled
assert entry2.disabled_by == "user"
assert entry2.disabled_by == device_registry.DISABLED_USER
await hass.config_entries.async_set_disabled_by(config_entry.entry_id, None)
await hass.async_block_till_done()
@ -1249,4 +1252,4 @@ async def test_disable_config_entry_disables_devices(hass, registry):
assert not entry1.disabled
entry2 = registry.async_get(entry2.id)
assert entry2.disabled
assert entry2.disabled_by == "user"
assert entry2.disabled_by == device_registry.DISABLED_USER

View File

@ -575,7 +575,7 @@ async def test_warn_disabled(hass, caplog):
entity_id="hello.world",
unique_id="test-unique-id",
platform="test-platform",
disabled_by="user",
disabled_by=entity_registry.DISABLED_USER,
)
mock_registry(hass, {"hello.world": entry})
@ -616,7 +616,9 @@ async def test_disabled_in_entity_registry(hass):
await ent.add_to_platform_finish()
assert hass.states.get("hello.world") is not None
entry2 = registry.async_update_entity("hello.world", disabled_by="user")
entry2 = registry.async_update_entity(
"hello.world", disabled_by=entity_registry.DISABLED_USER
)
await hass.async_block_till_done()
assert entry2 != entry
assert ent.registry_entry == entry2

View File

@ -926,7 +926,7 @@ async def test_entity_disabled_by_integration(hass):
entry_default = registry.async_get_or_create(DOMAIN, DOMAIN, "default")
assert entry_default.disabled_by is None
entry_disabled = registry.async_get_or_create(DOMAIN, DOMAIN, "disabled")
assert entry_disabled.disabled_by == "integration"
assert entry_disabled.disabled_by == er.DISABLED_INTEGRATION
async def test_entity_info_added_to_entity_registry(hass):

View File

@ -3,6 +3,7 @@ from unittest.mock import patch
import pytest
from homeassistant import config_entries
from homeassistant.const import EVENT_HOMEASSISTANT_START, STATE_UNAVAILABLE
from homeassistant.core import CoreState, callback, valid_entity_id
from homeassistant.helpers import entity_registry as er
@ -239,19 +240,19 @@ async def test_loading_extra_values(hass, hass_storage):
"entity_id": "test.disabled_user",
"platform": "super_platform",
"unique_id": "disabled-user",
"disabled_by": "user",
"disabled_by": er.DISABLED_USER,
},
{
"entity_id": "test.disabled_hass",
"platform": "super_platform",
"unique_id": "disabled-hass",
"disabled_by": "hass",
"disabled_by": er.DISABLED_HASS,
},
{
"entity_id": "test.invalid__entity",
"platform": "super_platform",
"unique_id": "invalid-hass",
"disabled_by": "hass",
"disabled_by": er.DISABLED_HASS,
},
]
},
@ -361,7 +362,7 @@ async def test_migration(hass):
"unique_id": "test-unique",
"platform": "test-platform",
"name": "Test Name",
"disabled_by": "hass",
"disabled_by": er.DISABLED_HASS,
}
}
with patch("os.path.isfile", return_value=True), patch("os.remove"), patch(
@ -378,7 +379,7 @@ async def test_migration(hass):
config_entry=mock_config,
)
assert entry.name == "Test Name"
assert entry.disabled_by == "hass"
assert entry.disabled_by == er.DISABLED_HASS
assert entry.config_entry_id == "test-config-id"
@ -497,13 +498,15 @@ async def test_update_entity(registry):
async def test_disabled_by(registry):
"""Test that we can disable an entry when we create it."""
entry = registry.async_get_or_create("light", "hue", "5678", disabled_by="hass")
assert entry.disabled_by == "hass"
entry = registry.async_get_or_create(
"light", "hue", "5678", disabled_by=er.DISABLED_HASS
)
assert entry.disabled_by == er.DISABLED_HASS
entry = registry.async_get_or_create(
"light", "hue", "5678", disabled_by="integration"
"light", "hue", "5678", disabled_by=er.DISABLED_INTEGRATION
)
assert entry.disabled_by == "hass"
assert entry.disabled_by == er.DISABLED_HASS
entry2 = registry.async_get_or_create("light", "hue", "1234")
assert entry2.disabled_by is None
@ -519,12 +522,16 @@ async def test_disabled_by_system_options(registry):
entry = registry.async_get_or_create(
"light", "hue", "AAAA", config_entry=mock_config
)
assert entry.disabled_by == "integration"
assert entry.disabled_by == er.DISABLED_INTEGRATION
entry2 = registry.async_get_or_create(
"light", "hue", "BBBB", config_entry=mock_config, disabled_by="user"
"light",
"hue",
"BBBB",
config_entry=mock_config,
disabled_by=er.DISABLED_USER,
)
assert entry2.disabled_by == "user"
assert entry2.disabled_by == er.DISABLED_USER
async def test_restore_states(hass):
@ -755,7 +762,7 @@ async def test_disable_device_disables_entities(hass, registry):
"ABCD",
config_entry=config_entry,
device_id=device_entry.id,
disabled_by="user",
disabled_by=er.DISABLED_USER,
)
entry3 = registry.async_get_or_create(
"light",
@ -763,25 +770,25 @@ async def test_disable_device_disables_entities(hass, registry):
"EFGH",
config_entry=config_entry,
device_id=device_entry.id,
disabled_by="config_entry",
disabled_by=er.DISABLED_CONFIG_ENTRY,
)
assert not entry1.disabled
assert entry2.disabled
assert entry3.disabled
device_registry.async_update_device(device_entry.id, disabled_by="user")
device_registry.async_update_device(device_entry.id, disabled_by=er.DISABLED_USER)
await hass.async_block_till_done()
entry1 = registry.async_get(entry1.entity_id)
assert entry1.disabled
assert entry1.disabled_by == "device"
assert entry1.disabled_by == er.DISABLED_DEVICE
entry2 = registry.async_get(entry2.entity_id)
assert entry2.disabled
assert entry2.disabled_by == "user"
assert entry2.disabled_by == er.DISABLED_USER
entry3 = registry.async_get(entry3.entity_id)
assert entry3.disabled
assert entry3.disabled_by == "config_entry"
assert entry3.disabled_by == er.DISABLED_CONFIG_ENTRY
device_registry.async_update_device(device_entry.id, disabled_by=None)
await hass.async_block_till_done()
@ -790,10 +797,10 @@ async def test_disable_device_disables_entities(hass, registry):
assert not entry1.disabled
entry2 = registry.async_get(entry2.entity_id)
assert entry2.disabled
assert entry2.disabled_by == "user"
assert entry2.disabled_by == er.DISABLED_USER
entry3 = registry.async_get(entry3.entity_id)
assert entry3.disabled
assert entry3.disabled_by == "config_entry"
assert entry3.disabled_by == er.DISABLED_CONFIG_ENTRY
async def test_disable_config_entry_disables_entities(hass, registry):
@ -820,7 +827,7 @@ async def test_disable_config_entry_disables_entities(hass, registry):
"ABCD",
config_entry=config_entry,
device_id=device_entry.id,
disabled_by="user",
disabled_by=er.DISABLED_USER,
)
entry3 = registry.async_get_or_create(
"light",
@ -828,25 +835,27 @@ async def test_disable_config_entry_disables_entities(hass, registry):
"EFGH",
config_entry=config_entry,
device_id=device_entry.id,
disabled_by="device",
disabled_by=er.DISABLED_DEVICE,
)
assert not entry1.disabled
assert entry2.disabled
assert entry3.disabled
await hass.config_entries.async_set_disabled_by(config_entry.entry_id, "user")
await hass.config_entries.async_set_disabled_by(
config_entry.entry_id, config_entries.DISABLED_USER
)
await hass.async_block_till_done()
entry1 = registry.async_get(entry1.entity_id)
assert entry1.disabled
assert entry1.disabled_by == "config_entry"
assert entry1.disabled_by == er.DISABLED_CONFIG_ENTRY
entry2 = registry.async_get(entry2.entity_id)
assert entry2.disabled
assert entry2.disabled_by == "user"
assert entry2.disabled_by == er.DISABLED_USER
entry3 = registry.async_get(entry3.entity_id)
assert entry3.disabled
assert entry3.disabled_by == "device"
assert entry3.disabled_by == er.DISABLED_DEVICE
await hass.config_entries.async_set_disabled_by(config_entry.entry_id, None)
await hass.async_block_till_done()
@ -855,7 +864,7 @@ async def test_disable_config_entry_disables_entities(hass, registry):
assert not entry1.disabled
entry2 = registry.async_get(entry2.entity_id)
assert entry2.disabled
assert entry2.disabled_by == "user"
assert entry2.disabled_by == er.DISABLED_USER
# The device was re-enabled, so entity disabled by the device will be re-enabled too
entry3 = registry.async_get(entry3.entity_id)
assert not entry3.disabled_by
@ -885,7 +894,7 @@ async def test_disabled_entities_excluded_from_entity_list(hass, registry):
"ABCD",
config_entry=config_entry,
device_id=device_entry.id,
disabled_by="user",
disabled_by=er.DISABLED_USER,
)
entries = er.async_entries_for_device(registry, device_entry.id)

View File

@ -504,7 +504,9 @@ async def test_domains_gets_domains_excludes_ignore_and_disabled(manager):
domain="ignored", source=config_entries.SOURCE_IGNORE
).add_to_manager(manager)
MockConfigEntry(domain="test3").add_to_manager(manager)
MockConfigEntry(domain="disabled", disabled_by="user").add_to_manager(manager)
MockConfigEntry(
domain="disabled", disabled_by=config_entries.DISABLED_USER
).add_to_manager(manager)
assert manager.async_domains() == ["test", "test2", "test3"]
assert manager.async_domains(include_ignore=False) == ["test", "test2", "test3"]
assert manager.async_domains(include_disabled=False) == ["test", "test2", "test3"]
@ -1348,7 +1350,7 @@ async def test_reload_entry_entity_registry_ignores_no_entry(hass):
# Test we ignore entities without config entry
entry = registry.async_get_or_create("light", "hue", "123")
registry.async_update_entity(entry.entity_id, disabled_by="user")
registry.async_update_entity(entry.entity_id, disabled_by=er.DISABLED_USER)
await hass.async_block_till_done()
assert not handler.changed
assert handler._remove_call_later is None
@ -1387,7 +1389,7 @@ async def test_reload_entry_entity_registry_works(hass):
assert handler._remove_call_later is None
# Disable entity, we should not do anything, only act when enabled.
registry.async_update_entity(entity_entry.entity_id, disabled_by="user")
registry.async_update_entity(entity_entry.entity_id, disabled_by=er.DISABLED_USER)
await hass.async_block_till_done()
assert not handler.changed
assert handler._remove_call_later is None