diff --git a/src/dispatch/plugins/dispatch_slack/case/interactive.py b/src/dispatch/plugins/dispatch_slack/case/interactive.py index 6913fd40f32a..17206b6ad1a8 100644 --- a/src/dispatch/plugins/dispatch_slack/case/interactive.py +++ b/src/dispatch/plugins/dispatch_slack/case/interactive.py @@ -16,8 +16,8 @@ ) from slack_bolt import Ack, BoltContext, Respond from slack_sdk.web.client import WebClient -from sqlalchemy.orm import Session from sqlalchemy.exc import IntegrityError +from sqlalchemy.orm import Session from dispatch.auth.models import DispatchUser from dispatch.case import flows as case_flows @@ -71,7 +71,7 @@ from dispatch.project import service as project_service from dispatch.search.utils import create_filter_expression from dispatch.signal import service as signal_service -from dispatch.signal.models import SignalUpdate, SignalFilterCreate, SignalFilterRead +from dispatch.signal.models import SignalFilterCreate, SignalFilterRead, SignalUpdate def configure(config: SlackConversationConfiguration): @@ -1315,7 +1315,9 @@ def signal_button_click( ack: Ack, body: dict, db_session: Session, context: BoltContext, client: WebClient ): ack() - signal = signal_service.get(db_session=db_session, signal_id=context["subject"].id) + signal = signal_service.get_signal_instance( + db_session=db_session, signal_instance_id=context["subject"].id + ) blocks = [Section(text=f"```{json.dumps(signal.raw, indent=2)}```")] diff --git a/src/dispatch/signal/service.py b/src/dispatch/signal/service.py index c890731561d1..7088796b1469 100644 --- a/src/dispatch/signal/service.py +++ b/src/dispatch/signal/service.py @@ -1,11 +1,14 @@ import json +from sqlalchemy_utils import cast_if + from datetime import datetime, timedelta, timezone from typing import Optional, Literal from pydantic.error_wrappers import ErrorWrapper, ValidationError -from sqlalchemy import asc +from sqlalchemy import asc, String from sqlalchemy.orm import Session + from dispatch.auth.models import DispatchUser from dispatch.case.priority import service as case_priority_service from dispatch.case.type import service as case_type_service @@ -118,6 +121,15 @@ def get_signal_filter(*, db_session: Session, signal_filter_id: int) -> SignalFi return db_session.query(SignalFilter).filter(SignalFilter.id == signal_filter_id).one_or_none() +def get_signal_instance(*, db_session: Session, signal_instance_id: int | str): + """Gets a signal instance by it's UUID.""" + return ( + db_session.query(SignalInstance) + .filter(SignalInstance.id == cast_if(signal_instance_id, String)) + .one_or_none() + ) + + def get(*, db_session: Session, signal_id: int) -> Optional[Signal]: """Gets a signal by id.""" return db_session.query(Signal).filter(Signal.id == signal_id).one_or_none()