mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Validate UUID for tankerkoenig (#32805)
* Validate UUIDs against custom validator Instead of just validating against strings, use a custom validator, so that the format can be checked. * Add tests for custom UUID4 validator
This commit is contained in:
parent
ebc4804e04
commit
49c2a4a4e3
@ -1,6 +1,7 @@
|
||||
"""Ask tankerkoenig.de for petrol price information."""
|
||||
from datetime import timedelta
|
||||
import logging
|
||||
from uuid import UUID
|
||||
|
||||
import pytankerkoenig
|
||||
import voluptuous as vol
|
||||
@ -24,11 +25,26 @@ _LOGGER = logging.getLogger(__name__)
|
||||
DEFAULT_RADIUS = 2
|
||||
DEFAULT_SCAN_INTERVAL = timedelta(minutes=30)
|
||||
|
||||
|
||||
def uuid4_string(value):
|
||||
"""Validate a v4 UUID in string format."""
|
||||
try:
|
||||
result = UUID(value, version=4)
|
||||
except (ValueError, AttributeError, TypeError) as error:
|
||||
raise vol.Invalid("Invalid Version4 UUID", error_message=str(error))
|
||||
|
||||
if str(result) != value.lower():
|
||||
# UUID() will create a uuid4 if input is invalid
|
||||
raise vol.Invalid("Invalid Version4 UUID")
|
||||
|
||||
return str(result)
|
||||
|
||||
|
||||
CONFIG_SCHEMA = vol.Schema(
|
||||
{
|
||||
DOMAIN: vol.Schema(
|
||||
{
|
||||
vol.Required(CONF_API_KEY): cv.string,
|
||||
vol.Required(CONF_API_KEY): uuid4_string,
|
||||
vol.Optional(
|
||||
CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL
|
||||
): cv.time_period,
|
||||
@ -49,7 +65,7 @@ CONFIG_SCHEMA = vol.Schema(
|
||||
cv.positive_int, vol.Range(min=1)
|
||||
),
|
||||
vol.Optional(CONF_STATIONS, default=[]): vol.All(
|
||||
cv.ensure_list, [cv.string]
|
||||
cv.ensure_list, [uuid4_string]
|
||||
),
|
||||
}
|
||||
)
|
||||
|
@ -588,6 +588,9 @@ pysonos==0.0.24
|
||||
# homeassistant.components.spc
|
||||
pyspcwebgw==0.4.0
|
||||
|
||||
# homeassistant.components.tankerkoenig
|
||||
pytankerkoenig==0.0.6
|
||||
|
||||
# homeassistant.components.ecobee
|
||||
python-ecobee-api==0.2.2
|
||||
|
||||
|
1
tests/components/tankerkoenig/__init__.py
Executable file
1
tests/components/tankerkoenig/__init__.py
Executable file
@ -0,0 +1 @@
|
||||
"""Tests for the tankerkoenig integration."""
|
32
tests/components/tankerkoenig/test_tankerkoenig_validators.py
Executable file
32
tests/components/tankerkoenig/test_tankerkoenig_validators.py
Executable file
@ -0,0 +1,32 @@
|
||||
"""The tests for the custom tankerkoenig validators."""
|
||||
import unittest
|
||||
import uuid
|
||||
|
||||
import pytest
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.tankerkoenig import uuid4_string
|
||||
|
||||
|
||||
class TestUUID4StringValidator(unittest.TestCase):
|
||||
"""Test the UUID4 string custom validator."""
|
||||
|
||||
def test_uuid4_string(caplog):
|
||||
"""Test string uuid validation."""
|
||||
schema = vol.Schema(uuid4_string)
|
||||
|
||||
for value in ["Not a hex string", "0", 0]:
|
||||
with pytest.raises(vol.Invalid):
|
||||
schema(value)
|
||||
|
||||
with pytest.raises(vol.Invalid):
|
||||
# the third block should start with 4
|
||||
schema("a03d31b2-2eee-2acc-bb90-eec40be6ed23")
|
||||
|
||||
with pytest.raises(vol.Invalid):
|
||||
# the fourth block should start with 8-a
|
||||
schema("a03d31b2-2eee-4acc-1b90-eec40be6ed23")
|
||||
|
||||
_str = str(uuid.uuid4())
|
||||
assert schema(_str) == _str
|
||||
assert schema(_str.upper()) == _str
|
Loading…
x
Reference in New Issue
Block a user