Skip to content

Commit 2024d08

Browse files
authored
Merge pull request #799 from JalilG0/patch-6
Week05 - Emails Class - Jalil Guliyev
2 parents 120b261 + 25f55a7 commit 2024d08

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

‎Week05/emails_jalil_guliyev.py‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"""Week 05: Emails homework."""
2+
3+
import re
4+
5+
6+
class Emails(list):
7+
"""A list of unique, validated email addresses."""
8+
9+
_EMAIL_PATTERN = re.compile(r"^[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)+$")
10+
11+
def __init__(self, emails):
12+
validated = self.validate(emails)
13+
super().__init__(validated)
14+
self.data = self
15+
16+
@classmethod
17+
def validate(cls, emails):
18+
"""Validate addresses and return unique values in input order."""
19+
unique = []
20+
for email in emails:
21+
if not isinstance(email, str) or not cls._EMAIL_PATTERN.fullmatch(email):
22+
raise ValueError(f"Invalid email address: {email!r}")
23+
if email not in unique:
24+
unique.append(email)
25+
return unique
26+
27+
def __str__(self):
28+
return str(list(self))
29+
30+
def __repr__(self):
31+
return f"Emails({list(self)!r})"

0 commit comments

Comments
 (0)