diff --git a/pydantic_extra_types/domain.py b/pydantic_extra_types/domain.py index b772979..19e6506 100644 --- a/pydantic_extra_types/domain.py +++ b/pydantic_extra_types/domain.py @@ -14,7 +14,9 @@ class DomainStr(str): """A string subclass with custom validation for domain string format.""" - _domain_re_pattern = r'(?=^.{1,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(? str: diff --git a/tests/test_domain.py b/tests/test_domain.py index 77e6e1a..50efe48 100644 --- a/tests/test_domain.py +++ b/tests/test_domain.py @@ -76,3 +76,23 @@ def test_very_long_domains(domain: str): def test_invalid_domain_types(domain: Any): with pytest.raises(ValidationError, match='Value must be a string'): MyModel(domain=domain) + + +def test_domainstr_with_punycode(): + class Model(BaseModel): + domain: DomainStr + + valid = 'xn--7-7sbirhro.xn--80ahmohdapg.xn--80asehdb' + model = Model(domain=valid) + assert model.domain == valid + + +def test_domainstr_invalid(): + class Model(BaseModel): + domain: DomainStr + + try: + Model(domain='invalid_domain') + assert False, 'Expected ValidationError' + except ValidationError: + pass