Skip to content

Commit 6de3197

Browse files
authored
Merge pull request #751 from EsraSepik/master
Add Emails class for email validation and storage
2 parents 8b81d80 + 7dffd6c commit 6de3197

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

‎Week05/emails_esra_sepik.py‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import re
2+
3+
PATTERN = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z]{2,}"
4+
5+
6+
class Emails(list):
7+
def __init__(self, addresses: list) -> None:
8+
self.data = self.validate(addresses)
9+
list.__init__(self, self.data)
10+
11+
@classmethod
12+
def validate(cls, addresses: list) -> list:
13+
if not all(isinstance(a, str) for a in addresses):
14+
raise ValueError("All e-mail addresses must be strings")
15+
for a in addresses:
16+
if re.fullmatch(PATTERN, a) is None:
17+
raise ValueError(f"Not a valid e-mail address: {a}")
18+
# dict.fromkeys removes duplicates and keeps the order
19+
return list(dict.fromkeys(addresses))
20+
21+
def __repr__(self) -> str:
22+
return f"{self.__class__.__name__}({self.data})"
23+
24+
def __str__(self) -> str:
25+
return f"{len(self.data)} e-mail(s): " + " | ".join(self.data)

0 commit comments

Comments
 (0)