Advertisement
vasil_k_k

05. Emails

Jul 14th, 2023 (edited)
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.90 KB | None | 0 0
  1. from __future__ import annotations
  2. from abc import ABC, abstractmethod
  3.  
  4. class IContent(ABC):
  5.  
  6.     def __init__(self, text: str):
  7.         self.text = text
  8.  
  9.     @abstractmethod
  10.     def format(self) -> type[IContent: str]:
  11.         ...
  12.  
  13.  
  14. class MyMl(IContent):
  15.  
  16.     def format(self) -> type[IContent: str]:
  17.         return '\n'.join(['<myML>', self.text, '</myML>'])
  18.  
  19.  
  20. class HTML(IContent):
  21.  
  22.     def format(self) -> type[IContent: str]:
  23.         return '\n'.join(['<html>', self.text, '</html>'])
  24.  
  25.  
  26. class IEmail(ABC):
  27.  
  28.     @staticmethod
  29.     @abstractmethod
  30.     def sender(sender : str) -> str:
  31.         return sender
  32.  
  33.     @staticmethod
  34.     @abstractmethod
  35.     def receiver(receiver: str) -> str:
  36.         return receiver
  37.  
  38.  
  39. class IM(IEmail):
  40.  
  41.     @staticmethod
  42.     def sender(sender: str) -> str:
  43.         return ''.join(["from ", sender])
  44.  
  45.     @staticmethod
  46.     def receiver(receiver: str) -> str:
  47.         return ''.join(["to ", receiver])
  48.  
  49.  
  50.  
  51. class Email:
  52.  
  53.     def __init__(self, template: type[IEmail]):
  54.         self.__template = template
  55.         self.__sender = None
  56.         self.__receiver = None
  57.         self.__content = None
  58.  
  59.     def set_sender(self, sender: str) -> None:
  60.         self.__sender = self.__template.sender(sender)
  61.  
  62.     def set_receiver(self, receiver: str) -> None:
  63.         self.__receiver = self.__template.receiver(receiver)
  64.  
  65.     def set_content(self, content: IContent) -> None:
  66.         self.__content = content.format()
  67.  
  68.     def __repr__(self) -> str:
  69.         return f"Sender: {self.__sender}\nReceiver: {self.__receiver}\nContent:\n{self.__content}"
  70.  
  71.  
  72.  
  73.  
  74. myml = MyMl('Hello, there!')
  75. email = Email(IEmail)
  76. email.set_sender('Ivan')
  77. email.set_receiver('James')
  78. email.set_content(myml)
  79.  
  80. print(email)
  81. print()
  82.  
  83. myml2 = HTML('Hello, there!')
  84. email = Email(IM)
  85. email.set_sender('Ivan')
  86. email.set_receiver('James')
  87. email.set_content(myml2)
  88.  
  89. print(email)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement