Skip to content
This repository was archived by the owner on Sep 3, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 4 additions & 30 deletions src/dispatch/signal/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,14 @@
from dispatch.case.type import service as case_type_service
from dispatch.case.type.models import CaseType
from dispatch.database.service import apply_filter_specific_joins, apply_filters
from dispatch.entity import service as entity_service
from dispatch.entity.models import Entity
from dispatch.entity_type import service as entity_type_service
from dispatch.entity_type.models import EntityScopeEnum
from dispatch.entity_type.models import EntityType
from dispatch.exceptions import NotFoundError
from dispatch.project import service as project_service
from dispatch.service import service as service_service
from dispatch.tag import service as tag_service
from dispatch.workflow import service as workflow_service
from sqlalchemy.exc import IntegrityError

from .exceptions import (
SignalNotDefinedException,
Expand Down Expand Up @@ -171,33 +168,10 @@ def create_signal_instance(*, db_session: Session, signal_instance_in: SignalIns

signal_instance_in.signal = signal_definition

try:
signal_instance = create_instance(
db_session=db_session, signal_instance_in=signal_instance_in
)
signal_instance.signal = signal_definition
db_session.commit()
except IntegrityError:
db_session.rollback()
signal_instance = update_instance(
db_session=db_session, signal_instance_in=signal_instance_in
)
# Note: we can do this because it's still relatively cheap, if we add more logic here
# this will need to be moved to a background function (similar to case creation)
# fetch `all` entities that should be associated with all signal definitions
entity_types = entity_type_service.get_all(
db_session=db_session, scope=EntityScopeEnum.all
).all()
entity_types = signal_instance.signal.entity_types + entity_types

if entity_types:
entities = entity_service.find_entities(
db_session=db_session,
signal_instance=signal_instance,
entity_types=entity_types,
)
signal_instance.entities = entities
db_session.commit()
signal_instance = create_instance(db_session=db_session, signal_instance_in=signal_instance_in)
signal_instance.signal = signal_definition
db_session.commit()

return signal_instance


Expand Down
1 change: 1 addition & 0 deletions src/dispatch/signal/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ def create_signal_instance(
response: Response,
):
"""Creates a new signal instance."""
# TODO this should be refactored to use the signal service
project = project_service.get_by_name_or_default(
db_session=db_session, project_in=signal_instance_in.project
)
Expand Down