mirror of
https://github.com/esphome/esphome.git
synced 2025-07-28 22:26:36 +00:00
[config validation] Add more ip address / network validators (#9181)
This commit is contained in:
parent
6dfb9eba61
commit
2f2ecadae7
@ -3,7 +3,15 @@
|
|||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from ipaddress import AddressValueError, IPv4Address, ip_address
|
from ipaddress import (
|
||||||
|
AddressValueError,
|
||||||
|
IPv4Address,
|
||||||
|
IPv4Network,
|
||||||
|
IPv6Address,
|
||||||
|
IPv6Network,
|
||||||
|
ip_address,
|
||||||
|
ip_network,
|
||||||
|
)
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
@ -1176,6 +1184,14 @@ def ipv4address(value):
|
|||||||
return address
|
return address
|
||||||
|
|
||||||
|
|
||||||
|
def ipv6address(value):
|
||||||
|
try:
|
||||||
|
address = IPv6Address(value)
|
||||||
|
except AddressValueError as exc:
|
||||||
|
raise Invalid(f"{value} is not a valid IPv6 address") from exc
|
||||||
|
return address
|
||||||
|
|
||||||
|
|
||||||
def ipv4address_multi_broadcast(value):
|
def ipv4address_multi_broadcast(value):
|
||||||
address = ipv4address(value)
|
address = ipv4address(value)
|
||||||
if not (address.is_multicast or (address == IPv4Address("255.255.255.255"))):
|
if not (address.is_multicast or (address == IPv4Address("255.255.255.255"))):
|
||||||
@ -1193,6 +1209,33 @@ def ipaddress(value):
|
|||||||
return address
|
return address
|
||||||
|
|
||||||
|
|
||||||
|
def ipv4network(value):
|
||||||
|
"""Validate that the value is a valid IPv4 network."""
|
||||||
|
try:
|
||||||
|
network = IPv4Network(value, strict=False)
|
||||||
|
except ValueError as exc:
|
||||||
|
raise Invalid(f"{value} is not a valid IPv4 network") from exc
|
||||||
|
return network
|
||||||
|
|
||||||
|
|
||||||
|
def ipv6network(value):
|
||||||
|
"""Validate that the value is a valid IPv6 network."""
|
||||||
|
try:
|
||||||
|
network = IPv6Network(value, strict=False)
|
||||||
|
except ValueError as exc:
|
||||||
|
raise Invalid(f"{value} is not a valid IPv6 network") from exc
|
||||||
|
return network
|
||||||
|
|
||||||
|
|
||||||
|
def ipnetwork(value):
|
||||||
|
"""Validate that the value is a valid IP network."""
|
||||||
|
try:
|
||||||
|
network = ip_network(value, strict=False)
|
||||||
|
except ValueError as exc:
|
||||||
|
raise Invalid(f"{value} is not a valid IP network") from exc
|
||||||
|
return network
|
||||||
|
|
||||||
|
|
||||||
def _valid_topic(value):
|
def _valid_topic(value):
|
||||||
"""Validate that this is a valid topic name/filter."""
|
"""Validate that this is a valid topic name/filter."""
|
||||||
if value is None: # Used to disable publishing and subscribing
|
if value is None: # Used to disable publishing and subscribing
|
||||||
|
@ -5,7 +5,7 @@ import fnmatch
|
|||||||
import functools
|
import functools
|
||||||
import inspect
|
import inspect
|
||||||
from io import BytesIO, TextIOBase, TextIOWrapper
|
from io import BytesIO, TextIOBase, TextIOWrapper
|
||||||
from ipaddress import _BaseAddress
|
from ipaddress import _BaseAddress, _BaseNetwork
|
||||||
import logging
|
import logging
|
||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
@ -621,6 +621,7 @@ ESPHomeDumper.add_multi_representer(str, ESPHomeDumper.represent_stringify)
|
|||||||
ESPHomeDumper.add_multi_representer(int, ESPHomeDumper.represent_int)
|
ESPHomeDumper.add_multi_representer(int, ESPHomeDumper.represent_int)
|
||||||
ESPHomeDumper.add_multi_representer(float, ESPHomeDumper.represent_float)
|
ESPHomeDumper.add_multi_representer(float, ESPHomeDumper.represent_float)
|
||||||
ESPHomeDumper.add_multi_representer(_BaseAddress, ESPHomeDumper.represent_stringify)
|
ESPHomeDumper.add_multi_representer(_BaseAddress, ESPHomeDumper.represent_stringify)
|
||||||
|
ESPHomeDumper.add_multi_representer(_BaseNetwork, ESPHomeDumper.represent_stringify)
|
||||||
ESPHomeDumper.add_multi_representer(MACAddress, ESPHomeDumper.represent_stringify)
|
ESPHomeDumper.add_multi_representer(MACAddress, ESPHomeDumper.represent_stringify)
|
||||||
ESPHomeDumper.add_multi_representer(TimePeriod, ESPHomeDumper.represent_stringify)
|
ESPHomeDumper.add_multi_representer(TimePeriod, ESPHomeDumper.represent_stringify)
|
||||||
ESPHomeDumper.add_multi_representer(Lambda, ESPHomeDumper.represent_lambda)
|
ESPHomeDumper.add_multi_representer(Lambda, ESPHomeDumper.represent_lambda)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user