From 25f55a725269f51ebca4d71a341a6693bb606b9b Mon Sep 17 00:00:00 2001 From: Jalil Guliyev Date: Sun, 1 Nov 2026 21:35:27 +0300 Subject: [PATCH] Add Emails class for unique validated email addresses --- Week05/emails_jalil_guliyev.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Week05/emails_jalil_guliyev.py diff --git a/Week05/emails_jalil_guliyev.py b/Week05/emails_jalil_guliyev.py new file mode 100644 index 000000000..a8fd4d415 --- /dev/null +++ b/Week05/emails_jalil_guliyev.py @@ -0,0 +1,31 @@ +"""Week 05: Emails homework.""" + +import re + + +class Emails(list): + """A list of unique, validated email addresses.""" + + _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])?)+$") + + def __init__(self, emails): + validated = self.validate(emails) + super().__init__(validated) + self.data = self + + @classmethod + def validate(cls, emails): + """Validate addresses and return unique values in input order.""" + unique = [] + for email in emails: + if not isinstance(email, str) or not cls._EMAIL_PATTERN.fullmatch(email): + raise ValueError(f"Invalid email address: {email!r}") + if email not in unique: + unique.append(email) + return unique + + def __str__(self): + return str(list(self)) + + def __repr__(self): + return f"Emails({list(self)!r})"