From 8c512653cc5d48858ad6c3d39b819787c03bb86e Mon Sep 17 00:00:00 2001 From: Rhea Lakhotia Date: Thu, 31 Jul 2025 16:26:56 +0530 Subject: [PATCH 1/2] Add domain validation tests for DomainStr --- pydantic_extra_types/domain.py | 2 +- tests/test_domain.py | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pydantic_extra_types/domain.py b/pydantic_extra_types/domain.py index b772979..91028b0 100644 --- a/pydantic_extra_types/domain.py +++ b/pydantic_extra_types/domain.py @@ -14,7 +14,7 @@ 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..6dc7267 100644 --- a/tests/test_domain.py +++ b/tests/test_domain.py @@ -76,3 +76,21 @@ 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 \ No newline at end of file From a58300e692831fb2ae8f69242216bdfe16baf10b Mon Sep 17 00:00:00 2001 From: Rhea Lakhotia Date: Thu, 31 Jul 2025 16:33:45 +0530 Subject: [PATCH 2/2] Fix lint errors using Ruff --- pydantic_extra_types/domain.py | 4 +++- tests/test_domain.py | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pydantic_extra_types/domain.py b/pydantic_extra_types/domain.py index 91028b0..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}$)'r'(^((?!-)[a-zA-Z0-9-]{1,63}(? str: diff --git a/tests/test_domain.py b/tests/test_domain.py index 6dc7267..50efe48 100644 --- a/tests/test_domain.py +++ b/tests/test_domain.py @@ -77,20 +77,22 @@ 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" + 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" + Model(domain='invalid_domain') + assert False, 'Expected ValidationError' except ValidationError: - pass \ No newline at end of file + pass