Browse Source

ref: use datetime.UTC instead of datetime.timezone.utc in tests (#67043)

this allows us to better resolve a name conflict with
django.utils.timezone

UTC is new in python 3.11

automated with these scripts:

```python
import argparse
import ast


class V(ast.NodeVisitor):
    def __init__(self, mod: str, name: str, asname: str | None) -> None:
        self.mod = mod
        self.name = name
        self.asname = asname
        self.found = False

    def visit_ImportFrom(self, node: ast.ImportFrom) -> None:
        if (
            node.level == 0
            and node.module == self.mod
            and any(name.name == self.name and name.asname == self.asname for name in node.names)
        ):
            self.found = True
        self.generic_visit(node)


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("import_s")
    parser.add_argument("filename")
    args = parser.parse_args()

    o = ast.parse(args.import_s).body[0]
    assert isinstance(o, ast.ImportFrom), ast.dump(o)
    (name,) = o.names

    v = V(o.module, name.name, name.asname)
    with open(args.filename, "rb") as f:
        v.visit(ast.parse(f.read(), filename=args.filename))

    return not v.found


if __name__ == "__main__":
    raise SystemExit(main())
```

```bash
HERE="$(dirname "$0")"
sed -i -r 's/timezone\.utc/UTC/g' "$@"
grep -l '\bUTC\b' "$@" | xargs isort --add-import 'from datetime import UTC'
autoflake -i --remove-all "$@"

for fn in "$@"; do
    if \
        ! "$HERE/has-import" 'from datetime import timezone' "$fn" && \
        "$HERE/has-import" 'from django.utils import timezone as django_timezone' "$fn" \
    ; then
        sed -i -r 's/django_timezone\./timezone./g' "$fn"
        isort --add-import 'from django.utils import timezone' "$fn"
        autoflake -i --remove-all "$fn"
    fi
    if "$HERE/has-import" 'from django.utils import timezone' "$fn"; then
        sed -i -r 's/([^\.])datetime\.now\((tz=)?UTC\)/\1timezone.now()/g' "$fn"
        autoflake -i --remove-all "$fn"
    fi
done
```

<!-- Describe your PR here. -->
anthony sottile 1 year ago
parent
commit
09853ff60e

+ 13 - 13
src/sentry/testutils/cases.py

@@ -9,7 +9,7 @@ import re
 import time
 from collections.abc import Mapping, Sequence
 from contextlib import contextmanager
-from datetime import datetime, timedelta, timezone
+from datetime import UTC, datetime, timedelta
 from io import BytesIO
 from typing import Any, Literal, Union
 from unittest import mock
@@ -35,7 +35,7 @@ from django.test import TransactionTestCase as DjangoTransactionTestCase
 from django.test import override_settings
 from django.test.utils import CaptureQueriesContext
 from django.urls import resolve, reverse
-from django.utils import timezone as django_timezone
+from django.utils import timezone
 from django.utils.functional import cached_property
 from requests.utils import CaseInsensitiveDict, get_encoding_from_headers
 from rest_framework import status
@@ -1115,7 +1115,7 @@ class AcceptanceTestCase(TransactionTestCase):
     def _setup_today(self):
         with mock.patch(
             "django.utils.timezone.now",
-            return_value=(datetime(2013, 5, 18, 15, 13, 58, 132928, tzinfo=timezone.utc)),
+            return_value=(datetime(2013, 5, 18, 15, 13, 58, 132928, tzinfo=UTC)),
         ):
             yield
 
@@ -1485,7 +1485,7 @@ class BaseSpansTestCase(SnubaTestCase):
         if span_id is None:
             span_id = self._random_span_id()
         if timestamp is None:
-            timestamp = datetime.now(tz=timezone.utc)
+            timestamp = timezone.now()
 
         payload = {
             "project_id": project_id,
@@ -1494,7 +1494,7 @@ class BaseSpansTestCase(SnubaTestCase):
             "duration_ms": int(duration),
             "exclusive_time_ms": int(exclusive_time),
             "is_segment": True,
-            "received": datetime.now(tz=timezone.utc).timestamp(),
+            "received": timezone.now().timestamp(),
             "start_timestamp_ms": int(timestamp.timestamp() * 1000),
             "sentry_tags": {"transaction": transaction or "/hello"},
             "retention_days": 90,
@@ -1534,7 +1534,7 @@ class BaseSpansTestCase(SnubaTestCase):
         if span_id is None:
             span_id = self._random_span_id()
         if timestamp is None:
-            timestamp = datetime.now(tz=timezone.utc)
+            timestamp = timezone.now()
 
         payload = {
             "project_id": project_id,
@@ -1543,7 +1543,7 @@ class BaseSpansTestCase(SnubaTestCase):
             "duration_ms": int(duration),
             "exclusive_time_ms": exclusive_time,
             "is_segment": False,
-            "received": datetime.now(tz=timezone.utc).timestamp(),
+            "received": timezone.now().timestamp(),
             "start_timestamp_ms": int(timestamp.timestamp() * 1000),
             "sentry_tags": {
                 "transaction": transaction or "/hello",
@@ -1782,7 +1782,7 @@ class BaseMetricsLayerTestCase(BaseMetricsTestCase):
     # This time has been specifically chosen to be 10:00:00 so that all tests will automatically have the data inserted
     # and queried with automatically inferred timestamps (e.g., usage of - 1 second, get_date_range()...) without
     # incurring into problems.
-    MOCK_DATETIME = (django_timezone.now() - timedelta(days=1)).replace(
+    MOCK_DATETIME = (timezone.now() - timedelta(days=1)).replace(
         hour=10, minute=0, second=0, microsecond=0
     )
 
@@ -2060,7 +2060,7 @@ class MetricsEnhancedPerformanceTestCase(BaseMetricsLayerTestCase, TestCase):
         "s": EntityKey.MetricsSets.value,
     }
     METRIC_STRINGS = []
-    DEFAULT_METRIC_TIMESTAMP = datetime(2015, 1, 1, 10, 15, 0, tzinfo=timezone.utc)
+    DEFAULT_METRIC_TIMESTAMP = datetime(2015, 1, 1, 10, 15, 0, tzinfo=UTC)
 
     def setUp(self):
         super().setUp()
@@ -2262,7 +2262,7 @@ class BaseIncidentsTest(SnubaTestCase):
 
     @cached_property
     def now(self):
-        return django_timezone.now().replace(minute=0, second=0, microsecond=0)
+        return timezone.now().replace(minute=0, second=0, microsecond=0)
 
 
 @pytest.mark.snuba
@@ -2334,7 +2334,7 @@ class ProfilesSnubaTestCase(
             "platform": transaction["platform"],
             "profile_id": profile_id,
             "project_id": project.id,
-            "received": int(datetime.now(tz=timezone.utc).timestamp()),
+            "received": int(timezone.now().timestamp()),
             "retention_days": 90,
             "timestamp": int(timestamp),
             "transaction_name": transaction["transaction"],
@@ -2396,7 +2396,7 @@ class ReplaysSnubaTestCase(TestCase):
 # AcceptanceTestCase and TestCase are mutually exclusive base classses
 class ReplaysAcceptanceTestCase(AcceptanceTestCase, SnubaTestCase):
     def setUp(self):
-        self.now = datetime.now(timezone.utc)
+        self.now = datetime.now(UTC)
         super().setUp()
         self.drop_replays()
         patcher = mock.patch("django.utils.timezone.now", return_value=self.now)
@@ -2785,7 +2785,7 @@ class ActivityTestCase(TestCase):
         release = Release.objects.create(
             version=name * 40,
             organization_id=self.project.organization_id,
-            date_released=django_timezone.now(),
+            date_released=timezone.now(),
         )
         release.add_project(self.project)
         release.add_project(self.project2)

+ 3 - 3
tests/acceptance/test_incidents.py

@@ -1,4 +1,4 @@
-from django.utils import timezone as django_timezone
+from django.utils import timezone
 
 from sentry.incidents.logic import update_incident_status
 from sentry.incidents.models.incident import IncidentStatus, IncidentStatusMethod
@@ -28,8 +28,8 @@ class OrganizationIncidentsListTest(AcceptanceTestCase, SnubaTestCase):
         incident = self.create_incident(
             self.organization,
             title="Incident #1",
-            date_started=django_timezone.now(),
-            date_detected=django_timezone.now(),
+            date_started=timezone.now(),
+            date_detected=timezone.now(),
             projects=[self.project],
             alert_rule=alert_rule,
         )

+ 4 - 4
tests/acceptance/test_organization_releases.py

@@ -1,8 +1,8 @@
-from datetime import datetime, timezone
+from datetime import UTC, datetime
 from unittest.mock import patch
 
 import pytest
-from django.utils import timezone as django_timezone
+from django.utils import timezone
 
 from sentry.testutils.cases import AcceptanceTestCase
 from sentry.testutils.silo import no_silo_test
@@ -12,7 +12,7 @@ pytestmark = pytest.mark.sentry_metrics
 
 @no_silo_test
 class OrganizationReleasesTest(AcceptanceTestCase):
-    release_date = datetime(2020, 5, 18, 15, 13, 58, 132928, tzinfo=timezone.utc)
+    release_date = datetime(2020, 5, 18, 15, 13, 58, 132928, tzinfo=UTC)
 
     def setUp(self):
         super().setUp()
@@ -29,7 +29,7 @@ class OrganizationReleasesTest(AcceptanceTestCase):
         self.create_project(organization=self.org, teams=[self.team], name="Bengal 3")
         self.login_as(self.user)
         self.path = f"/organizations/{self.org.slug}/releases/"
-        self.project.update(first_event=django_timezone.now())
+        self.project.update(first_event=timezone.now())
 
     @patch("sentry.api.serializers.models.organization.get_organization_volume", return_value=None)
     def test_list(self, _):

+ 10 - 10
tests/sentry/api/endpoints/test_organization_details.py

@@ -2,7 +2,7 @@ from __future__ import annotations
 
 import re
 from base64 import b64encode
-from datetime import datetime, timedelta, timezone
+from datetime import timedelta
 from typing import Any
 from unittest.mock import patch
 
@@ -11,7 +11,7 @@ import responses
 from dateutil.parser import parse as parse_date
 from django.core import mail
 from django.db import router
-from django.utils import timezone as django_timezone
+from django.utils import timezone
 from rest_framework import status
 
 from sentry import audit_log
@@ -242,9 +242,9 @@ class OrganizationDetailsTest(OrganizationDetailsTestBase):
         data = {"trustedRelays": trusted_relays}
 
         with self.feature("organizations:relay"):
-            start_time = datetime.now(timezone.utc)
+            start_time = timezone.now()
             self.get_success_response(self.organization.slug, method="put", **data)
-            end_time = datetime.now(timezone.utc)
+            end_time = timezone.now()
             response = self.get_success_response(self.organization.slug)
 
         response_data = response.data.get("trustedRelays")
@@ -579,9 +579,9 @@ class OrganizationUpdateTest(OrganizationDetailsTestBase):
         data = {"trustedRelays": trusted_relays}
 
         with self.feature("organizations:relay"), outbox_runner():
-            start_time = datetime.now(timezone.utc)
+            start_time = timezone.now()
             response = self.get_success_response(self.organization.slug, **data)
-            end_time = datetime.now(timezone.utc)
+            end_time = timezone.now()
             response_data = response.data.get("trustedRelays")
 
         actual = get_trusted_relay_value(self.organization)
@@ -663,11 +663,11 @@ class OrganizationUpdateTest(OrganizationDetailsTestBase):
         changed_settings = {"trustedRelays": modified_trusted_relays}
 
         with self.feature("organizations:relay"), outbox_runner():
-            start_time = datetime.now(timezone.utc)
+            start_time = timezone.now()
             self.get_success_response(self.organization.slug, **initial_settings)
-            after_initial = datetime.now(timezone.utc)
+            after_initial = timezone.now()
             self.get_success_response(self.organization.slug, **changed_settings)
-            after_final = datetime.now(timezone.utc)
+            after_final = timezone.now()
 
         actual = get_trusted_relay_value(self.organization)
         assert len(actual) == len(modified_trusted_relays)
@@ -911,7 +911,7 @@ class OrganizationDeleteTest(OrganizationDetailsTestBase):
 
         schedule = RegionScheduledDeletion.objects.get(object_id=org.id, model_name="Organization")
         # Delay is 24 hours but to avoid wobbling microseconds we compare with 23 hours.
-        assert schedule.date_scheduled >= django_timezone.now() + timedelta(hours=23)
+        assert schedule.date_scheduled >= timezone.now() + timedelta(hours=23)
 
         # Make sure we've emailed all owners
         assert len(mail.outbox) == len(owners)

+ 15 - 15
tests/sentry/api/serializers/test_project.py

@@ -1,11 +1,11 @@
 import datetime
-from datetime import timedelta, timezone
+from datetime import UTC, timedelta
 from functools import cached_property
 from unittest import mock
 
 from django.conf import settings
 from django.db.models import F
-from django.utils import timezone as django_timezone
+from django.utils import timezone
 
 from sentry import features
 from sentry.api.serializers import serialize
@@ -289,7 +289,7 @@ class ProjectWithTeamSerializerTest(TestCase):
 class ProjectSummarySerializerTest(SnubaTestCase, TestCase):
     def setUp(self):
         super().setUp()
-        self.date = datetime.datetime(2018, 1, 12, 3, 8, 25, tzinfo=timezone.utc)
+        self.date = datetime.datetime(2018, 1, 12, 3, 8, 25, tzinfo=UTC)
         self.user = self.create_user(username="foo")
         self.organization = self.create_organization(owner=self.user)
         team = self.create_team(organization=self.organization)
@@ -343,7 +343,7 @@ class ProjectSummarySerializerTest(SnubaTestCase, TestCase):
         assert result["firstEvent"] is None
         assert result["firstTransactionEvent"] is False
 
-        self.project.first_event = django_timezone.now()
+        self.project.first_event = timezone.now()
         self.project.update(flags=F("flags").bitor(Project.flags.has_transactions))
 
         result = serialize(self.project, self.user, ProjectSummarySerializer())
@@ -376,7 +376,7 @@ class ProjectSummarySerializerTest(SnubaTestCase, TestCase):
         result = serialize(self.project, self.user, ProjectSummarySerializer())
         assert result["hasSessions"] is False
 
-        self.project.first_event = django_timezone.now()
+        self.project.first_event = timezone.now()
         self.project.update(flags=F("flags").bitor(Project.flags.has_sessions))
 
         result = serialize(self.project, self.user, ProjectSummarySerializer())
@@ -386,7 +386,7 @@ class ProjectSummarySerializerTest(SnubaTestCase, TestCase):
         result = serialize(self.project, self.user, ProjectSummarySerializer())
         assert result["hasProfiles"] is False
 
-        self.project.first_event = django_timezone.now()
+        self.project.first_event = timezone.now()
         self.project.update(flags=F("flags").bitor(Project.flags.has_profiles))
 
         result = serialize(self.project, self.user, ProjectSummarySerializer())
@@ -396,7 +396,7 @@ class ProjectSummarySerializerTest(SnubaTestCase, TestCase):
         result = serialize(self.project, self.user, ProjectSummarySerializer())
         assert result["hasReplays"] is False
 
-        self.project.first_event = django_timezone.now()
+        self.project.first_event = timezone.now()
         self.project.update(flags=F("flags").bitor(Project.flags.has_replays))
 
         result = serialize(self.project, self.user, ProjectSummarySerializer())
@@ -406,7 +406,7 @@ class ProjectSummarySerializerTest(SnubaTestCase, TestCase):
         result = serialize(self.project, self.user, ProjectSummarySerializer())
         assert result["hasFeedbacks"] is False
 
-        self.project.first_event = django_timezone.now()
+        self.project.first_event = timezone.now()
         self.project.update(flags=F("flags").bitor(Project.flags.has_feedbacks))
 
         result = serialize(self.project, self.user, ProjectSummarySerializer())
@@ -416,7 +416,7 @@ class ProjectSummarySerializerTest(SnubaTestCase, TestCase):
         result = serialize(self.project, self.user, ProjectSummarySerializer())
         assert result["hasNewFeedbacks"] is False
 
-        self.project.first_event = django_timezone.now()
+        self.project.first_event = timezone.now()
         self.project.update(flags=F("flags").bitor(Project.flags.has_new_feedbacks))
 
         result = serialize(self.project, self.user, ProjectSummarySerializer())
@@ -426,7 +426,7 @@ class ProjectSummarySerializerTest(SnubaTestCase, TestCase):
         result = serialize(self.project, self.user, ProjectSummarySerializer())
         assert result["hasCustomMetrics"] is False
 
-        self.project.first_event = django_timezone.now()
+        self.project.first_event = timezone.now()
         self.project.update(flags=F("flags").bitor(Project.flags.has_custom_metrics))
 
         result = serialize(self.project, self.user, ProjectSummarySerializer())
@@ -436,7 +436,7 @@ class ProjectSummarySerializerTest(SnubaTestCase, TestCase):
         result = serialize(self.project, self.user, ProjectSummarySerializer())
         assert result["hasMonitors"] is False
 
-        self.project.first_event = django_timezone.now()
+        self.project.first_event = timezone.now()
         self.project.update(flags=F("flags").bitor(Project.flags.has_cron_monitors))
 
         result = serialize(self.project, self.user, ProjectSummarySerializer())
@@ -446,7 +446,7 @@ class ProjectSummarySerializerTest(SnubaTestCase, TestCase):
         result = serialize(self.project, self.user, ProjectSummarySerializer())
         assert result["hasMinifiedStackTrace"] is False
 
-        self.project.first_event = django_timezone.now()
+        self.project.first_event = timezone.now()
         self.project.update(flags=F("flags").bitor(Project.flags.has_minified_stack_trace))
 
         result = serialize(self.project, self.user, ProjectSummarySerializer())
@@ -696,7 +696,7 @@ class ProjectWithOrganizationSerializerTest(TestCase):
 class DetailedProjectSerializerTest(TestCase):
     def setUp(self):
         super().setUp()
-        self.date = datetime.datetime(2018, 1, 12, 3, 8, 25, tzinfo=timezone.utc)
+        self.date = datetime.datetime(2018, 1, 12, 3, 8, 25, tzinfo=UTC)
         self.user = self.create_user(username="foo")
         self.organization = self.create_organization(owner=self.user)
         team = self.create_team(organization=self.organization)
@@ -761,7 +761,7 @@ class BulkFetchProjectLatestReleases(TestCase):
 
     def test_single_release(self):
         release = self.create_release(
-            self.project, date_added=django_timezone.now() - timedelta(minutes=5)
+            self.project, date_added=timezone.now() - timedelta(minutes=5)
         )
         assert bulk_fetch_project_latest_releases([self.project]) == [release]
         newer_release = self.create_release(self.project)
@@ -778,7 +778,7 @@ class BulkFetchProjectLatestReleases(TestCase):
 
     def test_multi_releases(self):
         release = self.create_release(
-            self.project, date_added=django_timezone.now() - timedelta(minutes=5)
+            self.project, date_added=timezone.now() - timedelta(minutes=5)
         )
         other_project_release = self.create_release(self.other_project)
         assert set(bulk_fetch_project_latest_releases([self.project, self.other_project])) == {

+ 4 - 4
tests/sentry/auth/test_staff.py

@@ -1,10 +1,10 @@
 from contextlib import contextmanager
-from datetime import datetime, timedelta, timezone
+from datetime import UTC, datetime, timedelta
 from unittest.mock import Mock, patch
 
 from django.contrib.auth.models import AnonymousUser
 from django.core import signing
-from django.utils import timezone as django_timezone
+from django.utils import timezone
 
 from sentry.auth import staff
 from sentry.auth.staff import (
@@ -30,7 +30,7 @@ from sentry.utils.auth import mark_sso_complete
 
 UNSET = object()
 
-BASETIME = datetime(2022, 3, 21, 0, 0, tzinfo=timezone.utc)
+BASETIME = datetime(2022, 3, 21, 0, 0, tzinfo=UTC)
 
 EXPIRE_TIME = timedelta(hours=4, minutes=1)
 
@@ -59,7 +59,7 @@ def override_org_id(new_org_id: int):
 class StaffTestCase(TestCase):
     def setUp(self):
         super().setUp()
-        self.current_datetime = django_timezone.now()
+        self.current_datetime = timezone.now()
         self.default_token = "abcdefghijklmnog"
         self.staff_user = self.create_user(is_staff=True)
 

+ 4 - 4
tests/sentry/auth/test_superuser.py

@@ -1,4 +1,4 @@
-from datetime import datetime, timedelta, timezone
+from datetime import UTC, datetime, timedelta
 from unittest import mock
 from unittest.mock import Mock, patch
 
@@ -6,7 +6,7 @@ import pytest
 from django.contrib.auth.models import AnonymousUser
 from django.core import signing
 from django.test import override_settings
-from django.utils import timezone as django_timezone
+from django.utils import timezone
 
 from sentry.auth.superuser import (
     COOKIE_DOMAIN,
@@ -41,7 +41,7 @@ from sentry.utils.auth import mark_sso_complete
 
 UNSET = object()
 
-BASETIME = datetime(2022, 3, 21, 0, 0, tzinfo=timezone.utc)
+BASETIME = datetime(2022, 3, 21, 0, 0, tzinfo=UTC)
 
 EXPIRE_TIME = timedelta(hours=4, minutes=1)
 
@@ -55,7 +55,7 @@ IDLE_EXPIRE_TIME = OUTSIDE_PRIVILEGE_ACCESS_EXPIRE_TIME = timedelta(hours=2)
 class SuperuserTestCase(TestCase):
     def setUp(self):
         super().setUp()
-        self.current_datetime = django_timezone.now()
+        self.current_datetime = timezone.now()
         self.default_token = "abcdefghjiklmnog"
         self.superuser = self.create_user(is_superuser=True)
 

+ 4 - 4
tests/sentry/dynamic_sampling/tasks/test_tasks.py

@@ -1,9 +1,9 @@
 from collections.abc import Callable
-from datetime import datetime, timedelta, timezone
+from datetime import timedelta
 from unittest.mock import patch
 
 import pytest
-from django.utils import timezone as django_timezone
+from django.utils import timezone
 
 from sentry.dynamic_sampling import RuleType, generate_rules, get_redis_client_for_ds
 from sentry.dynamic_sampling.rules.base import NEW_MODEL_THRESHOLD_IN_MINUTES
@@ -32,7 +32,7 @@ from sentry.testutils.cases import BaseMetricsLayerTestCase, SnubaTestCase, Test
 from sentry.testutils.helpers import with_feature
 from sentry.testutils.helpers.datetime import freeze_time
 
-MOCK_DATETIME = (django_timezone.now() - timedelta(days=1)).replace(
+MOCK_DATETIME = (timezone.now() - timedelta(days=1)).replace(
     hour=0, minute=0, second=0, microsecond=0
 )
 
@@ -40,7 +40,7 @@ MOCK_DATETIME = (django_timezone.now() - timedelta(days=1)).replace(
 class TasksTestCase(BaseMetricsLayerTestCase, TestCase, SnubaTestCase):
     @staticmethod
     def old_date():
-        return datetime.now(tz=timezone.utc) - timedelta(minutes=NEW_MODEL_THRESHOLD_IN_MINUTES + 1)
+        return timezone.now() - timedelta(minutes=NEW_MODEL_THRESHOLD_IN_MINUTES + 1)
 
     @staticmethod
     def disable_all_biases(project):

+ 30 - 44
tests/sentry/event_manager/test_event_manager.py

@@ -16,7 +16,7 @@ from arroyo.types import Partition, Topic
 from django.conf import settings
 from django.core.cache import cache
 from django.test.utils import override_settings
-from django.utils import timezone as django_timezone
+from django.utils import timezone
 from rest_framework.status import HTTP_404_NOT_FOUND
 
 from fixtures.github import (
@@ -287,7 +287,7 @@ class EventManagerTest(TestCase, SnubaTestCase, EventManagerTestMixin, Performan
         old_release = Release.objects.create(
             version="a",
             organization_id=self.project.organization_id,
-            date_added=django_timezone.now() - timedelta(minutes=30),
+            date_added=timezone.now() - timedelta(minutes=30),
         )
         old_release.add_project(self.project)
 
@@ -363,7 +363,7 @@ class EventManagerTest(TestCase, SnubaTestCase, EventManagerTestMixin, Performan
 
         # Create a release and a group associated with it
         old_release = self.create_release(
-            version="foobar", date_added=django_timezone.now() - timedelta(minutes=30)
+            version="foobar", date_added=timezone.now() - timedelta(minutes=30)
         )
         manager = EventManager(
             make_event(
@@ -423,7 +423,7 @@ class EventManagerTest(TestCase, SnubaTestCase, EventManagerTestMixin, Performan
 
         # Create a release and a group associated with it
         old_release = self.create_release(
-            version="a", date_added=django_timezone.now() - timedelta(minutes=30)
+            version="a", date_added=timezone.now() - timedelta(minutes=30)
         )
         manager = EventManager(
             make_event(
@@ -483,7 +483,7 @@ class EventManagerTest(TestCase, SnubaTestCase, EventManagerTestMixin, Performan
 
         # Create a release and a group associated with it
         old_release = self.create_release(
-            version="foo@1.0.0", date_added=django_timezone.now() - timedelta(minutes=30)
+            version="foo@1.0.0", date_added=timezone.now() - timedelta(minutes=30)
         )
         manager = EventManager(
             make_event(
@@ -726,7 +726,7 @@ class EventManagerTest(TestCase, SnubaTestCase, EventManagerTestMixin, Performan
         old_release = Release.objects.create(
             version="a",
             organization_id=self.project.organization_id,
-            date_added=django_timezone.now() - timedelta(minutes=30),
+            date_added=timezone.now() - timedelta(minutes=30),
         )
         old_release.add_project(self.project)
 
@@ -2988,17 +2988,15 @@ class DSLatestReleaseBoostTest(TestCase):
 
     @freeze_time("2022-11-03 10:00:00")
     def test_boost_release_with_non_observed_release(self):
-        ts = datetime.now(UTC).timestamp()
+        ts = timezone.now().timestamp()
 
         project = self.create_project(platform="python")
-        release_1 = Release.get_or_create(
-            project=project, version="1.0", date_added=datetime.now(UTC)
-        )
+        release_1 = Release.get_or_create(project=project, version="1.0", date_added=timezone.now())
         release_2 = Release.get_or_create(
-            project=project, version="2.0", date_added=datetime.now(UTC) + timedelta(hours=1)
+            project=project, version="2.0", date_added=timezone.now() + timedelta(hours=1)
         )
         release_3 = Release.get_or_create(
-            project=project, version="3.0", date_added=datetime.now(UTC) + timedelta(hours=2)
+            project=project, version="3.0", date_added=timezone.now() + timedelta(hours=2)
         )
 
         for release, environment in (
@@ -3051,17 +3049,15 @@ class DSLatestReleaseBoostTest(TestCase):
 
     @freeze_time("2022-11-03 10:00:00")
     def test_boost_release_boosts_only_latest_release(self):
-        ts = datetime.now(UTC).timestamp()
+        ts = timezone.now().timestamp()
 
         project = self.create_project(platform="python")
-        release_1 = Release.get_or_create(
-            project=project, version="1.0", date_added=datetime.now(UTC)
-        )
+        release_1 = Release.get_or_create(project=project, version="1.0", date_added=timezone.now())
         release_2 = Release.get_or_create(
             project=project,
             version="2.0",
             # We must make sure the new release_2.date_added > release_1.date_added.
-            date_added=datetime.now(UTC) + timedelta(hours=1),
+            date_added=timezone.now() + timedelta(hours=1),
         )
 
         # We add a transaction for latest release release_2.
@@ -3103,9 +3099,7 @@ class DSLatestReleaseBoostTest(TestCase):
     @freeze_time("2022-11-03 10:00:00")
     def test_boost_release_with_observed_release_and_different_environment(self):
         project = self.create_project(platform="python")
-        release = Release.get_or_create(
-            project=project, version="1.0", date_added=datetime.now(UTC)
-        )
+        release = Release.get_or_create(project=project, version="1.0", date_added=timezone.now())
 
         self.make_release_transaction(
             release_version=release.version,
@@ -3230,9 +3224,7 @@ class DSLatestReleaseBoostTest(TestCase):
     @freeze_time("2022-11-03 10:00:00")
     def test_release_not_boosted_with_observed_release_and_same_environment(self):
         project = self.create_project(platform="python")
-        release = Release.get_or_create(
-            project=project, version="1.0", date_added=datetime.now(UTC)
-        )
+        release = Release.get_or_create(project=project, version="1.0", date_added=timezone.now())
 
         for environment in (self.environment1.name, self.environment2.name):
             self.redis_client.set(
@@ -3251,14 +3243,12 @@ class DSLatestReleaseBoostTest(TestCase):
 
     @freeze_time("2022-11-03 10:00:00")
     def test_release_not_boosted_with_deleted_release_after_event_received(self):
-        ts = datetime.now(UTC).timestamp()
+        ts = timezone.now().timestamp()
 
         project = self.create_project(platform="python")
-        release_1 = Release.get_or_create(
-            project=project, version="1.0", date_added=datetime.now(UTC)
-        )
+        release_1 = Release.get_or_create(project=project, version="1.0", date_added=timezone.now())
         release_2 = Release.get_or_create(
-            project=project, version="2.0", date_added=datetime.now(UTC) + timedelta(hours=1)
+            project=project, version="2.0", date_added=timezone.now() + timedelta(hours=1)
         )
 
         self.make_release_transaction(
@@ -3303,14 +3293,12 @@ class DSLatestReleaseBoostTest(TestCase):
 
     @freeze_time("2022-11-03 10:00:00")
     def test_get_boosted_releases_with_old_and_new_cache_keys(self):
-        ts = datetime.now(UTC).timestamp()
+        ts = timezone.now().timestamp()
 
         project = self.create_project(platform="python")
 
         # Old cache key
-        release_1 = Release.get_or_create(
-            project=project, version="1.0", date_added=datetime.now(UTC)
-        )
+        release_1 = Release.get_or_create(project=project, version="1.0", date_added=timezone.now())
         self.redis_client.hset(
             f"ds::p:{project.id}:boosted_releases",
             f"{release_1.id}",
@@ -3319,7 +3307,7 @@ class DSLatestReleaseBoostTest(TestCase):
 
         # New cache key
         release_2 = Release.get_or_create(
-            project=project, version="2.0", date_added=datetime.now(UTC) + timedelta(hours=1)
+            project=project, version="2.0", date_added=timezone.now() + timedelta(hours=1)
         )
         self.redis_client.hset(
             f"ds::p:{project.id}:boosted_releases",
@@ -3375,7 +3363,7 @@ class DSLatestReleaseBoostTest(TestCase):
 
     @freeze_time("2022-11-03 10:00:00")
     def test_expired_boosted_releases_are_removed(self):
-        ts = datetime.now(UTC).timestamp()
+        ts = timezone.now().timestamp()
 
         # We want to test with multiple platforms.
         for platform in ("python", "java", None):
@@ -3390,7 +3378,7 @@ class DSLatestReleaseBoostTest(TestCase):
                 release = Release.get_or_create(
                     project=project,
                     version=release_version,
-                    date_added=datetime.now(UTC) + timedelta(hours=index),
+                    date_added=timezone.now() + timedelta(hours=index),
                 )
                 self.redis_client.set(
                     f"ds::p:{project.id}:r:{release.id}:e:{environment}", 1, 60 * 60 * 24
@@ -3406,7 +3394,7 @@ class DSLatestReleaseBoostTest(TestCase):
             release_3 = Release.get_or_create(
                 project=project,
                 version=f"3.0-{platform}",
-                date_added=datetime.now(UTC) + timedelta(hours=2),
+                date_added=timezone.now() + timedelta(hours=2),
             )
             self.make_release_transaction(
                 release_version=release_3.version,
@@ -3457,18 +3445,18 @@ class DSLatestReleaseBoostTest(TestCase):
     @freeze_time("2022-11-03 10:00:00")
     @mock.patch("sentry.dynamic_sampling.rules.helpers.latest_releases.BOOSTED_RELEASES_LIMIT", 2)
     def test_least_recently_boosted_release_is_removed_if_limit_is_exceeded(self):
-        ts = datetime.now(UTC).timestamp()
+        ts = timezone.now().timestamp()
 
         project = self.create_project(platform="python")
         release_1 = Release.get_or_create(
             project=project,
             version="1.0",
-            date_added=datetime.now(UTC),
+            date_added=timezone.now(),
         )
         release_2 = Release.get_or_create(
             project=project,
             version="2.0",
-            date_added=datetime.now(UTC) + timedelta(hours=1),
+            date_added=timezone.now() + timedelta(hours=1),
         )
 
         # We boost with increasing timestamps, so that we know that the smallest will be evicted.
@@ -3487,7 +3475,7 @@ class DSLatestReleaseBoostTest(TestCase):
         release_3 = Release.get_or_create(
             project=project,
             version="3.0",
-            date_added=datetime.now(UTC) + timedelta(hours=2),
+            date_added=timezone.now() + timedelta(hours=2),
         )
         self.make_release_transaction(
             release_version=release_3.version,
@@ -3527,12 +3515,10 @@ class DSLatestReleaseBoostTest(TestCase):
     @freeze_time()
     @mock.patch("sentry.dynamic_sampling.rules.helpers.latest_releases.BOOSTED_RELEASES_LIMIT", 2)
     def test_removed_boost_not_added_again_if_limit_is_exceeded(self):
-        ts = datetime.now(UTC).timestamp()
+        ts = timezone.now().timestamp()
 
         project = self.create_project(platform="python")
-        release_1 = Release.get_or_create(
-            project=project, version="1.0", date_added=datetime.now(UTC)
-        )
+        release_1 = Release.get_or_create(project=project, version="1.0", date_added=timezone.now())
 
         # We want to test that if we have the same release, but we send different environments that go over the
         # limit, and we evict an environment, but then we send a transaction with the evicted environment.

+ 5 - 5
tests/sentry/incidents/endpoints/test_organization_combined_rule_index_endpoint.py

@@ -1,4 +1,4 @@
-from datetime import UTC, datetime, timezone
+from datetime import UTC, datetime
 
 import requests
 
@@ -302,12 +302,12 @@ class OrganizationCombinedRuleIndexEndpointTest(BaseAlertRuleSerializerTest, API
         self.one_alert_rule = self.create_alert_rule(
             organization=self.org,
             projects=[self.project, self.project2],
-            date_added=date_added.replace(tzinfo=timezone.utc),
+            date_added=date_added.replace(tzinfo=UTC),
         )
         self.two_alert_rule = self.create_alert_rule(
             organization=self.org,
             projects=[self.project2],
-            date_added=date_added.replace(tzinfo=timezone.utc),
+            date_added=date_added.replace(tzinfo=UTC),
         )
         self.three_alert_rule = self.create_alert_rule(
             organization=self.org, projects=[self.project]
@@ -351,12 +351,12 @@ class OrganizationCombinedRuleIndexEndpointTest(BaseAlertRuleSerializerTest, API
         self.one_alert_rule = self.create_alert_rule(
             organization=self.org,
             projects=[self.project, self.project2],
-            date_added=date_added.replace(tzinfo=timezone.utc),
+            date_added=date_added.replace(tzinfo=UTC),
         )
         self.two_alert_rule = self.create_alert_rule(
             organization=self.org,
             projects=[self.project],
-            date_added=date_added.replace(tzinfo=timezone.utc),
+            date_added=date_added.replace(tzinfo=UTC),
         )
         self.three_alert_rule = self.create_alert_rule(
             organization=self.org, projects=[self.project2]

Some files were not shown because too many files changed in this diff