Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- We have a bunch of objects and a bunch of methods that manipulate the objects.
- For each object manipulation there is a corresponding Activy that's created.
- The activity has a kind and additional information, depending on the type of
- activity.
- There are also three methods of notifying people about activities; the
- ones currently available are email, sms and push notification but other could
- be added at any point. Each of the notifications may require more or less
- verbosity, depending on the medium.
- Requirement:
- Build on the code below such that for every action in the main function block
- (user/issue/task creation, or issue assignment), an activity is
- created with the appropriate kind. Also, for every activity created, an appropriate
- notification is sent through the appropriate mediums to all available users.
- Is it desirable that new notification mediums can be easily added and the texts
- can be easily tailored based on the medium and activity; for example an SMS might include a
- lot less information than an email. That is to say, for a certain activity,
- the notification text that's sent by email may differ from the one send by SMS;
- some users may only use certain notification mediums, not all
- of the available ones.
- If we take the example of creating a user, the notification will look like this:
- SMS
- A new user was created. Go to https://bitly.is/3g65Hus to find out more
- EMAIL
- A new user was created with username {username} on the date {date}. The user
- has registered with email address {email}
- PUSH NOTIFICATION
- Checkout the new user that was created: https://bitly.is/3g65Hus
- """
- from dataclasses import dataclass
- import enum
- def send_email(emails: list[str], text: str):
- print(f"EMAIL TO: {emails.join(',')} | {text}")
- def send_sms(emails: list[str], text: str):
- print(f"SMS TO: {emails.join(',')} | {text}")
- def push_notification(emails: list[str], text: str):
- print(f"PUSH NOTIFICATION TO: {emails.join(',')} | {text}")
- class ActivityKind(enum.Enum):
- USER_CREATED = 1
- ISSUE_CREATED = 2
- TASK_CREATED = 3
- TASK_ASSIGNED = 4
- @dataclass
- class User:
- id: int
- username: str
- email: str
- @dataclass
- class Issue:
- id: int
- title: str
- reporter: User
- description: str
- @dataclass
- class Task:
- id: int
- title: str
- created_by: User
- issue_id: int
- assignee: User
- @dataclass
- class Activity:
- kind: ActivityKind
- additional_context: dict
- def main():
- john = User(id=1, username='cooljohn93', email='john93@gmail.com')
- anna = User(id=1, username='anna', email='anna@yahoo.com')
- dave = User(id=1, username='dave', email='dave@gmail.com')
- network_issue = Issue(reporter=john, id=1, title='Network not working', description='Does not work on my machine')
- task = Task(id=1, title='Fix network err', issue_id=network_issue.id, created_by=anna, assignee=dave)
- # assign a task
- task.assignee = john
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment