Просмотр исходного кода

ref: upgrade django-stubs (#78057)

<!-- Describe your PR here. -->
anthony sottile 5 месяцев назад
Родитель
Сommit
7811542253

+ 2 - 2
requirements-dev-frozen.txt

@@ -42,7 +42,7 @@ django==5.1.1
 django-crispy-forms==1.14.0
 django-csp==3.8
 django-pg-zero-downtime-migrations==0.13
-django-stubs-ext==5.0.4
+django-stubs-ext==5.1.0
 djangorestframework==3.15.2
 docker==6.1.3
 drf-spectacular==0.26.3
@@ -180,7 +180,7 @@ selenium==4.16.0
 sentry-arroyo==2.16.5
 sentry-cli==2.16.0
 sentry-devenv==1.10.2
-sentry-forked-django-stubs==5.0.4.post2
+sentry-forked-django-stubs==5.1.0.post1
 sentry-forked-djangorestframework-stubs==3.15.1.post1
 sentry-kafka-schemas==0.1.111
 sentry-ophio==1.0.0

+ 1 - 1
requirements-dev.txt

@@ -35,7 +35,7 @@ pip-tools>=7.1.0
 packaging>=21.3
 
 # for type checking
-sentry-forked-django-stubs>=5.0.4.post2
+sentry-forked-django-stubs>=5.1.0.post1
 sentry-forked-djangorestframework-stubs>=3.15.1.post1
 lxml-stubs
 msgpack-types>=0.2.0

+ 1 - 5
src/sentry/api/decorators.py

@@ -19,11 +19,7 @@ def is_considered_sudo(request: Request) -> bool:
         or is_api_key_auth(request.auth)
         or is_api_token_auth(request.auth)
         or is_org_auth_token_auth(request.auth)
-        or (
-            request.user.is_authenticated
-            and not isinstance(request.user, AnonymousUser)
-            and not request.user.has_usable_password()
-        )
+        or (request.user.is_authenticated and not request.user.has_usable_password())
     )
 
 

+ 3 - 3
src/sentry/hybridcloud/outbox/base.py

@@ -2,7 +2,7 @@ from __future__ import annotations
 
 import contextlib
 import logging
-from collections.abc import Collection, Generator, Iterable, Mapping, Sequence
+from collections.abc import Collection, Generator, Iterable, Mapping
 from typing import TYPE_CHECKING, Any, Protocol, TypeVar
 
 from django.db import connections, router, transaction
@@ -113,7 +113,7 @@ class RegionOutboxProducingManager(BaseManager[_RM]):
             return super().bulk_create(tuple_of_objs, *args, **kwds)
 
     def bulk_update(
-        self, objs: Iterable[_RM], fields: Sequence[str], *args: Any, **kwds: Any
+        self, objs: Iterable[_RM], fields: Iterable[str], *args: Any, **kwds: Any
     ) -> Any:
         from sentry.hybridcloud.models.outbox import outbox_context
 
@@ -297,7 +297,7 @@ class ControlOutboxProducingManager(BaseManager[_CM]):
             return super().bulk_create(tuple_of_objs, *args, **kwds)
 
     def bulk_update(
-        self, objs: Iterable[_CM], fields: Sequence[str], *args: Any, **kwds: Any
+        self, objs: Iterable[_CM], fields: Iterable[str], *args: Any, **kwds: Any
     ) -> Any:
         from sentry.hybridcloud.models.outbox import outbox_context
 

+ 2 - 2
src/sentry/sentry_apps/api/endpoints/sentry_app_publish_request.py

@@ -58,8 +58,8 @@ class SentryAppPublishRequestEndpoint(SentryAppBaseEndpoint):
                 status=400,
             )
 
-        assert isinstance(request.user, User) or isinstance(
-            request.user, RpcUser
+        assert isinstance(
+            request.user, (User, RpcUser)
         ), "User must be authenticated to update a Sentry App"
         SentryAppUpdater(
             sentry_app=sentry_app,

+ 1 - 1
src/sentry/sentry_apps/api/endpoints/sentry_apps_stats.py

@@ -23,7 +23,7 @@ class SentryAppsStatsEndpoint(SentryAppsBaseEndpoint):
     def get(self, request: Request) -> Response:
         sentry_apps = (
             SentryApp.objects.filter(installations__date_deleted=None)
-            .annotate(Count("installations"))
+            .annotate(installations__count=Count("installations"))
             .order_by("-installations__count")
         )
 

+ 1 - 1
src/sentry/sentry_apps/models/sentry_app.py

@@ -95,7 +95,7 @@ class SentryAppManager(ParanoidManager["SentryApp"]):
             installations__date_deleted=None,
         ).distinct()
 
-    def visible_for_user(self, request: Request) -> QuerySet:
+    def visible_for_user(self, request: Request) -> QuerySet["SentryApp"]:
         from sentry.auth.superuser import is_active_superuser
 
         if is_active_superuser(request):

+ 5 - 0
tests/sentry/db/models/fields/test_jsonfield.py

@@ -81,6 +81,7 @@ class JSONFieldTest(TestCase):
         field = JSONField("test")
         field.set_attributes_from_name("json")
         formfield = field.formfield()
+        assert formfield is not None
 
         self.assertEqual(type(formfield), forms.CharField)
         self.assertEqual(type(formfield.widget), forms.Textarea)
@@ -88,6 +89,7 @@ class JSONFieldTest(TestCase):
     def test_formfield_clean_blank(self):
         field = JSONField("test")
         formfield = field.formfield()
+        assert formfield is not None
         self.assertRaisesMessage(
             forms.ValidationError,
             str(formfield.error_messages["required"]),
@@ -98,6 +100,7 @@ class JSONFieldTest(TestCase):
     def test_formfield_clean_none(self):
         field = JSONField("test")
         formfield = field.formfield()
+        assert formfield is not None
         self.assertRaisesMessage(
             forms.ValidationError,
             str(formfield.error_messages["required"]),
@@ -108,11 +111,13 @@ class JSONFieldTest(TestCase):
     def test_formfield_null_and_blank_clean_blank(self):
         field = JSONField("test", null=True, blank=True)
         formfield = field.formfield()
+        assert formfield is not None
         self.assertEqual(formfield.clean(value=""), "")
 
     def test_formfield_blank_clean_blank(self):
         field = JSONField("test", null=False, blank=True)
         formfield = field.formfield()
+        assert formfield is not None
         self.assertEqual(formfield.clean(value=""), "")
 
     def test_default_value(self):