def update_reviewing_roles(event, users, contributions, role, assign): role_map = { PaperReviewingRole.judge: attrgetter('paper_judges'), PaperReviewingRole.content_reviewer: attrgetter('paper_content_reviewers'), PaperReviewingRole.layout_reviewer: attrgetter('paper_layout_reviewers'), } for contrib in contributions: role_group = role_map[role](contrib) for user in users: if assign: role_group.add(user) else: role_group.discard(user) contrib_ids = ['#{}'.format(c.friendly_id) for c in sorted(contributions, key=attrgetter('friendly_id'))] log_data = {'Users': ', '.join(sorted(person.full_name for person in users)), 'Contributions': ', '.join(contrib_ids)} roles_to_notify = paper_reviewing_settings.get(event, 'notify_on_assigned_contrib') if role in roles_to_notify: for user in users: notify_paper_assignment(user, role, contributions, event, assign) if assign: event.log(EventLogRealm.reviewing, EventLogKind.positive, 'Papers', 'Papers assigned ({})'.format(orig_string(role.title)), session.user, data=log_data) else: event.log(EventLogRealm.reviewing, EventLogKind.negative, 'Papers', 'Papers unassigned ({})'.format(orig_string(role.title)), session.user, data=log_data) db.session.flush() logger.info('Paper reviewing roles in event %r updated by %r', event, session.user)
def update_reviewing_roles(event, users, contributions, role, assign): role_map = { PaperReviewingRole.judge: attrgetter('paper_judges'), PaperReviewingRole.content_reviewer: attrgetter('paper_content_reviewers'), PaperReviewingRole.layout_reviewer: attrgetter('paper_layout_reviewers'), } for contrib in contributions: role_group = role_map[role](contrib) for user in users: if assign: role_group.add(user) else: role_group.discard(user) contrib_ids = [f'#{c.friendly_id}' for c in sorted(contributions, key=attrgetter('friendly_id'))] log_data = {'Users': ', '.join(sorted(person.full_name for person in users)), 'Contributions': ', '.join(contrib_ids)} roles_to_notify = paper_reviewing_settings.get(event, 'notify_on_assigned_contrib') if role in roles_to_notify: for user in users: notify_paper_assignment(user, role, contributions, event, assign) if assign: event.log(EventLogRealm.reviewing, EventLogKind.positive, 'Papers', f'Papers assigned ({orig_string(role.title)})', session.user, data=log_data) else: event.log(EventLogRealm.reviewing, EventLogKind.negative, 'Papers', f'Papers unassigned ({orig_string(role.title)})', session.user, data=log_data) db.session.flush() logger.info('Paper reviewing roles in event %r updated by %r', event, session.user)