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

ref: fix some mypy issues (#53158)

<!-- Describe your PR here. -->
anthony sottile 1 год назад
Родитель
Сommit
b57faf5061

+ 0 - 26
pyproject.toml

@@ -266,7 +266,6 @@ module = [
     "sentry.api.endpoints.organization_searches",
     "sentry.api.endpoints.organization_sentry_function_details",
     "sentry.api.endpoints.organization_sessions",
-    "sentry.api.endpoints.organization_slugs",
     "sentry.api.endpoints.organization_stats",
     "sentry.api.endpoints.organization_tagkey_values",
     "sentry.api.endpoints.organization_tags",
@@ -327,7 +326,6 @@ module = [
     "sentry.api.endpoints.user_subscriptions",
     "sentry.api.event_search",
     "sentry.api.fields.actor",
-    "sentry.api.fields.user",
     "sentry.api.helpers.deprecation",
     "sentry.api.helpers.events",
     "sentry.api.helpers.group_index.delete",
@@ -601,12 +599,6 @@ module = [
     "sentry.issues.occurrence_consumer",
     "sentry.issues.search",
     "sentry.issues.status_change",
-    "sentry.lang.java.plugin",
-    "sentry.lang.javascript.errorlocale",
-    "sentry.lang.javascript.errormapping",
-    "sentry.lang.native.error",
-    "sentry.lang.native.processing",
-    "sentry.lang.native.symbolicator",
     "sentry.lint.engine",
     "sentry.mail.adapter",
     "sentry.mail.forms.assigned_to",
@@ -623,7 +615,6 @@ module = [
     "sentry.middleware.integrations.integration_control",
     "sentry.middleware.integrations.parsers.base",
     "sentry.middleware.integrations.parsers.slack",
-    "sentry.middleware.locale",
     "sentry.middleware.ratelimit",
     "sentry.middleware.subdomain",
     "sentry.middleware.superuser",
@@ -644,22 +635,7 @@ module = [
     "sentry.models.artifactbundle",
     "sentry.models.auditlogentry",
     "sentry.models.authprovider",
-    "sentry.models.avatars.base",
-    "sentry.models.avatars.doc_integration_avatar",
-    "sentry.models.avatars.organization_avatar",
-    "sentry.models.avatars.project_avatar",
-    "sentry.models.avatars.sentry_app_avatar",
-    "sentry.models.avatars.team_avatar",
-    "sentry.models.avatars.user_avatar",
     "sentry.models.commit",
-    "sentry.models.dashboard",
-    "sentry.models.dashboard_widget",
-    "sentry.models.files.abstractfile",
-    "sentry.models.files.abstractfileblob",
-    "sentry.models.files.control_file",
-    "sentry.models.files.control_fileblob",
-    "sentry.models.files.file",
-    "sentry.models.files.fileblob",
     "sentry.models.group",
     "sentry.models.groupassignee",
     "sentry.models.grouphistory",
@@ -1329,7 +1305,6 @@ module = [
     "tests.sentry.services.test_http",
     "tests.sentry.shared_integrations.client.test_base",
     "tests.sentry.snuba.metrics.fields.test_base",
-    "tests.sentry.snuba.metrics.test_metrics_layer.test_metrics_enhanced_performance",
     "tests.sentry.snuba.metrics.test_metrics_layer.test_release_health",
     "tests.sentry.snuba.metrics.test_mqb_query_transformer",
     "tests.sentry.snuba.metrics.test_query_builder",
@@ -1419,7 +1394,6 @@ module = [
     "tests.snuba.api.serializers.test_group_stream",
     "tests.snuba.incidents.test_tasks",
     "tests.snuba.rules.conditions.test_event_frequency",
-    "tests.snuba.search.test_backend",
     "tests.snuba.sessions.test_sessions",
     "tests.snuba.sessions.test_sessions_v2",
     "tests.snuba.tagstore.test_tagstore_backend",

+ 2 - 1
src/sentry/api/endpoints/organization_slugs.py

@@ -1,4 +1,5 @@
-from django.core.validators import ValidationError, validate_slug
+from django.core.exceptions import ValidationError
+from django.core.validators import validate_slug
 from django.db import router, transaction
 from rest_framework.request import Request
 from rest_framework.response import Response

+ 4 - 2
src/sentry/api/event_search.py

@@ -1,3 +1,5 @@
+from __future__ import annotations
+
 import re
 from collections import namedtuple
 from dataclasses import asdict, dataclass, field
@@ -466,7 +468,7 @@ class SearchConfig:
     free_text_key = "message"
 
     @classmethod
-    def create_from(cls, search_config: "SearchConfig", **overrides):
+    def create_from(cls, search_config: SearchConfig, **overrides):
         config = cls(**asdict(search_config))
         for key, val in overrides.items():
             setattr(config, key, val)
@@ -1136,7 +1138,7 @@ default_config = SearchConfig(
 
 def parse_search_query(
     query, config=None, params=None, builder=None, config_overrides=None
-) -> Sequence[SearchFilter]:
+) -> list[SearchFilter]:
     if config is None:
         config = default_config
 

+ 4 - 3
src/sentry/api/fields/user.py

@@ -4,21 +4,22 @@ from typing import Any
 
 from rest_framework import serializers
 
+from sentry.models.user import User
 from sentry.services.hybrid_cloud.user import RpcUser
 from sentry.services.hybrid_cloud.user.service import user_service
 from sentry.utils.auth import find_users
 
 
 class UserField(serializers.Field):
-    def to_representation(self, value: RpcUser):
+    def to_representation(self, value: RpcUser) -> str:
         return value.username
 
-    def to_internal_value(self, data: Any) -> RpcUser | None:
+    def to_internal_value(self, data: Any) -> RpcUser | User | None:
         if not data:
             return None
 
         if isinstance(data, int) or data.isdigit():
-            user: RpcUser = user_service.get_user(user_id=data)
+            user = user_service.get_user(user_id=data)
             if user is not None:
                 return user
 

+ 1 - 1
src/sentry/db/router.py

@@ -6,7 +6,7 @@ from typing import Iterable, Optional
 
 from django.apps import apps
 from django.db import connections
-from django.db.utils import ConnectionDoesNotExist
+from django.utils.connection import ConnectionDoesNotExist
 
 from sentry.db.models.base import Model, ModelSiloLimit
 from sentry.silo.base import SiloLimit, SiloMode

+ 6 - 6
src/sentry/lang/javascript/errorlocale.py

@@ -7,10 +7,10 @@ LOCALES_DIR = os.path.join(os.path.dirname(__file__), "../../data/error-locale")
 TARGET_LOCALE = "en-US"
 
 translation_lookup_table = set()
-target_locale_lookup_table = dict()
+target_locale_lookup_table = {}
 
 
-def populate_target_locale_lookup_table():
+def populate_target_locale_lookup_table() -> None:
     for locale in os.listdir(LOCALES_DIR):
         fn = os.path.join(LOCALES_DIR, locale)
         if not os.path.isfile(fn):
@@ -29,8 +29,8 @@ def populate_target_locale_lookup_table():
                         r"%s", r"(?P<format_string_data>[a-zA-Z0-9-_\$]+)"
                     )
                     # Some errors are substrings of more detailed ones, so we need exact match
-                    translation_regexp = re.compile("^" + translation_regexp + "$")
-                    translation_lookup_table.add((translation_regexp, key))
+                    translation_regexp_re = re.compile(f"^{translation_regexp}$")
+                    translation_lookup_table.add((translation_regexp_re, key))
 
 
 def find_translation(message):
@@ -71,8 +71,8 @@ def translate_message(original_message):
     match = message_type_regexp.search(message)
 
     if match is not None:
-        type = match.groupdict().get("type")
-        message = match.groupdict().get("message")
+        type = match["type"]
+        message = match["message"]
 
     translation, format_string_data = find_translation(message)
 

+ 5 - 6
src/sentry/lang/javascript/errormapping.py

@@ -1,3 +1,5 @@
+from __future__ import annotations
+
 import logging
 import random
 import re
@@ -23,7 +25,7 @@ REACT_MAPPING_URL = (
     "https://raw.githubusercontent.com/facebook/" "react/master/scripts/error-codes/codes.json"
 )
 
-error_processors = {}
+error_processors: dict[str, Processor] = {}
 
 
 def is_expired(ts):
@@ -95,15 +97,13 @@ def process_react_exception(exc, match, mapping):
     args = []
     for k, v in parse_qsl(qs, keep_blank_values=True):
         if k == "args[]":
-            if isinstance(v, bytes):
-                v = v.decode("utf-8", "replace")
             args.append(v)
 
     # Due to truncated error messages we sometimes might not be able to
     # get all arguments.  In that case we fill up missing parameters for
     # the format string with <redacted>.
-    args = tuple(args + ["<redacted>"] * (arg_count - len(args)))[:arg_count]
-    exc["value"] = msg_format % args
+    args_t = tuple(args + ["<redacted>"] * (arg_count - len(args)))[:arg_count]
+    exc["value"] = msg_format % args_t
 
     return True
 
@@ -121,7 +121,6 @@ def rewrite_exception(data):
         if exc is None:
             continue
 
-        processor: Processor
         for processor in error_processors.values():
             try:
                 original_value = exc.get("value")

+ 6 - 4
src/sentry/lang/native/error.py

@@ -1,3 +1,5 @@
+from __future__ import annotations
+
 import logging
 
 from sentry.lang.native.utils import image_name, is_minidump_event
@@ -33,14 +35,14 @@ class SymbolicationFailed(Exception):
         Exception.__init__(self)
         self.message = str(message)
         self.type = type
-        self.image_name = None
-        self.image_path = None
+        self.image_name: str | None = None
+        self.image_path: str | None = None
         if obj is not None:
-            self.image_uuid = str(obj.debug_id)
+            self.image_uuid: str | None = str(obj.debug_id)
             if obj.name:
                 self.image_path = obj.name
                 self.image_name = image_name(obj.name)
-            self.image_arch = obj.arch
+            self.image_arch: str | None = obj.arch
         else:
             self.image_uuid = None
             self.image_arch = None

+ 7 - 5
src/sentry/lang/native/processing.py

@@ -1,3 +1,5 @@
+from __future__ import annotations
+
 import logging
 import posixpath
 from typing import Any, Callable, Optional, Set
@@ -205,11 +207,11 @@ def _merge_full_response(data, response):
 
     os = get_os_from_event(data)
 
-    images = []
+    images: list[dict[str, Any]] = []
     set_path(data, "debug_meta", "images", value=images)
 
     for complete_image in response["modules"]:
-        image = {}
+        image: dict[str, Any] = {}
         _merge_image(image, complete_image, os, data)
         images.append(image)
 
@@ -230,7 +232,7 @@ def _merge_full_response(data, response):
     if response.get("crash_reason"):
         data_exception["type"] = response["crash_reason"]
 
-    data_threads = []
+    data_threads: list[dict[str, Any]] = []
     if response["stacktraces"]:
         data["threads"] = {"values": data_threads}
     else:
@@ -266,7 +268,7 @@ def _merge_full_response(data, response):
             data_stacktrace["registers"] = complete_stacktrace["registers"]
 
         for complete_frame in reversed(complete_stacktrace["frames"]):
-            new_frame = {}
+            new_frame: dict[str, Any] = {}
             _merge_frame(new_frame, complete_frame)
             data_stacktrace["frames"].append(new_frame)
 
@@ -412,7 +414,7 @@ def process_native_stacktraces(symbolicator: Symbolicator, data: Any) -> Any:
     assert len(stacktraces) == len(response["stacktraces"]), (stacktraces, response)
 
     for sinfo, complete_stacktrace in zip(stacktrace_infos, response["stacktraces"]):
-        complete_frames_by_idx = {}
+        complete_frames_by_idx: dict[int, list[dict[str, Any]]] = {}
         for complete_frame in complete_stacktrace.get("frames") or ():
             complete_frames_by_idx.setdefault(complete_frame["original_index"], []).append(
                 complete_frame

+ 1 - 4
src/sentry/lang/native/symbolicator.py

@@ -236,13 +236,10 @@ class SymbolicatorSession:
             self.session.close()
             self.session = None
 
-    def _ensure_open(self):
+    def _request(self, method, path, **kwargs):
         if not self.session:
             raise RuntimeError("Session not opened")
 
-    def _request(self, method, path, **kwargs):
-        self._ensure_open()
-
         url = urljoin(self.url, path)
 
         # required for load balancing

Некоторые файлы не были показаны из-за большого количества измененных файлов