Skip to content

Commit 5ed9422

Browse files
rhealakhotiaRhea Lakhotia
andauthored
Added test coverage for DomainStr validation (#330)
* Add domain validation tests for DomainStr * Fix lint errors using Ruff --------- Co-authored-by: Rhea Lakhotia <[email protected]>
1 parent 4a33bab commit 5ed9422

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

pydantic_extra_types/domain.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
class DomainStr(str):
1515
"""A string subclass with custom validation for domain string format."""
1616

17-
_domain_re_pattern = r'(?=^.{1,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}$)'
17+
_domain_re_pattern = (
18+
r'(?=^.{1,253}$)' r'(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+' r'([a-zA-Z]{2,63}|xn--[a-zA-Z0-9]{2,59})$)'
19+
)
1820

1921
@classmethod
2022
def validate(cls, __input_value: Any, _: Any) -> str:

tests/test_domain.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,23 @@ def test_very_long_domains(domain: str):
7676
def test_invalid_domain_types(domain: Any):
7777
with pytest.raises(ValidationError, match='Value must be a string'):
7878
MyModel(domain=domain)
79+
80+
81+
def test_domainstr_with_punycode():
82+
class Model(BaseModel):
83+
domain: DomainStr
84+
85+
valid = 'xn--7-7sbirhro.xn--80ahmohdapg.xn--80asehdb'
86+
model = Model(domain=valid)
87+
assert model.domain == valid
88+
89+
90+
def test_domainstr_invalid():
91+
class Model(BaseModel):
92+
domain: DomainStr
93+
94+
try:
95+
Model(domain='invalid_domain')
96+
assert False, 'Expected ValidationError'
97+
except ValidationError:
98+
pass

0 commit comments

Comments
 (0)