From 0f3785668e5b5bee34ea7249a8010baa4b8e65ce Mon Sep 17 00:00:00 2001 From: Leander Rodrigues Date: Thu, 12 Nov 2026 14:49:08 -0500 Subject: [PATCH] ref(hybridcloud): Mark unordered .first() calls with noqa: S034 Grandfather existing call sites ahead of the S034 lint rule. Refs ISWF-3679 --- src/sentry/auth/access.py | 2 +- src/sentry/auth/services/auth/impl.py | 8 ++++---- src/sentry/auth/services/orgauthtoken/impl.py | 2 +- .../endpoints/auth_merge_user_accounts.py | 2 +- src/sentry/backup/imports.py | 2 +- src/sentry/backup/mixins.py | 2 +- .../backup/services/import_export/impl.py | 2 +- .../organization_member_requests_join.py | 2 +- src/sentry/core/endpoints/project_details.py | 2 +- src/sentry/core/endpoints/scim/teams.py | 2 +- src/sentry/demo_mode/tasks.py | 6 +++--- .../services/organization_mapping/impl.py | 2 +- .../organizationmember_mapping/impl.py | 2 +- .../hybridcloud/services/replica/impl.py | 4 ++-- .../hybridcloud/tasks/backfill_outboxes.py | 2 +- .../integrations/parsers/cursor_origin.py | 2 +- .../middleware/integrations/parsers/discord.py | 2 +- .../middleware/integrations/parsers/github.py | 2 +- .../middleware/integrations/parsers/gitlab.py | 2 +- .../middleware/integrations/parsers/msteams.py | 2 +- .../middleware/integrations/parsers/slack.py | 4 ++-- .../middleware/integrations/parsers/vsts.py | 2 +- .../services/organization/impl.py | 18 +++++++++--------- src/sentry/projects/services/project/impl.py | 4 ++-- src/sentry/relocation/api/endpoints/retry.py | 4 ++-- src/sentry/relocation/tasks/process.py | 2 +- src/sentry/runner/commands/cleanup.py | 2 +- src/sentry/service_accounts/auth.py | 2 +- ...anization_service_account_viewer_context.py | 2 +- src/sentry/service_accounts/models.py | 2 +- .../services/service_account/impl.py | 8 ++++---- src/sentry/types/actor.py | 4 ++-- src/sentry/types/cell.py | 4 ++-- src/sentry/users/api/endpoints/user_emails.py | 2 +- src/sentry/users/models/user.py | 2 +- src/sentry/users/models/user_option.py | 2 +- src/sentry/users/services/user/impl.py | 8 ++++---- src/sentry/users/web/accounts.py | 4 ++-- 38 files changed, 64 insertions(+), 64 deletions(-) diff --git a/src/sentry/auth/access.py b/src/sentry/auth/access.py index 6ffec472ec7c..0ab59b0e535c 100644 --- a/src/sentry/auth/access.py +++ b/src/sentry/auth/access.py @@ -1567,7 +1567,7 @@ def from_service_account_auth(auth: AuthenticatedToken, organization_id: int) -> service_account_id=auth.entity_id, organization_id=organization_id, is_active=True ) .values_list("all_projects", flat=True) - .first() + .first() # noqa: S034 ) if all_projects is None: return DEFAULT diff --git a/src/sentry/auth/services/auth/impl.py b/src/sentry/auth/services/auth/impl.py index b6f5929d33d2..1683eca69653 100644 --- a/src/sentry/auth/services/auth/impl.py +++ b/src/sentry/auth/services/auth/impl.py @@ -92,7 +92,7 @@ def create_auth_identity( possible_providers = [provider] + (equivalent_providers or []) auth_provider = AuthProvider.objects.filter( provider__in=possible_providers, config=config - ).first() + ).first() # noqa: S034 if auth_provider is None: return # Add Auth identity for partner's SSO if it doesn't exist @@ -110,7 +110,7 @@ def create_auth_identity( def get_auth_provider_with_config( self, *, provider: str, config: Mapping[str, Any] ) -> RpcAuthProvider | None: - existing_provider = AuthProvider.objects.filter(provider=provider, config=config).first() + existing_provider = AuthProvider.objects.filter(provider=provider, config=config).first() # noqa: S034 if existing_provider is None: return None return serialize_auth_provider(existing_provider) @@ -196,7 +196,7 @@ def update_provider_config( ) -> None: current_provider = AuthProvider.objects.filter( organization_id=organization_id, id=auth_provider_id - ).first() + ).first() # noqa: S034 if current_provider is None: return current_provider.config = config @@ -205,7 +205,7 @@ def update_provider_config( def update_provider(self, organization_id: int, auth_provider_id: int, provider: str) -> None: current_provider = AuthProvider.objects.filter( organization_id=organization_id, id=auth_provider_id - ).first() + ).first() # noqa: S034 if current_provider is None: return current_provider.provider = provider diff --git a/src/sentry/auth/services/orgauthtoken/impl.py b/src/sentry/auth/services/orgauthtoken/impl.py index 0f98b86bfee8..abe8aa2e48ed 100644 --- a/src/sentry/auth/services/orgauthtoken/impl.py +++ b/src/sentry/auth/services/orgauthtoken/impl.py @@ -20,7 +20,7 @@ def update_orgauthtoken( date_last_used: datetime | None = None, project_last_used_id: int | None = None, ) -> None: - token = OrgAuthToken.objects.filter(id=org_auth_token_id).first() + token = OrgAuthToken.objects.filter(id=org_auth_token_id).first() # noqa: S034 if token is None: return diff --git a/src/sentry/auth_v2/endpoints/auth_merge_user_accounts.py b/src/sentry/auth_v2/endpoints/auth_merge_user_accounts.py index 3f29769e955b..058cc6d9984b 100644 --- a/src/sentry/auth_v2/endpoints/auth_merge_user_accounts.py +++ b/src/sentry/auth_v2/endpoints/auth_merge_user_accounts.py @@ -62,7 +62,7 @@ def post(self, request: Request) -> Response: primary_user = User.objects.get(id=user.id) verification_code = UserMergeVerificationCode.objects.filter( user_id=primary_user.id - ).first() + ).first() # noqa: S034 if ( verification_code is None diff --git a/src/sentry/backup/imports.py b/src/sentry/backup/imports.py index 044c900b532a..434756cf799d 100644 --- a/src/sentry/backup/imports.py +++ b/src/sentry/backup/imports.py @@ -386,7 +386,7 @@ def do_write( import_uuid=UUID(flags.import_uuid), model=model_name_str, min_ordinal=result.min_ordinal, - ).first() + ).first() # noqa: S034 if existing_control_import_chunk_replica is not None: logger.info("import_by_model.control_replica_already_exists", extra=extra) else: diff --git a/src/sentry/backup/mixins.py b/src/sentry/backup/mixins.py index 5809e13be4cc..35186dbbb66a 100644 --- a/src/sentry/backup/mixins.py +++ b/src/sentry/backup/mixins.py @@ -38,7 +38,7 @@ def write_relocation_import( # If all of the fields in the unique set are NULL, we'll avoid a collision, so exit # early and write a new entry. if len(query) > 0: - existing = self.__class__.objects.filter(**query).first() # type: ignore[attr-defined] + existing = self.__class__.objects.filter(**query).first() # type: ignore[attr-defined] # noqa: S034 if existing: # Re-use the existing data if config overwrite is disabled. if not flags.overwrite_configs: diff --git a/src/sentry/backup/services/import_export/impl.py b/src/sentry/backup/services/import_export/impl.py index 6f5ec8e1c08e..8a3c49177f96 100644 --- a/src/sentry/backup/services/import_export/impl.py +++ b/src/sentry/backup/services/import_export/impl.py @@ -67,7 +67,7 @@ def get_existing_import_chunk( ) -> RpcImportOk | None: found_chunk = import_chunk_type.objects.filter( import_uuid=flags.import_uuid, model=model_name, min_ordinal=min_ordinal - ).first() + ).first() # noqa: S034 if found_chunk is None: return None diff --git a/src/sentry/core/endpoints/organization_member_requests_join.py b/src/sentry/core/endpoints/organization_member_requests_join.py index dbd84964266c..453348e3efec 100644 --- a/src/sentry/core/endpoints/organization_member_requests_join.py +++ b/src/sentry/core/endpoints/organization_member_requests_join.py @@ -40,7 +40,7 @@ def create_organization_join_request( Q(email__iexact=email) | Q(user_is_active=True, user_email__iexact=email, user_id__isnull=False), organization=organization, - ).first() + ).first() # noqa: S034 if om: return None diff --git a/src/sentry/core/endpoints/project_details.py b/src/sentry/core/endpoints/project_details.py index 99e19c85fea9..2d5a1452b694 100644 --- a/src/sentry/core/endpoints/project_details.py +++ b/src/sentry/core/endpoints/project_details.py @@ -457,7 +457,7 @@ def validate_slug(self, slug: str) -> str: other = ( Project.objects.filter(slug=slug, organization=project.organization) .exclude(id=project.id) - .first() + .first() # noqa: S034 ) if other is not None: raise serializers.ValidationError( diff --git a/src/sentry/core/endpoints/scim/teams.py b/src/sentry/core/endpoints/scim/teams.py index 14a4fc0b3ef4..0f6f7173f4b0 100644 --- a/src/sentry/core/endpoints/scim/teams.py +++ b/src/sentry/core/endpoints/scim/teams.py @@ -509,7 +509,7 @@ def _handle_remove_member_patch_op( organizationmember_id=cast("str | int", member_id), ) .select_related("organizationmember") - .first() + .first() # noqa: S034 ) if omt is not None: self._remove_members_operation(request, [omt], team) diff --git a/src/sentry/demo_mode/tasks.py b/src/sentry/demo_mode/tasks.py index 9b20238147f2..c75141da924c 100644 --- a/src/sentry/demo_mode/tasks.py +++ b/src/sentry/demo_mode/tasks.py @@ -185,7 +185,7 @@ def _sync_project_artifact_bundle( source_project_artifact_bundle = ProjectArtifactBundle.objects.filter( artifact_bundle_id=source_artifact_bundle.id, organization_id=source_artifact_bundle.organization_id, - ).first() + ).first() # noqa: S034 if not source_project_artifact_bundle: return @@ -212,7 +212,7 @@ def _sync_release_artifact_bundle( source_release_artifact_bundle = ReleaseArtifactBundle.objects.filter( artifact_bundle_id=source_artifact_bundle.id, organization_id=source_artifact_bundle.organization_id, - ).first() + ).first() # noqa: S034 if not source_release_artifact_bundle: return @@ -295,7 +295,7 @@ def _sync_proguard_artifact_release( project_debug_file = ProjectDebugFile.objects.filter( project_id=target_project.id, debug_id=source_proguard_artifact_release.project_debug_file.debug_id, - ).first() + ).first() # noqa: S034 if not project_debug_file: project_debug_file = _sync_project_debug_file( diff --git a/src/sentry/hybridcloud/services/organization_mapping/impl.py b/src/sentry/hybridcloud/services/organization_mapping/impl.py index f72fa4160125..1fca04aa6f66 100644 --- a/src/sentry/hybridcloud/services/organization_mapping/impl.py +++ b/src/sentry/hybridcloud/services/organization_mapping/impl.py @@ -109,7 +109,7 @@ def _upsert_organization_slug_reservation_for_monolith( ) -> None: org_slug_reservation = OrganizationSlugReservation.objects.filter( organization_id=organization_id - ).first() + ).first() # noqa: S034 if org_slug_reservation is None: OrganizationSlugReservation( cell_name=mapping_update.cell_name, diff --git a/src/sentry/hybridcloud/services/organizationmember_mapping/impl.py b/src/sentry/hybridcloud/services/organizationmember_mapping/impl.py index fa5209965e79..1b643ffb0e52 100644 --- a/src/sentry/hybridcloud/services/organizationmember_mapping/impl.py +++ b/src/sentry/hybridcloud/services/organizationmember_mapping/impl.py @@ -98,7 +98,7 @@ def _find_organization_member( ) -> OrganizationMemberMapping | None: return OrganizationMemberMapping.objects.filter( organization_id=organization_id, organizationmember_id=organizationmember_id - ).first() + ).first() # noqa: S034 def delete( self, diff --git a/src/sentry/hybridcloud/services/replica/impl.py b/src/sentry/hybridcloud/services/replica/impl.py index c210fa72bb89..a454d63acfdf 100644 --- a/src/sentry/hybridcloud/services/replica/impl.py +++ b/src/sentry/hybridcloud/services/replica/impl.py @@ -148,7 +148,7 @@ def handle_replication( destination_model.objects.filter( **{c: getattr(destination, c) for c in columns} ).exclude(**dest_filter).delete() - existing = destination_model.objects.filter(**dest_filter).first() + existing = destination_model.objects.filter(**dest_filter).first() # noqa: S034 if existing: update: Mapping[str, Any] = { field.name: getattr(destination, field.name) @@ -278,7 +278,7 @@ def upsert_replicated_service_account_token( # exists. Raising here would block the org's outbox shard until someone intervenes. service_account = ServiceAccountReplica.objects.filter( organization_id=token.organization_id, service_account_id=token.service_account_id - ).first() + ).first() # noqa: S034 if service_account is None: logger.warning( "service_account_token_replica.missing_service_account", diff --git a/src/sentry/hybridcloud/tasks/backfill_outboxes.py b/src/sentry/hybridcloud/tasks/backfill_outboxes.py index a802c4510547..0b3cc8ce8c66 100644 --- a/src/sentry/hybridcloud/tasks/backfill_outboxes.py +++ b/src/sentry/hybridcloud/tasks/backfill_outboxes.py @@ -74,7 +74,7 @@ def _watermark_model(table_name: str) -> type[BaseOutboxBackfillWatermark]: def read_processing_state(table_name: str) -> tuple[int, int] | None: - row = _watermark_model(table_name).objects.filter(table_name=table_name).first() + row = _watermark_model(table_name).objects.filter(table_name=table_name).first() # noqa: S034 if row is None: return None return row.low_bound, row.version diff --git a/src/sentry/middleware/integrations/parsers/cursor_origin.py b/src/sentry/middleware/integrations/parsers/cursor_origin.py index 1bf279b9372e..f74ae56f4790 100644 --- a/src/sentry/middleware/integrations/parsers/cursor_origin.py +++ b/src/sentry/middleware/integrations/parsers/cursor_origin.py @@ -83,7 +83,7 @@ def get_integration_from_request(self) -> Integration | None: return None return Integration.objects.filter( provider=self.provider, external_id=installation_id - ).first() + ).first() # noqa: S034 def get_response(self) -> HttpResponseBase: shed_response = self.get_shed_response() diff --git a/src/sentry/middleware/integrations/parsers/discord.py b/src/sentry/middleware/integrations/parsers/discord.py index 041a45540c62..ad7a9602039b 100644 --- a/src/sentry/middleware/integrations/parsers/discord.py +++ b/src/sentry/middleware/integrations/parsers/discord.py @@ -83,7 +83,7 @@ def get_integration_from_request(self) -> Integration | None: return Integration.objects.filter( provider=self.provider, external_id=discord_request.guild_id, - ).first() + ).first() # noqa: S034 with sentry_sdk.isolation_scope() as scope: scope.set_extra("path", self.request.path) diff --git a/src/sentry/middleware/integrations/parsers/github.py b/src/sentry/middleware/integrations/parsers/github.py index b4bc5ff9f443..15bc7b24d126 100644 --- a/src/sentry/middleware/integrations/parsers/github.py +++ b/src/sentry/middleware/integrations/parsers/github.py @@ -95,7 +95,7 @@ def get_integration_from_request(self) -> Integration | None: external_id = self._get_external_id(event=event) if not external_id: return None - return Integration.objects.filter(external_id=external_id, provider=self.provider).first() + return Integration.objects.filter(external_id=external_id, provider=self.provider).first() # noqa: S034 def _get_drop_response( self, diff --git a/src/sentry/middleware/integrations/parsers/gitlab.py b/src/sentry/middleware/integrations/parsers/gitlab.py index e90ad1aedae1..26e081ac50fe 100644 --- a/src/sentry/middleware/integrations/parsers/gitlab.py +++ b/src/sentry/middleware/integrations/parsers/gitlab.py @@ -45,7 +45,7 @@ def get_integration_from_request(self) -> Integration | None: (external_id, _secret) = result return Integration.objects.filter( external_id=external_id, provider=self.provider - ).first() + ).first() # noqa: S034 except Exception as e: metrics.incr( self._METRIC_CONTROL_PATH_FAILURE_KEY, diff --git a/src/sentry/middleware/integrations/parsers/msteams.py b/src/sentry/middleware/integrations/parsers/msteams.py index c0d0df2fe0a8..613d6a4741ef 100644 --- a/src/sentry/middleware/integrations/parsers/msteams.py +++ b/src/sentry/middleware/integrations/parsers/msteams.py @@ -43,7 +43,7 @@ def request_data(self) -> Mapping[str, Any]: def get_integration_from_request(self) -> Integration | None: integration = parsing.get_integration_from_request_data(data=self.request_data) if integration: - return Integration.objects.filter(id=integration.id).first() + return Integration.objects.filter(id=integration.id).first() # noqa: S034 return None @classmethod diff --git a/src/sentry/middleware/integrations/parsers/slack.py b/src/sentry/middleware/integrations/parsers/slack.py index 9d652e890927..8c3f5042765c 100644 --- a/src/sentry/middleware/integrations/parsers/slack.py +++ b/src/sentry/middleware/integrations/parsers/slack.py @@ -221,12 +221,12 @@ def get_integration_from_request(self) -> Integration | None: return None self.slack_request = slack_request self.response_url = slack_request.response_url - return Integration.objects.filter(id=slack_request.integration.id).first() + return Integration.objects.filter(id=slack_request.integration.id).first() # noqa: S034 elif self.view_class in self.django_views: # Parse the signed params to identify the associated integration params = unsign(self.match.kwargs["signed_params"], salt=SALT) - return Integration.objects.filter(id=params["integration_id"]).first() + return Integration.objects.filter(id=params["integration_id"]).first() # noqa: S034 return None diff --git a/src/sentry/middleware/integrations/parsers/vsts.py b/src/sentry/middleware/integrations/parsers/vsts.py index 0bcbc2f35e4b..7639e447857a 100644 --- a/src/sentry/middleware/integrations/parsers/vsts.py +++ b/src/sentry/middleware/integrations/parsers/vsts.py @@ -32,7 +32,7 @@ def get_integration_from_request(self) -> Integration | None: except Exception as e: sentry_sdk.capture_exception(e) return None - return Integration.objects.filter(external_id=external_id, provider=self.provider).first() + return Integration.objects.filter(external_id=external_id, provider=self.provider).first() # noqa: S034 def get_response(self) -> HttpResponseBase: if self.view_class not in self.cell_view_classes: diff --git a/src/sentry/organizations/services/organization/impl.py b/src/sentry/organizations/services/organization/impl.py index 41245b3a407f..a4b31b43f593 100644 --- a/src/sentry/organizations/services/organization/impl.py +++ b/src/sentry/organizations/services/organization/impl.py @@ -211,7 +211,7 @@ def get_member_summaries_by_ids( return [summarize_member(m) for m in members] def serialize_organization(self, *, id: int, as_user: RpcUser | None = None) -> Any | None: - org = Organization.objects.filter(id=id).first() + org = Organization.objects.filter(id=id).first() # noqa: S034 if org is None: return None return serialize(org, user=as_user) @@ -372,7 +372,7 @@ def _get_invite( if user_id is not None: member = OrganizationMember.objects.filter( organization_id=org.id, user_id=user_id - ).first() + ).first() # noqa: S034 if member is None and email is not None: member = first_matching_email( OrganizationMember.objects.filter(organization_id=org.id), email @@ -380,7 +380,7 @@ def _get_invite( if member is None and organization_member_id is not None: member = OrganizationMember.objects.filter( organization_id=org.id, id=organization_member_id - ).first() + ).first() # noqa: S034 if member is None: return None @@ -540,11 +540,11 @@ def add_organization_member( if user_id is not None: org_member = OrganizationMember.objects.filter( organization_id=organization_id, user_id=user_id - ).first() + ).first() # noqa: S034 elif email is not None: org_member = OrganizationMember.objects.filter( organization_id=organization_id, email=email - ).first() + ).first() # noqa: S034 if org_member is None: org_member = OrganizationMember.objects.create( @@ -678,11 +678,11 @@ def remove_user(self, *, organization_id: int, user_id: int) -> RpcOrganizationM def merge_users(self, *, organization_id: int, from_user_id: int, to_user_id: int) -> None: to_member: OrganizationMember | None = OrganizationMember.objects.filter( organization_id=organization_id, user_id=to_user_id - ).first() + ).first() # noqa: S034 from_member: OrganizationMember | None = OrganizationMember.objects.filter( organization_id=organization_id, user_id=from_user_id - ).first() + ).first() # noqa: S034 if from_member is None: return @@ -725,7 +725,7 @@ def merge_users(self, *, organization_id: int, from_user_id: int, to_user_id: in ).delete() to_member_team = OrganizationMemberTeam.objects.filter( organizationmember=to_member, team=team - ).first() + ).first() # noqa: S034 if to_member_team is None: OrganizationMemberTeam.objects.create(organizationmember=to_member, team=team) @@ -965,7 +965,7 @@ def check_organization_by_slug(self, *, slug: str, only_visible: bool) -> int | def check_organization_by_id(self, *, id: int, only_visible: bool) -> bool: # See CellOrganizationCheckService below - org_mapping = OrganizationMapping.objects.filter(organization_id=id).first() + org_mapping = OrganizationMapping.objects.filter(organization_id=id).first() # noqa: S034 if org_mapping is None: return False if only_visible and org_mapping.status != OrganizationStatus.ACTIVE: diff --git a/src/sentry/projects/services/project/impl.py b/src/sentry/projects/services/project/impl.py index da07160b55dd..19940fc883ec 100644 --- a/src/sentry/projects/services/project/impl.py +++ b/src/sentry/projects/services/project/impl.py @@ -32,7 +32,7 @@ def get_by_id(self, *, organization_id: int, id: int) -> RpcProject | None: id=id, organization=organization_id ) except ValueError: - project = Project.objects.filter(id=id, organization=organization_id).first() + project = Project.objects.filter(id=id, organization=organization_id).first() # noqa: S034 except Project.DoesNotExist: return None if project: @@ -42,7 +42,7 @@ def get_by_id(self, *, organization_id: int, id: int) -> RpcProject | None: def get_by_slug(self, *, organization_id: int, slug: str) -> RpcProject | None: project: Project | None = Project.objects.filter( slug=slug, organization=organization_id - ).first() + ).first() # noqa: S034 if project: return serialize_project(project) return None diff --git a/src/sentry/relocation/api/endpoints/retry.py b/src/sentry/relocation/api/endpoints/retry.py index d68fbc5f2772..ea6412e567e0 100644 --- a/src/sentry/relocation/api/endpoints/retry.py +++ b/src/sentry/relocation/api/endpoints/retry.py @@ -63,7 +63,7 @@ def post(self, request: Request, relocation_uuid: str) -> Response: if not request.user.is_authenticated: return Response(status=status.HTTP_400_BAD_REQUEST) - relocation = Relocation.objects.filter(uuid=relocation_uuid).first() + relocation = Relocation.objects.filter(uuid=relocation_uuid).first() # noqa: S034 if relocation is None: raise ResourceDoesNotExist if relocation.status != Relocation.Status.FAILURE.value: @@ -77,7 +77,7 @@ def post(self, request: Request, relocation_uuid: str) -> Response: ) relocation_file = ( - RelocationFile.objects.filter(relocation=relocation).select_related("file").first() + RelocationFile.objects.filter(relocation=relocation).select_related("file").first() # noqa: S034 ) if relocation_file is None: return Response( diff --git a/src/sentry/relocation/tasks/process.py b/src/sentry/relocation/tasks/process.py index 2edd17819bb1..f76d5541a969 100644 --- a/src/sentry/relocation/tasks/process.py +++ b/src/sentry/relocation/tasks/process.py @@ -760,7 +760,7 @@ def preprocessing_transfer(uuid: str) -> None: ) .select_related("file") .prefetch_related("file__blobs") - .first() + .first() # noqa: S034 ) if raw_relocation_file is None: raise FileNotFoundError("User-supplied relocation data not found.") diff --git a/src/sentry/runner/commands/cleanup.py b/src/sentry/runner/commands/cleanup.py index bdef20450e5a..9a2d62cb473e 100644 --- a/src/sentry/runner/commands/cleanup.py +++ b/src/sentry/runner/commands/cleanup.py @@ -957,7 +957,7 @@ def _schedule_bulk_delete_chunks( q.model.objects.using(q.using) .filter(pk=chunk[-1]) .values_list(q.dtfield, flat=True) - .first() + .first() # noqa: S034 ) progress_logger.info( "cleanup.scan_progress", diff --git a/src/sentry/service_accounts/auth.py b/src/sentry/service_accounts/auth.py index 3e45472bc787..82ab540d060a 100644 --- a/src/sentry/service_accounts/auth.py +++ b/src/sentry/service_accounts/auth.py @@ -55,7 +55,7 @@ def authenticate_service_account( else: service_account = ServiceAccountReplica.objects.filter( service_account_id=actor.actor_id, organization_id=vc.organization_id, is_active=True - ).first() + ).first() # noqa: S034 if service_account is None: return None try: diff --git a/src/sentry/service_accounts/endpoints/organization_service_account_viewer_context.py b/src/sentry/service_accounts/endpoints/organization_service_account_viewer_context.py index 6f84ab0a35cd..50cfe50055b2 100644 --- a/src/sentry/service_accounts/endpoints/organization_service_account_viewer_context.py +++ b/src/sentry/service_accounts/endpoints/organization_service_account_viewer_context.py @@ -107,7 +107,7 @@ def post( service_account = ServiceAccountReplica.objects.filter( service_account_id=service_account_id, organization_id=organization.id, is_active=True - ).first() + ).first() # noqa: S034 if service_account is None: raise ResourceDoesNotExist diff --git a/src/sentry/service_accounts/models.py b/src/sentry/service_accounts/models.py index 20fb0ae81360..e328aea30c1a 100644 --- a/src/sentry/service_accounts/models.py +++ b/src/sentry/service_accounts/models.py @@ -165,7 +165,7 @@ def deactivate(self) -> bool: account = ( ServiceAccount.objects.select_for_update() .filter(id=self.id, is_active=True) - .first() + .first() # noqa: S034 ) if account is None: return False diff --git a/src/sentry/service_accounts/services/service_account/impl.py b/src/sentry/service_accounts/services/service_account/impl.py index 5d50bf374151..452f0d61780d 100644 --- a/src/sentry/service_accounts/services/service_account/impl.py +++ b/src/sentry/service_accounts/services/service_account/impl.py @@ -47,7 +47,7 @@ def get_service_account( ) -> RpcServiceAccount | None: service_account = ServiceAccount.objects.filter( id=service_account_id, organization_id=organization_id, is_active=True - ).first() + ).first() # noqa: S034 if service_account is None: return None return _serialize_with_projects(service_account) @@ -106,7 +106,7 @@ def _get_by_idempotency_key( ) -> RpcServiceAccount | None: service_account = ServiceAccount.objects.filter( organization_id=organization_id, idempotency_key=idempotency_key - ).first() + ).first() # noqa: S034 if service_account is None: return None return _serialize_with_projects(service_account) @@ -133,7 +133,7 @@ def update_service_account( service_account = ( ServiceAccount.objects.select_for_update() .filter(id=service_account_id, organization_id=organization_id, is_active=True) - .first() + .first() # noqa: S034 ) if service_account is None: return None @@ -148,7 +148,7 @@ def update_service_account( def delete_service_account(self, *, organization_id: int, service_account_id: int) -> None: service_account = ServiceAccount.objects.filter( id=service_account_id, organization_id=organization_id - ).first() + ).first() # noqa: S034 if service_account is not None: service_account.deactivate() diff --git a/src/sentry/types/actor.py b/src/sentry/types/actor.py index b08d05a538ca..c096163d6260 100644 --- a/src/sentry/types/actor.py +++ b/src/sentry/types/actor.py @@ -273,7 +273,7 @@ def resolve(self) -> "Team | RpcUser": from sentry.users.services.user.service import user_service if self.is_team: - team = Team.objects.filter(id=self.id).first() + team = Team.objects.filter(id=self.id).first() # noqa: S034 if team: return team raise Actor.InvalidActor(f"Cannot find a team with id={self.id}") @@ -338,7 +338,7 @@ def validate_actor(actor: Actor, organization_id: int) -> None: elif isinstance(obj, RpcUser): membership = OrganizationMember.objects.filter( organization_id=organization_id, user_id=obj.id - ).first() + ).first() # noqa: S034 if not membership: raise serializers.ValidationError("User is not a member of this organization") if not membership.user_is_active: diff --git a/src/sentry/types/cell.py b/src/sentry/types/cell.py index fa98038484eb..3dae2622eb46 100644 --- a/src/sentry/types/cell.py +++ b/src/sentry/types/cell.py @@ -367,9 +367,9 @@ def get_cell_for_organization(organization_id_or_slug: str) -> Cell: if organization_id_or_slug.isdecimal(): mapping = OrganizationMapping.objects.filter( organization_id=organization_id_or_slug - ).first() + ).first() # noqa: S034 else: - mapping = OrganizationMapping.objects.filter(slug=organization_id_or_slug).first() + mapping = OrganizationMapping.objects.filter(slug=organization_id_or_slug).first() # noqa: S034 if not mapping: raise CellResolutionError( diff --git a/src/sentry/users/api/endpoints/user_emails.py b/src/sentry/users/api/endpoints/user_emails.py index 18c91eac8898..89d02bce8246 100644 --- a/src/sentry/users/api/endpoints/user_emails.py +++ b/src/sentry/users/api/endpoints/user_emails.py @@ -221,7 +221,7 @@ def delete(self, request: Request, user: User) -> Response: email = validator.validated_data["email"] primary_email = UserEmail.objects.get_primary_email(user) - del_email = UserEmail.objects.filter(user=user, email__iexact=email).first() + del_email = UserEmail.objects.filter(user=user, email__iexact=email).first() # noqa: S034 del_useroption_email_list = UserOption.objects.filter( user=user, key="mail:email", value=email ) diff --git a/src/sentry/users/models/user.py b/src/sentry/users/models/user.py index 3bec4b9d7ded..e20632ae253a 100644 --- a/src/sentry/users/models/user.py +++ b/src/sentry/users/models/user.py @@ -630,7 +630,7 @@ def do_write() -> tuple[int, ImportKind]: # server-generated and `username` is unique, so matching on username alone is safe. # Reuse the existing account instead of inserting. if flags.merge_users: - username_match = User.objects.filter(username__iexact=self.username).first() + username_match = User.objects.filter(username__iexact=self.username).first() # noqa: S034 if username_match: return (username_match.pk, ImportKind.Existing) diff --git a/src/sentry/users/models/user_option.py b/src/sentry/users/models/user_option.py index 2c4e217582b2..3c50b948c2a1 100644 --- a/src/sentry/users/models/user_option.py +++ b/src/sentry/users/models/user_option.py @@ -256,7 +256,7 @@ def write_relocation_import( if self.organization_id is None and self.project_id is None: colliding_global_user_option = self.objects.filter( user=self.user, key=self.key, organization_id__isnull=True, project_id__isnull=True - ).first() + ).first() # noqa: S034 if colliding_global_user_option is not None: return None diff --git a/src/sentry/users/services/user/impl.py b/src/sentry/users/services/user/impl.py index 4b602fcfe47d..e57c15225d2e 100644 --- a/src/sentry/users/services/user/impl.py +++ b/src/sentry/users/services/user/impl.py @@ -171,7 +171,7 @@ def get_member_cell_names(self, *, user_id: int) -> list[str]: return list(cell_query) def flush_nonce(self, *, user_id: int) -> None: - user = User.objects.filter(id=user_id).first() + user = User.objects.filter(id=user_id).first() # noqa: S034 if user is not None: user.update(session_nonce="foo") @@ -200,13 +200,13 @@ def get_user_by_social_auth( social_auth__provider=provider, social_auth__uid=uid, orgmembermapping_set__organization_id=organization_id, - ).first() + ).first() # noqa: S034 if user is None: return None return serialize_rpc_user(user) def get_first_superuser(self) -> RpcUser | None: - user = User.objects.filter(is_superuser=True, is_active=True).first() + user = User.objects.filter(is_superuser=True, is_active=True).first() # noqa: S034 if user is None: return None return serialize_rpc_user(user) @@ -304,7 +304,7 @@ def verify_user_emails( return results def get_user_avatar(self, *, user_id: int) -> RpcAvatar | None: - possible_avatar = UserAvatar.objects.filter(user_id=user_id).first() + possible_avatar = UserAvatar.objects.filter(user_id=user_id).first() # noqa: S034 if not possible_avatar: return None diff --git a/src/sentry/users/web/accounts.py b/src/sentry/users/web/accounts.py index 98e42c85c82f..d8328a8cdeac 100644 --- a/src/sentry/users/web/accounts.py +++ b/src/sentry/users/web/accounts.py @@ -158,7 +158,7 @@ def relocate_reclaim(request: HttpRequest, user_id: int) -> HttpResponse: # Verify that the user is unclaimed. If they are already claimed, tell the requester that this # is the case, since of course claiming this account would be impossible. - user = User.objects.filter(id=user_id).first() + user = User.objects.filter(id=user_id).first() # noqa: S034 if user is None: logger.warning("reclaim.user_not_found", extra=extra) return render_to_response(get_template("relocate", "error"), {}, request) @@ -239,7 +239,7 @@ def recover_confirm( # Relocation form requires users to accept TOS and privacy policy with an org # associated. We only need the first membership, since all of user's orgs will be in # the same cell. - membership = OrganizationMemberMapping.objects.filter(user=user).first() + membership = OrganizationMemberMapping.objects.filter(user=user).first() # noqa: S034 assert membership is not None mapping = OrganizationMapping.objects.get( organization_id=membership.organization_id