Skip to content

Commit 75866a5

Browse files
ref: fix type for serializers.models.rule (#83444)
<!-- Describe your PR here. -->
1 parent 8c6b4dd commit 75866a5

File tree

2 files changed

+26
-16
lines changed

2 files changed

+26
-16
lines changed

pyproject.toml

-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ module = [
161161
"sentry.api.serializers.models.organization",
162162
"sentry.api.serializers.models.project",
163163
"sentry.api.serializers.models.role",
164-
"sentry.api.serializers.models.rule",
165164
"sentry.auth.helper",
166165
"sentry.auth.provider",
167166
"sentry.auth.system",

src/sentry/api/serializers/models/rule.py

+26-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
from __future__ import annotations
2+
13
from collections.abc import Mapping
2-
from typing import TypedDict
4+
from typing import Any, TypedDict
35

46
from django.db.models import Max, Q, prefetch_related_objects
57
from rest_framework import serializers
@@ -30,7 +32,7 @@ def _is_filter(data):
3032
from sentry.rules import rules
3133

3234
rule_cls = rules.get(data["id"])
33-
return rule_cls.rule_type == "filter/event"
35+
return rule_cls is not None and rule_cls.rule_type == "filter/event"
3436

3537

3638
class RuleCreatedBy(TypedDict):
@@ -39,21 +41,28 @@ class RuleCreatedBy(TypedDict):
3941
email: str
4042

4143

44+
class _ErrorDict(TypedDict):
45+
detail: str
46+
47+
4248
class RuleSerializerResponseOptional(TypedDict, total=False):
4349
owner: str | None
4450
createdBy: RuleCreatedBy | None
4551
environment: str | None
4652
lastTriggered: str | None
4753
snoozeCreatedBy: str | None
4854
snoozeForEveryone: bool | None
55+
disableReason: str
56+
disableDate: str
57+
errors: list[_ErrorDict]
4958

5059

5160
class RuleSerializerResponse(RuleSerializerResponseOptional):
5261
"""
5362
This represents a Sentry Rule.
5463
"""
5564

56-
id: str
65+
id: str | None
5766
conditions: list[dict]
5867
filters: list[dict]
5968
actions: list[dict]
@@ -89,6 +98,7 @@ def get_attrs(self, item_list, user, **kwargs):
8998
[_f for _f in [i.environment_id for i in item_list] if _f]
9099
)
91100

101+
result: dict[Rule, dict[str, Any]]
92102
result = {i: {"environment": environments.get(i.environment_id)} for i in item_list}
93103
ras = list(
94104
RuleActivity.objects.filter(
@@ -104,15 +114,18 @@ def get_attrs(self, item_list, user, **kwargs):
104114
}
105115

106116
for rule_activity in ras:
107-
u = users.get(rule_activity.user_id)
108-
if u:
109-
creator = {
110-
"id": u.id,
111-
"name": u.get_display_name(),
112-
"email": u.email,
113-
}
114-
else:
117+
if rule_activity.user_id is None:
115118
creator = None
119+
else:
120+
u = users.get(rule_activity.user_id)
121+
if u:
122+
creator = {
123+
"id": u.id,
124+
"name": u.get_display_name(),
125+
"email": u.email,
126+
}
127+
else:
128+
creator = None
116129

117130
result[rule_activity.rule].update({"created_by": creator})
118131

@@ -226,7 +239,7 @@ def serialize(self, obj, attrs, user, **kwargs) -> RuleSerializerResponse:
226239
# Integrations can be deleted and we don't want to fail to load the rule
227240
pass
228241

229-
d = {
242+
d: RuleSerializerResponse = {
230243
# XXX(dcramer): we currently serialize unsaved rule objects
231244
# as part of the rule editor
232245
"id": str(obj.id) if obj.id else None,
@@ -245,6 +258,7 @@ def serialize(self, obj, attrs, user, **kwargs) -> RuleSerializerResponse:
245258
"environment": environment.name if environment is not None else None,
246259
"projects": [obj.project.slug],
247260
"status": "active" if obj.status == ObjectStatus.ACTIVE else "disabled",
261+
"snooze": "snooze" in attrs,
248262
}
249263
if "last_triggered" in attrs:
250264
d["lastTriggered"] = attrs["last_triggered"]
@@ -254,7 +268,6 @@ def serialize(self, obj, attrs, user, **kwargs) -> RuleSerializerResponse:
254268

255269
if "snooze" in attrs:
256270
snooze = attrs["snooze"]
257-
d["snooze"] = True
258271
created_by = None
259272
if user.id == snooze.get("owner_id"):
260273
created_by = "You"
@@ -266,8 +279,6 @@ def serialize(self, obj, attrs, user, **kwargs) -> RuleSerializerResponse:
266279
if created_by is not None:
267280
d["snoozeCreatedBy"] = created_by
268281
d["snoozeForEveryone"] = snooze.get("user_id") is None
269-
else:
270-
d["snooze"] = False
271282

272283
if "disable_date" in attrs:
273284
d["disableReason"] = "noisy"

0 commit comments

Comments
 (0)