Skip to content
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
2 changes: 1 addition & 1 deletion requirements-dev-frozen.txt
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ selenium==4.16.0
sentry-arroyo==2.16.5
sentry-cli==2.16.0
sentry-devenv==1.6.2
sentry-forked-django-stubs==5.0.2.post4
sentry-forked-django-stubs==5.0.2.post5
sentry-forked-djangorestframework-stubs==3.15.0.post1
sentry-kafka-schemas==0.1.101
sentry-ophio==0.2.7
Expand Down
2 changes: 1 addition & 1 deletion requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ pip-tools>=7.1.0
packaging>=21.3

# for type checking
sentry-forked-django-stubs>=5.0.2.post4
sentry-forked-django-stubs>=5.0.2.post5
sentry-forked-djangorestframework-stubs>=3.15.0.post1
lxml-stubs
msgpack-types>=0.2.0
Expand Down
4 changes: 2 additions & 2 deletions src/sentry/audit_log/services/log/impl.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def record_audit_log(self, *, event: AuditLogEvent) -> None:
category=OutboxCategory.AUDIT_LOG_EVENT,
object_identifier=RegionOutbox.next_object_identifier(),
payload=event.__dict__,
) # type: ignore[misc]
)
outbox.save()

def record_user_ip(self, *, event: UserIpEvent) -> None:
Expand All @@ -91,7 +91,7 @@ def record_user_ip(self, *, event: UserIpEvent) -> None:
category=OutboxCategory.USER_IP_EVENT,
object_identifier=event.user_id,
payload=event.__dict__,
) # type: ignore[misc]
)
outbox.save()

def find_last_log(
Expand Down
2 changes: 1 addition & 1 deletion src/sentry/auth/services/orgauthtoken/impl.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,5 @@ def update_orgauthtoken(
"org_auth_token_id": org_auth_token_id,
"date_last_used": date_last_used,
"project_last_used_id": project_last_used_id,
}, # type: ignore[misc]
},
).save()
4 changes: 2 additions & 2 deletions src/sentry/db/models/outboxes.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ class ReplicatedRegionModel(RegionOutboxProducingModel):
class Meta:
abstract = True

def payload_for_update(self) -> Mapping[str, Any] | None:
def payload_for_update(self) -> dict[str, Any] | None:
"""
A custom json payload to be included in outboxes generated via creation, update, or deletion.
Note that outboxes are COALESCED! This means that when multiple updates are processed at once,
Expand Down Expand Up @@ -358,7 +358,7 @@ def outbox_region_names(self) -> Collection[str]:
# joins a new organization after the last outbox was processed is a special case that requires special handling.
raise NotImplementedError

def payload_for_update(self) -> Mapping[str, Any] | None:
def payload_for_update(self) -> dict[str, Any] | None:
"""
A custom json payload to be included in outboxes generated via creation, update, or deletion.
Note that outboxes are COALESCED! This means that when multiple updates are processed at once,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def create_post_provision_outbox(
shard_identifier=org_id,
category=OutboxCategory.POST_ORGANIZATION_PROVISION,
object_identifier=org_id,
payload=provisioning_options.post_provision_options.json(),
payload=provisioning_options.post_provision_options.dict(),
)


