Add unique id for Scrape config entry entities (#82508)
* scrape unique id * fix uuid str * add back UoM
This commit is contained in:
parent
e4fbbdfa05
commit
a63581b5c8
5 changed files with 35 additions and 2 deletions
|
@ -3,6 +3,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from collections.abc import Mapping
|
from collections.abc import Mapping
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
import uuid
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
@ -24,6 +25,7 @@ from homeassistant.const import (
|
||||||
CONF_PASSWORD,
|
CONF_PASSWORD,
|
||||||
CONF_RESOURCE,
|
CONF_RESOURCE,
|
||||||
CONF_TIMEOUT,
|
CONF_TIMEOUT,
|
||||||
|
CONF_UNIQUE_ID,
|
||||||
CONF_UNIT_OF_MEASUREMENT,
|
CONF_UNIT_OF_MEASUREMENT,
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
CONF_VALUE_TEMPLATE,
|
CONF_VALUE_TEMPLATE,
|
||||||
|
@ -125,7 +127,15 @@ def validate_rest_setup(user_input: dict[str, Any]) -> dict[str, Any]:
|
||||||
|
|
||||||
def validate_sensor_setup(user_input: dict[str, Any]) -> dict[str, Any]:
|
def validate_sensor_setup(user_input: dict[str, Any]) -> dict[str, Any]:
|
||||||
"""Validate sensor setup."""
|
"""Validate sensor setup."""
|
||||||
return {"sensor": [{**user_input, CONF_INDEX: int(user_input[CONF_INDEX])}]}
|
return {
|
||||||
|
"sensor": [
|
||||||
|
{
|
||||||
|
**user_input,
|
||||||
|
CONF_INDEX: int(user_input[CONF_INDEX]),
|
||||||
|
CONF_UNIQUE_ID: str(uuid.uuid1()),
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
DATA_SCHEMA_RESOURCE = vol.Schema(RESOURCE_SETUP)
|
DATA_SCHEMA_RESOURCE = vol.Schema(RESOURCE_SETUP)
|
||||||
|
|
|
@ -163,6 +163,7 @@ async def async_setup_entry(
|
||||||
attr: str | None = sensor_config.get(CONF_ATTRIBUTE)
|
attr: str | None = sensor_config.get(CONF_ATTRIBUTE)
|
||||||
index: int = int(sensor_config[CONF_INDEX])
|
index: int = int(sensor_config[CONF_INDEX])
|
||||||
value_string: str | None = sensor_config.get(CONF_VALUE_TEMPLATE)
|
value_string: str | None = sensor_config.get(CONF_VALUE_TEMPLATE)
|
||||||
|
unique_id: str = sensor_config[CONF_UNIQUE_ID]
|
||||||
|
|
||||||
value_template: Template | None = (
|
value_template: Template | None = (
|
||||||
Template(value_string, hass) if value_string is not None else None
|
Template(value_string, hass) if value_string is not None else None
|
||||||
|
@ -173,7 +174,7 @@ async def async_setup_entry(
|
||||||
coordinator,
|
coordinator,
|
||||||
sensor_config,
|
sensor_config,
|
||||||
name,
|
name,
|
||||||
None,
|
unique_id,
|
||||||
select,
|
select,
|
||||||
attr,
|
attr,
|
||||||
index,
|
index,
|
||||||
|
|
|
@ -3,6 +3,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
import uuid
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
@ -15,6 +16,7 @@ from homeassistant.const import (
|
||||||
CONF_NAME,
|
CONF_NAME,
|
||||||
CONF_RESOURCE,
|
CONF_RESOURCE,
|
||||||
CONF_TIMEOUT,
|
CONF_TIMEOUT,
|
||||||
|
CONF_UNIQUE_ID,
|
||||||
CONF_VERIFY_SSL,
|
CONF_VERIFY_SSL,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
@ -41,6 +43,7 @@ async def get_config_to_integration_load() -> dict[str, Any]:
|
||||||
CONF_NAME: "Current version",
|
CONF_NAME: "Current version",
|
||||||
CONF_SELECT: ".current-version h1",
|
CONF_SELECT: ".current-version h1",
|
||||||
CONF_INDEX: 0,
|
CONF_INDEX: 0,
|
||||||
|
CONF_UNIQUE_ID: "3699ef88-69e6-11ed-a1eb-0242ac120002",
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
@ -78,3 +81,13 @@ async def load_integration(
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
return config_entry
|
return config_entry
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def uuid_fixture() -> str:
|
||||||
|
"""Automatically path uuid generator."""
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.scrape.config_flow.uuid.uuid1",
|
||||||
|
return_value=uuid.UUID("3699ef88-69e6-11ed-a1eb-0242ac120002"),
|
||||||
|
):
|
||||||
|
yield
|
||||||
|
|
|
@ -18,6 +18,7 @@ from homeassistant.const import (
|
||||||
CONF_PASSWORD,
|
CONF_PASSWORD,
|
||||||
CONF_RESOURCE,
|
CONF_RESOURCE,
|
||||||
CONF_TIMEOUT,
|
CONF_TIMEOUT,
|
||||||
|
CONF_UNIQUE_ID,
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
CONF_VERIFY_SSL,
|
CONF_VERIFY_SSL,
|
||||||
)
|
)
|
||||||
|
@ -78,6 +79,7 @@ async def test_form(hass: HomeAssistant, get_data: MockRestData) -> None:
|
||||||
CONF_NAME: "Current version",
|
CONF_NAME: "Current version",
|
||||||
CONF_SELECT: ".current-version h1",
|
CONF_SELECT: ".current-version h1",
|
||||||
CONF_INDEX: 0.0,
|
CONF_INDEX: 0.0,
|
||||||
|
CONF_UNIQUE_ID: "3699ef88-69e6-11ed-a1eb-0242ac120002",
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
@ -148,6 +150,7 @@ async def test_flow_fails(hass: HomeAssistant, get_data: MockRestData) -> None:
|
||||||
CONF_NAME: "Current version",
|
CONF_NAME: "Current version",
|
||||||
CONF_SELECT: ".current-version h1",
|
CONF_SELECT: ".current-version h1",
|
||||||
CONF_INDEX: 0.0,
|
CONF_INDEX: 0.0,
|
||||||
|
CONF_UNIQUE_ID: "3699ef88-69e6-11ed-a1eb-0242ac120002",
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
@ -192,6 +195,7 @@ async def test_options_flow(hass: HomeAssistant, loaded_entry: MockConfigEntry)
|
||||||
CONF_NAME: "Current version",
|
CONF_NAME: "Current version",
|
||||||
CONF_SELECT: ".current-version h1",
|
CONF_SELECT: ".current-version h1",
|
||||||
CONF_INDEX: 0.0,
|
CONF_INDEX: 0.0,
|
||||||
|
CONF_UNIQUE_ID: "3699ef88-69e6-11ed-a1eb-0242ac120002",
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
|
@ -414,3 +414,8 @@ async def test_setup_config_entry(
|
||||||
|
|
||||||
state = hass.states.get("sensor.current_version")
|
state = hass.states.get("sensor.current_version")
|
||||||
assert state.state == "Current Version: 2021.12.10"
|
assert state.state == "Current Version: 2021.12.10"
|
||||||
|
|
||||||
|
entity_reg = er.async_get(hass)
|
||||||
|
entity = entity_reg.async_get("sensor.current_version")
|
||||||
|
|
||||||
|
assert entity.unique_id == "3699ef88-69e6-11ed-a1eb-0242ac120002"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue