diff --git a/snf-astakos-app/astakos/im/functions.py b/snf-astakos-app/astakos/im/functions.py index 501449e49b03bf16afae9a912d860415c9c7833c..24248f3f3a4cb351fd90eedfdb127a6e52c811e5 100644 --- a/snf-astakos-app/astakos/im/functions.py +++ b/snf-astakos-app/astakos/im/functions.py @@ -574,8 +574,8 @@ def leave_project(memb_id, request_user, reason=None): reason=reason) logger.info("User %s requested to leave %s." % (request_user.log_display, project)) - project_notif.membership_leave_request_notify( - project, membership.person) + project_notif.membership_request_notify( + project, membership.person, "leave") return auto_accepted @@ -635,7 +635,8 @@ def join_project(project_id, request_user, reason=None): logger.info("User %s joined %s." % (request_user.log_display, project)) else: - project_notif.membership_request_notify(project, membership.person) + project_notif.membership_request_notify( + project, membership.person, "join") logger.info("User %s requested to join %s." % (request_user.log_display, project)) return membership @@ -724,7 +725,7 @@ def submit_application(owner=None, set_resource_policies(application, policies) logger.info("User %s submitted %s." % (request_user.log_display, application.log_display)) - project_notif.application_submit_notify(application) + project_notif.application_notify(application, "submit") return application @@ -811,7 +812,7 @@ def deny_application(application_id, request_user=None, reason=""): application.deny(actor=request_user, reason=reason) logger.info("%s has been denied with reason \"%s\"." % (application.log_display, reason)) - project_notif.application_deny_notify(application) + project_notif.application_notify(application, "deny") def check_conflicting_projects(application): @@ -860,7 +861,7 @@ def approve_application(app_id, request_user=None, reason=""): project.resume(actor=request_user, reason="APPROVE") quotas.qh_sync_locked_users(members) logger.info("%s has been approved." % (application.log_display)) - project_notif.application_approve_notify(application) + project_notif.application_notify(application, "approve") def check_expiration(execute=False): @@ -882,7 +883,7 @@ def terminate(project_id, request_user=None, reason=None): quotas.qh_sync_project(project) logger.info("%s has been terminated." % (project)) - project_notif.project_termination_notify(project) + project_notif.project_notify(project, "terminate") def suspend(project_id, request_user=None, reason=None): @@ -894,7 +895,7 @@ def suspend(project_id, request_user=None, reason=None): quotas.qh_sync_project(project) logger.info("%s has been suspended." % (project)) - project_notif.project_suspension_notify(project) + project_notif.project_notify(project, "suspend") def unsuspend(project_id, request_user=None, reason=None): @@ -908,7 +909,7 @@ def unsuspend(project_id, request_user=None, reason=None): project.resume(actor=request_user, reason=reason) quotas.qh_sync_project(project) logger.info("%s has been unsuspended." % (project)) - project_notif.project_unsuspension_notify(project) + project_notif.project_notify(project, "unsuspend") def reinstate(project_id, request_user=None, reason=None): @@ -924,7 +925,7 @@ def reinstate(project_id, request_user=None, reason=None): project.resume(actor=request_user, reason=reason) quotas.qh_sync_project(project) logger.info("%s has been reinstated" % (project)) - project_notif.project_reinstatement_notify(project) + project_notif.project_notify(project, "reinstate") def _partition_by(f, l): diff --git a/snf-astakos-app/astakos/im/project_notif.py b/snf-astakos-app/astakos/im/project_notif.py index 42ae05284a7d9ab14a07912b18b605427521297e..ddd428b1f04868e103f94568a95a83fcb6e08f9d 100644 --- a/snf-astakos-app/astakos/im/project_notif.py +++ b/snf-astakos-app/astakos/im/project_notif.py @@ -79,119 +79,78 @@ def membership_enroll_notify(project, user): logger.error(e.message) -def membership_request_notify(project, requested_user): - try: - notification = build_notification( - SENDER, - [project.application.owner.email], - _(messages.PROJECT_MEMBERSHIP_REQUEST_SUBJECT) % project.__dict__, - template='im/projects/project_membership_request_notification.txt', - dictionary={'object': project, 'user': requested_user.email}) - notification.send() - except NotificationError, e: - logger.error(e.message) +MEMBERSHIP_REQUEST_DATA = { + "join": lambda p: ( + _(messages.PROJECT_MEMBERSHIP_REQUEST_SUBJECT) % p.__dict__, + "im/projects/project_membership_request_notification.txt"), + "leave": lambda p: ( + _(messages.PROJECT_MEMBERSHIP_LEAVE_REQUEST_SUBJECT) % p.__dict__, + "im/projects/project_membership_leave_request_notification.txt"), +} -def membership_leave_request_notify(project, requested_user): - template = 'im/projects/project_membership_leave_request_notification.txt' +def membership_request_notify(project, requested_user, action): + subject, template = MEMBERSHIP_REQUEST_DATA[action](project) try: - notification = build_notification( - SENDER, - [project.application.owner.email], - _(messages.PROJECT_MEMBERSHIP_LEAVE_REQUEST_SUBJECT) % - project.__dict__, + build_notification( + SENDER, [project.application.owner.email], subject, template=template, - dictionary={'object': project, 'user': requested_user.email}) - notification.send() - except NotificationError, e: - logger.error(e.message) - - -def application_submit_notify(application): - try: - notification = build_notification( - SENDER, NOTIFY_RECIPIENTS, - _(messages.PROJECT_CREATION_SUBJECT) % application.__dict__, - template='im/projects/project_creation_notification.txt', - dictionary={'object': application}) - notification.send() - except NotificationError, e: - logger.error(e.message) - - -def application_deny_notify(application): - try: - notification = build_notification( - SENDER, - [application.owner.email], - _(messages.PROJECT_DENIED_SUBJECT) % application.__dict__, - template='im/projects/project_denial_notification.txt', - dictionary={'object': application}) - notification.send() - except NotificationError, e: - logger.error(e.message) - - -def application_approve_notify(application): - try: - notification = build_notification( - SENDER, - [application.owner.email], - _(messages.PROJECT_APPROVED_SUBJECT) % application.__dict__, - template='im/projects/project_approval_notification.txt', - dictionary={'object': application}) - notification.send() + dictionary={'object': project, 'user': requested_user.email} + ).send() except NotificationError, e: logger.error(e.message) -def project_termination_notify(project): - app = project.application - try: - build_notification( - SENDER, - [project.application.owner.email], - _(messages.PROJECT_TERMINATION_SUBJECT) % app.__dict__, - template='im/projects/project_termination_notification.txt', - dictionary={'object': project} - ).send() - except NotificationError, e: - logger.error(e.message) +APPLICATION_DATA = { + "submit": lambda a: ( + NOTIFY_RECIPIENTS, + _(messages.PROJECT_CREATION_SUBJECT) % a.__dict__, + "im/projects/project_creation_notification.txt"), + "deny": lambda a: ( + [a.owner.email], + _(messages.PROJECT_DENIED_SUBJECT) % a.__dict__, + "im/projects/project_denial_notification.txt"), + "approve": lambda a: ( + [a.owner.email], + _(messages.PROJECT_APPROVED_SUBJECT) % a.__dict__, + "im/projects/project_approval_notification.txt"), +} -def project_suspension_notify(project): +def application_notify(application, action): + recipients, subject, template = APPLICATION_DATA[action](application) try: build_notification( - SENDER, - [project.application.owner.email], - _(messages.PROJECT_SUSPENSION_SUBJECT) % project.__dict__, - template='im/projects/project_suspension_notification.txt', - dictionary={'object': project} + SENDER, recipients, subject, + template=template, + dictionary={'object': application} ).send() except NotificationError, e: logger.error(e.message) -def project_unsuspension_notify(project): - try: - build_notification( - SENDER, - [project.application.owner.email], - _(messages.PROJECT_UNSUSPENSION_SUBJECT) % project.__dict__, - template='im/projects/project_unsuspension_notification.txt', - dictionary={'object': project} - ).send() - except NotificationError, e: - logger.error(e.message) +PROJECT_DATA = { + "terminate": lambda p: ( + _(messages.PROJECT_TERMINATION_SUBJECT) % p.application.__dict__, + "im/projects/project_termination_notification.txt"), + "reinstate": lambda p: ( + _(messages.PROJECT_REINSTATEMENT_SUBJECT) % p.__dict__, + "im/projects/project_reinstatement_notification.txt"), + "suspend": lambda p: ( + _(messages.PROJECT_SUSPENSION_SUBJECT) % p.__dict__, + "im/projects/project_suspension_notification.txt"), + "unsuspend": lambda p: ( + _(messages.PROJECT_UNSUSPENSION_SUBJECT) % p.__dict__, + "im/projects/project_unsuspension_notification.txt"), +} -def project_reinstatement_notify(project): +def project_notify(project, action): + subject, template = PROJECT_DATA[action](project) try: build_notification( - SENDER, - [project.application.owner.email], - _(messages.PROJECT_REINSTATEMENT_SUBJECT) % project.__dict__, - template='im/projects/project_reinstatement_notification.txt', + SENDER, [project.application.owner.email], subject, + template=template, dictionary={'object': project} ).send() except NotificationError, e: