Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixing case creation logic #3224

Merged
merged 4 commits into from
Apr 5, 2023
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
76 changes: 38 additions & 38 deletions src/dispatch/signal/flows.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,52 +31,52 @@ def signal_instance_create_flow(
signal_instance.entities = entities
db_session.commit()

if not signal_service.apply_filter_actions(
db_session=db_session, signal_instance=signal_instance
):
if signal_instance.signal.create_case:
# create a case if not duplicate or snoozed
case_in = CaseCreate(
title=signal_instance.signal.name,
description=signal_instance.signal.description,
case_priority=signal_instance.signal.case_priority,
project=signal_instance.project,
case_type=signal_instance.signal.case_type,
)
case = case_service.create(
db_session=db_session, case_in=case_in, current_user=current_user
)
if not signal_instance.signal.create_case:
return signal_instance

# we don't need to continue if a filter action took place
if signal_service.filter_signal(db_session=db_session, signal_instance=signal_instance):
return signal_instance

# create a case if not duplicate or snoozed
case_in = CaseCreate(
title=signal_instance.signal.name,
description=signal_instance.signal.description,
case_priority=signal_instance.signal.case_priority,
project=signal_instance.project,
case_type=signal_instance.signal.case_type,
)
case = case_service.create(db_session=db_session, case_in=case_in, current_user=current_user)
signal_instance.case = case

signal_instance.case = case
db_session.commit()

db_session.commit()
service_id = None
if signal_instance.signal.oncall_service:
service_id = signal_instance.signal.oncall_service.external_id

service_id = None
if signal_instance.signal.oncall_service:
service_id = signal_instance.signal.oncall_service.external_id
conversation_target = None
if signal_instance.signal.conversation_target:
conversation_target = signal_instance.signal.conversation_target

conversation_target = None
if signal_instance.signal.conversation_target:
conversation_target = signal_instance.signal.conversation_target
case_flows.case_new_create_flow(
db_session=db_session,
organization_slug=None,
service_id=service_id,
conversation_target=conversation_target,
case_id=case.id,
)

case_flows.case_new_create_flow(
# run workflows if not duplicate or snoozed
if workflows := signal_instance.signal.workflows:
for workflow in workflows:
workflow_flows.signal_workflow_run_flow(
current_user=current_user,
db_session=db_session,
organization_slug=None,
service_id=service_id,
conversation_target=conversation_target,
case_id=case.id,
signal_instance=signal_instance,
workflow=workflow,
)

# run workflows if not duplicate or snoozed
if workflows := signal_instance.signal.workflows:
for workflow in workflows:
workflow_flows.signal_workflow_run_flow(
current_user=current_user,
db_session=db_session,
signal_instance=signal_instance,
workflow=workflow,
)

return signal_instance


Expand Down
14 changes: 6 additions & 8 deletions src/dispatch/signal/service.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import json
from datetime import datetime, timedelta, timezone
from typing import Literal, Optional
from typing import Optional

from pydantic.error_wrappers import ErrorWrapper, ValidationError
from sqlalchemy import asc
Expand Down Expand Up @@ -349,12 +349,10 @@ def create_instance(
return signal_instance


def apply_filter_actions(
*, db_session: Session, signal_instance: SignalInstance
) -> Literal[True] | None:
def filter_signal(*, db_session: Session, signal_instance: SignalInstance) -> bool:
"""Applies any matching filter actions associated with this instance."""

action = False
filtered = False
for f in signal_instance.signal.filters:
if f.mode != SignalFilterMode.active:
continue
Expand All @@ -375,7 +373,7 @@ def apply_filter_actions(

if instances:
signal_instance.filter_action = SignalFilterAction.snooze
action = True
filtered = True
break

elif f.action == SignalFilterAction.deduplicate:
Expand All @@ -390,8 +388,8 @@ def apply_filter_actions(
# associate with existing case
signal_instance.case_id = instances[0].case_id
signal_instance.filter_action = SignalFilterAction.deduplicate
action = True
filtered = True
break

db_session.commit()
return action
return filtered
12 changes: 6 additions & 6 deletions tests/signal/test_signal_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def test_filter_actions_deduplicate(session, signal, project):
SignalInstance,
SignalFilterAction,
)
from dispatch.signal.service import apply_filter_actions
from dispatch.signal.service import filter_signal
from dispatch.entity_type.models import EntityType
from dispatch.entity.models import Entity

Expand Down Expand Up @@ -99,7 +99,7 @@ def test_filter_actions_deduplicate(session, signal, project):
signal.filters.append(signal_filter)

session.commit()
assert apply_filter_actions(db_session=session, signal_instance=signal_instance_2)
assert filter_signal(db_session=session, signal_instance=signal_instance_2)
assert signal_instance_2.filter_action == SignalFilterAction.deduplicate


Expand All @@ -110,7 +110,7 @@ def test_filter_actions_snooze(session, entity, signal, project):
SignalInstance,
SignalFilterAction,
)
from dispatch.signal.service import apply_filter_actions
from dispatch.signal.service import filter_signal
from dispatch.entity_type.models import EntityType

entity_type = EntityType(
Expand Down Expand Up @@ -143,7 +143,7 @@ def test_filter_actions_snooze(session, entity, signal, project):
signal.filters = [signal_filter]

session.commit()
assert apply_filter_actions(db_session=session, signal_instance=signal_instance_1)
assert filter_signal(db_session=session, signal_instance=signal_instance_1)
assert signal_instance_1.filter_action == SignalFilterAction.snooze


Expand All @@ -154,7 +154,7 @@ def test_filter_actions_snooze_expired(session, entity, signal, project):
SignalInstance,
SignalFilterAction,
)
from dispatch.signal.service import apply_filter_actions
from dispatch.signal.service import filter_signal
from dispatch.entity_type.models import EntityType

entity_type = EntityType(
Expand Down Expand Up @@ -184,4 +184,4 @@ def test_filter_actions_snooze_expired(session, entity, signal, project):

signal.filters = [signal_filter]
session.commit()
assert not apply_filter_actions(db_session=session, signal_instance=signal_instance_1)
assert not filter_signal(db_session=session, signal_instance=signal_instance_1)