Skip to content

Commit ec7ef3c

Browse files
committed
feat(admin): run perform_detect task on admin save
1 parent 5044154 commit ec7ef3c

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

controller/sentry/admin.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from controller.sentry.inlines import AppEventInline, ProjectEventInline
2525
from controller.sentry.mixins import ChartMixin, PrettyTypeMixin, ProjectLinkMixin
2626
from controller.sentry.models import App, Event, Project
27+
from controller.sentry.tasks import perform_detect
2728
from controller.sentry.utils import invalidate_cache
2829

2930
if TYPE_CHECKING: # pragma: no cover # pragma: no cover
@@ -114,6 +115,21 @@ def get_chart_data(self, sentry_id):
114115
}
115116
return data, options
116117

118+
def save_model(self, request: "HttpRequest", obj: Project, form: "ModelForm[Project]", change: dict) -> None:
119+
"""This method is responsible to save project in the admin.
120+
121+
We hook into it to start a :func:`perform_detect <controller.sentry.tasks.perform_detect>` task
122+
123+
Args:
124+
request (HttpRequest): The request
125+
obj (Project): The app to save
126+
form (ModelForm[Project]): form
127+
change (bool): change
128+
"""
129+
if change:
130+
perform_detect.delay(obj.sentry_id)
131+
return super().save_model(request, obj, form, change)
132+
117133

118134
@admin.register(Event)
119135
class EventAdmin(

controller/sentry/tests/test_admin.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,3 +480,18 @@ def test_app_filter(admin_with_user):
480480
)
481481

482482
assert list(filter_none.queryset(request, App.objects.all())) == list(App.objects.all())
483+
484+
485+
@patch("controller.sentry.admin.perform_detect")
486+
@pytest.mark.django_db
487+
@pytest.mark.parametrize("user_group", ["Developer"])
488+
@pytest.mark.admin_site(model_class=Project)
489+
def test_project_admin_save_model(perform_detect: Mock, admin_with_user):
490+
site, request = admin_with_user
491+
project = Project(sentry_id="test_project")
492+
site.save_model(request, project, None, True)
493+
perform_detect.delay.assert_called_once_with(project.sentry_id)
494+
495+
perform_detect.reset_mock()
496+
site.save_model(request, project, None, None)
497+
perform_detect.delay.assert_not_called()

0 commit comments

Comments
 (0)