Skip to content

Commit

Permalink
ref: fix some types for sentry.notifications (#72814)
Browse files Browse the repository at this point in the history
<!-- Describe your PR here. -->
  • Loading branch information
asottile-sentry authored Jun 14, 2024
1 parent dcfbb50 commit d5d848c
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 20 deletions.
16 changes: 8 additions & 8 deletions src/sentry/notifications/notificationcontroller.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,10 @@ def __init__(
self.type = type
self.provider = provider

org_mapping = OrganizationMapping.objects.filter(organization_id=organization_id).first()
org = (
serialize_organization_mapping(
OrganizationMapping.objects.filter(organization_id=organization_id).first()
)
if organization_id
serialize_organization_mapping(org_mapping)
if organization_id and org_mapping is not None
else None
)
if org and features.has("organizations:team-workflow-notifications", org):
Expand Down Expand Up @@ -290,11 +289,12 @@ def _get_layered_setting_providers(
)
)

org_mapping = OrganizationMapping.objects.filter(
organization_id=self.organization_id
).first()
org = (
serialize_organization_mapping(
OrganizationMapping.objects.filter(organization_id=self.organization_id).first()
)
if self.organization_id
serialize_organization_mapping(org_mapping)
if self.organization_id and org_mapping is not None
else None
)
has_team_workflow = org and features.has("organizations:team-workflow-notifications", org)
Expand Down
11 changes: 8 additions & 3 deletions src/sentry/notifications/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from collections.abc import Iterable, Mapping, MutableMapping, Sequence
from dataclasses import dataclass
from datetime import timedelta
from typing import TYPE_CHECKING, Any, Optional, Union, cast
from typing import TYPE_CHECKING, Any, Optional, TypedDict, Union, cast
from urllib.parse import parse_qs, urlparse

from django.db.models import Count
Expand Down Expand Up @@ -87,12 +87,17 @@ def get_group_counts_by_project(
)


class _RepoCommitsDict(TypedDict):
name: str
commits: list[tuple[Commit, RpcUser | None]]


def get_repos(
commits: Iterable[Commit],
users_by_email: Mapping[str, RpcUser],
organization: Organization,
) -> Iterable[Mapping[str, str | Iterable[tuple[Commit, RpcUser | None]]]]:
repositories_by_id = {
) -> list[_RepoCommitsDict]:
repositories_by_id: dict[int, _RepoCommitsDict] = {
repository_id: {"name": repository_name, "commits": []}
for repository_id, repository_name in Repository.objects.filter(
organization_id=organization.id,
Expand Down
15 changes: 6 additions & 9 deletions src/sentry/notifications/utils/participants.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,23 +162,20 @@ def get_participants_for_release(
projects: Iterable[Project], organization: Organization, commited_user_ids: set[int]
) -> ParticipantMap:
# Collect all users with verified emails on a team in the related projects.
user_ids = list(
OrganizationMember.objects.filter(
user_ids = [
user_id
for user_id in OrganizationMember.objects.filter(
teams__projectteam__project__in=projects,
user_is_active=True,
user_id__isnull=False,
)
.distinct()
.values_list("user_id", flat=True)
)
if user_id is not None
]

# filter those user ids by verified emails
user_ids = user_service.get_many_ids(
filter=dict(
user_ids=user_ids,
email_verified=True,
)
)
user_ids = user_service.get_many_ids(filter=dict(user_ids=user_ids, email_verified=True))

actors = Actor.many_from_object(RpcUser(id=user_id) for user_id in user_ids)
# don't pass in projects since the settings are scoped to the organization only for now
Expand Down

0 comments on commit d5d848c

Please sign in to comment.