From 93ee3ec09d45868b866d862093f1987af2b889d5 Mon Sep 17 00:00:00 2001 From: furkanustuncan <87567493+furkanustuncan@users.noreply.github.com> Date: Fri, 6 Nov 2026 12:17:40 +0300 Subject: [PATCH] emails_furkan_ustuncan.py --- Week05/emails_furkan_ustuncan.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Week05/emails_furkan_ustuncan.py diff --git a/Week05/emails_furkan_ustuncan.py b/Week05/emails_furkan_ustuncan.py new file mode 100644 index 00000000..f2f8182e --- /dev/null +++ b/Week05/emails_furkan_ustuncan.py @@ -0,0 +1,25 @@ +import re + +PATTERN = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z]{2,}" + + +class Emails(list): + def __init__(self, addresses: list) -> None: + self.data = self.validate(addresses) + list.__init__(self, self.data) + + @classmethod + def validate(cls, addresses: list) -> list: + if not all(isinstance(a, str) for a in addresses): + raise ValueError("All e-mail addresses must be strings") + for a in addresses: + if re.fullmatch(PATTERN, a) is None: + raise ValueError(f"Not a valid e-mail address: {a}") + # dict.fromkeys removes duplicates and keeps the order + return list(dict.fromkeys(addresses)) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self.data})" + + def __str__(self) -> str: + return f"{len(self.data)} e-mail(s): " + " | ".join(self.data)