Expand All @@ -50,7 +50,7 @@ def create_organization_provisioning_outbox(
region_name: str,
org_provision_payload: OrganizationProvisioningOptions | None,
) -> ControlOutbox:
payload = org_provision_payload.json() if org_provision_payload is not None else None
payload = org_provision_payload.dict() if org_provision_payload is not None else None
return ControlOutbox(
region_name=region_name,
shard_scope=OutboxScope.PROVISION_SCOPE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def create_post_provision_outbox(
shard_identifier=org_id,
category=OutboxCategory.POST_ORGANIZATION_PROVISION,
object_identifier=org_id,
payload=provisioning_options.post_provision_options.json(),
payload=provisioning_options.post_provision_options.dict(),
)


Expand Down
4 changes: 2 additions & 2 deletions src/sentry/hybridcloud/services/replica/impl.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ def upsert_replicated_auth_provider(
auth_provider_id=auth_provider.id,
provider=auth_provider.provider,
organization_id=organization.id,
config=auth_provider.config, # type: ignore[misc]
config=auth_provider.config,
default_role=auth_provider.default_role,
default_global_access=auth_provider.default_global_access,
allow_unlinked=auth_provider.flags.allow_unlinked,
Expand All @@ -213,7 +213,7 @@ def upsert_replicated_auth_identity(
user_id=auth_identity.user_id,
auth_provider_id=auth_identity.auth_provider_id,
ident=auth_identity.ident,
data=auth_identity.data, # type: ignore[misc]
data=auth_identity.data,
last_verified=auth_identity.last_verified,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@

def validate_payload(outbox: ControlOutbox) -> bool:
payload = outbox.payload
body: str = payload.get("body", None)
if not payload or not body:
if not payload:
return False
body = payload.get("body", None)
if not body:
return False

headers = payload.get("headers", None)
Expand Down
6 changes: 5 additions & 1 deletion src/sentry/models/authidentityreplica.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
from __future__ import annotations

from typing import Any

from django.db import models
from django.utils import timezone

Expand All @@ -17,7 +21,7 @@ class AuthIdentityReplica(Model):
user_id = HybridCloudForeignKey("sentry.User", on_delete="CASCADE")
auth_provider_id = HybridCloudForeignKey("sentry.AuthProvider", on_delete="CASCADE")
ident = models.CharField(max_length=128)
data = JSONField()
data: models.Field[dict[str, Any], dict[str, Any]] = JSONField()
last_verified = models.DateTimeField(default=timezone.now)

# This represents the time at which this model was created, NOT the date_added of the original auth identity
Expand Down
4 changes: 3 additions & 1 deletion src/sentry/models/authproviderreplica.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from typing import Any

from django.db import models
from django.utils import timezone

Expand All @@ -24,7 +26,7 @@ class AuthProviderReplica(Model):
)
organization = FlexibleForeignKey("sentry.Organization", on_delete=models.CASCADE, unique=True)
provider = models.CharField(max_length=128)
config = JSONField()
config: models.Field[dict[str, Any], dict[str, Any]] = JSONField()

default_role = BoundedPositiveIntegerField(default=50)
default_global_access = models.BooleanField(default=True)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ def handle_async_deletion(
for ob in ApiToken(id=api_token_id, user_id=user_id).outboxes_for_update():
ob.save()

def payload_for_update(self) -> Mapping[str, Any] | None:
def payload_for_update(self) -> dict[str, Any] | None:
from sentry.models.apitoken import ApiToken

try:
Expand Down
2 changes: 1 addition & 1 deletion src/sentry/models/organizationmember.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ def regenerate_token(self):
self.token = self.generate_token()
self.refresh_expires_at()

def payload_for_update(self) -> Mapping[str, Any] | None:
def payload_for_update(self) -> dict[str, Any] | None:
return dict(user_id=self.user_id)

def refresh_expires_at(self):
Expand Down
6 changes: 3 additions & 3 deletions src/sentry/models/outbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ def get_scope(self) -> OutboxScope:
def as_region_outbox(
self,
model: Any | None = None,
payload: Any | None = None,
payload: dict[str, Any] | None = None,
shard_identifier: int | None = None,
object_identifier: int | None = None,
outbox: type[RegionOutboxBase] | None = None,
Expand All @@ -188,7 +188,7 @@ def as_control_outboxes(
self,
region_names: Collection[str],
model: Any | None = None,
payload: Any | None = None,
payload: dict[str, Any] | None = None,
shard_identifier: int | None = None,
object_identifier: int | None = None,
outbox: type[ControlOutboxBase] | None = None,
Expand Down Expand Up @@ -504,7 +504,7 @@ class Meta:
object_identifier = BoundedBigIntegerField(null=False)

# payload is used for webhook payloads.
payload: models.Field[dict[str, Any], dict[str, Any]] = JSONField(null=True)
payload: models.Field[dict[str, Any] | None, dict[str, Any] | None] = JSONField(null=True)

# The point at which this object was scheduled, used as a diff from scheduled_for to determine the intended delay.
scheduled_from = models.DateTimeField(null=False, default=timezone.now)
Expand Down
2 changes: 1 addition & 1 deletion tests/sentry/models/test_outbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,7 @@ def setUp(self):
shard_identifier=shard_id,
category=OutboxCategory.WEBHOOK_PROXY,
object_identifier=shard_id * 10000 + i,
payload='{"foo": "bar"}',
payload={"foo": "bar"},
).save()

def test_calculate_sharding_depths(self):
Expand Down