history allowed to load states with invalid entity IDs (#20399)

This commit is contained in:
Paulus Schoutsen 2019-01-24 17:53:01 -08:00 committed by Paulus Schoutsen
parent ebcae2503c
commit d7859b5900
3 changed files with 17 additions and 2 deletions

View file

@ -131,6 +131,9 @@ class States(Base): # type: ignore
_process_timestamp(self.last_changed),
_process_timestamp(self.last_updated),
context=context,
# Temp, because database can still store invalid entity IDs
# Remove with 1.0 or in 2020.
temp_invalid_id_bypass=True
)
except ValueError:
# When json.loads fails

View file

@ -663,11 +663,14 @@ class State:
attributes: Optional[Dict] = None,
last_changed: Optional[datetime.datetime] = None,
last_updated: Optional[datetime.datetime] = None,
context: Optional[Context] = None) -> None:
context: Optional[Context] = None,
# Temp, because database can still store invalid entity IDs
# Remove with 1.0 or in 2020.
temp_invalid_id_bypass: Optional[bool] = False) -> None:
"""Initialize a new state."""
state = str(state)
if not valid_entity_id(entity_id):
if not valid_entity_id(entity_id) and not temp_invalid_id_bypass:
raise InvalidEntityFormatError((
"Invalid entity id encountered: {}. "
"Format should be <domain>.<object_id>").format(entity_id))

View file

@ -142,3 +142,12 @@ class TestRecorderRuns(unittest.TestCase):
assert sorted(run.entity_ids()) == ['sensor.humidity', 'sensor.lux']
assert run.entity_ids(in_run2) == ['sensor.humidity']
def test_states_from_native_invalid_entity_id():
"""Test loading a state from an invalid entity ID."""
event = States()
event.entity_id = "test.invalid__id"
event.attributes = "{}"
state = event.to_native()
assert state.entity_id == 'test.invalid__id'