from enum import Enum from django.contrib import messages from .models import Activity class MESSAGES(Enum): UPDATE_LEAD = 'update_lead' NEW_DETERMINATION = 'new_determination' DETERMINATION_OUTCOME = 'determination_outcome' INVITED_TO_PROPOSAL = 'invited_to_proposal' class MessageAdapter: def process(self, request, payload): messages.add_message(request, messages.INFO, 'Hello world.') class ActivityAdapter: messages = { MESSAGES.UPDATE_LEAD: 'Lead changed from {old.lead} to {new.lead}', MESSAGES.NEW_DETERMINATION: 'Created a determination for {submission.title}', MESSAGES.DETERMINATION_OUTCOME: 'Sent a {submission.determination.get_outcome_display} determination for {submission.title}:\r\n{determination.clean_message}', MESSAGES.INVITED_TO_PROPOSAL: '{submission.title} has been invited to submit a proposal.', } def message(self, message_type): return self.messages[message_type] def process(self, message_type, **kwargs): try: message = self.message(message_type) except KeyError: return Activity.actions.create( user=kwargs['user'], submission=kwargs['submission'], message=message.format(**kwargs), ) class MessengerBackend: adapters = [ActivityAdapter()] def __call__(self, message_type, user, submission, **kwargs): return self.send(message_type, user=user, submission=submission, **kwargs) def send(self, message_type, **kwargs): for adapter in self.adapters: adapter.process(message_type, **kwargs) messenger = MessengerBackend()