def list_participants(incident_id: int, command: dict = None, db_session=None): """Returns the list of incident participants to the user as an ephemeral message.""" blocks = [] blocks.append( {"type": "section", "text": {"type": "mrkdwn", "text": "*Incident Participants*"}} ) participants = participant_service.get_all_by_incident_id( db_session=db_session, incident_id=incident_id ) contact_plugin = plugins.get(INCIDENT_PLUGIN_CONTACT_SLUG) for participant in participants: if participant.is_active: participant_email = participant.individual.email participant_info = contact_plugin.get(participant_email) participant_name = participant_info["fullname"] participant_team = participant_info["team"] participant_department = participant_info["department"] participant_location = participant_info["location"] participant_weblink = participant_info["weblink"] participant_avatar_url = dispatch_slack_service.get_user_avatar_url( slack_client, participant_email ) participant_active_roles = participant_role_service.get_all_active_roles( db_session=db_session, participant_id=participant.id ) participant_roles = [] for role in participant_active_roles: participant_roles.append(role.role) blocks.append( { "type": "section", "text": { "type": "mrkdwn", "text": ( f"*Name:* <{participant_weblink}|{participant_name}>\n" f"*Team*: {participant_team}, {participant_department}\n" f"*Location*: {participant_location}\n" f"*Incident Role(s)*: {(', ').join(participant_roles)}\n" ), }, "accessory": { "type": "image", "image_url": participant_avatar_url, "alt_text": participant_name, }, } ) blocks.append({"type": "divider"}) dispatch_slack_service.send_ephemeral_message( slack_client, command["channel_id"], command["user_id"], "Incident List Participants", blocks=blocks, )
def test_get_all_by_incident_id(session, incident, participants): from dispatch.participant.service import get_all_by_incident_id for participant in participants: incident.participants.append(participant) t_participants = get_all_by_incident_id(db_session=session, incident_id=incident.id).all() assert len(t_participants) > 1
def list_participants(incident_id: int, command: dict = None, db_session=None): """Returns the list of incident participants to the user as an ephemeral message.""" blocks = [] blocks.append( {"type": "section", "text": {"type": "mrkdwn", "text": "*Incident Participants*"}} ) participants = participant_service.get_all_by_incident_id( db_session=db_session, incident_id=incident_id ).all() contact_plugin = plugin_service.get_active(db_session=db_session, plugin_type="contact") for participant in participants: if participant.is_active: participant_email = participant.individual.email participant_info = contact_plugin.instance.get(participant_email) participant_name = participant_info["fullname"] participant_team = participant_info["team"] participant_department = participant_info["department"] participant_location = participant_info["location"] participant_weblink = participant_info["weblink"] participant_avatar_url = dispatch_slack_service.get_user_avatar_url( slack_client, participant_email ) participant_reason_added = participant.added_reason or "Unknown" if participant.added_by: participant_added_by = participant.added_by.individual.name else: participant_added_by = "Unknown" participant_active_roles = participant_role_service.get_all_active_roles( db_session=db_session, participant_id=participant.id ) participant_roles = [] for role in participant_active_roles: participant_roles.append(role.role) block = { "type": "section", "text": { "type": "mrkdwn", "text": ( f"*Name:* <{participant_weblink}|{participant_name}>\n" f"*Team*: {participant_team}, {participant_department}\n" f"*Location*: {participant_location}\n" f"*Incident Role(s)*: {(', ').join(participant_roles)}\n" f"*Reason Added*: {participant_reason_added}\n" f"*Added By*: {participant_added_by}\n" ), }, } if len(participants) < 20: block.update( { "accessory": { "type": "image", "alt_text": participant_name, "image_url": participant_avatar_url, }, } ) blocks.append(block) blocks.append({"type": "divider"}) dispatch_slack_service.send_ephemeral_message( slack_client, command["channel_id"], command["user_id"], "Incident Participant List", blocks=blocks, )
def list_participants( user_id: str, user_email: str, channel_id: str, incident_id: int, config: SlackConversationConfiguration = None, command: dict = None, db_session=None, slack_client=None, ): """Returns the list of incident participants to the user as an ephemeral message.""" blocks = [] blocks.append( {"type": "section", "text": {"type": "mrkdwn", "text": "*Incident Participants*"}} ) participants = participant_service.get_all_by_incident_id( db_session=db_session, incident_id=incident_id ).all() incident = incident_service.get(db_session=db_session, incident_id=incident_id) contact_plugin = plugin_service.get_active_instance( db_session=db_session, project_id=incident.project.id, plugin_type="contact" ) for participant in participants: if participant.active_roles: participant_email = participant.individual.email participant_info = contact_plugin.instance.get(participant_email, db_session=db_session) participant_name = participant_info.get("fullname", participant.individual.email) participant_team = participant_info.get("team", "Unknown") participant_department = participant_info.get("department", "Unknown") participant_location = participant_info.get("location", "Unknown") participant_weblink = participant_info.get("weblink") participant_avatar_url = dispatch_slack_service.get_user_avatar_url( slack_client, participant_email ) participant_reason_added = participant.added_reason or "Unknown" if participant.added_by: participant_added_by = participant.added_by.individual.name else: participant_added_by = "Unknown" participant_active_roles = participant_role_service.get_all_active_roles( db_session=db_session, participant_id=participant.id ) participant_roles = [] for role in participant_active_roles: participant_roles.append(role.role) # TODO we should make this more resilient to missing data (kglisson) block = { "type": "section", "text": { "type": "mrkdwn", "text": ( f"*Name:* <{participant_weblink}|{participant_name} ({participant_email})>\n" f"*Team*: {participant_team}, {participant_department}\n" f"*Location*: {participant_location}\n" f"*Incident Role(s)*: {(', ').join(participant_roles)}\n" f"*Reason Added*: {participant_reason_added}\n" f"*Added By*: {participant_added_by}\n" ), }, } if len(participants) < 20: block.update( { "accessory": { "type": "image", "alt_text": participant_name, "image_url": participant_avatar_url, }, } ) blocks.append(block) blocks.append({"type": "divider"}) dispatch_slack_service.send_ephemeral_message( slack_client, channel_id, user_id, "Incident Participant List", blocks=blocks, )