Skip to content

Commit 531b34c

Browse files
andersktimabbott
authored andcommitted
ruff: Fix UP007 Use X | Y for type annotations.
Signed-off-by: Anders Kaseorg <[email protected]>
1 parent e08a24e commit 531b34c

File tree

355 files changed

+2759
-3029
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

355 files changed

+2759
-3029
lines changed

analytics/lib/counts.py

+22-24
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import time
33
from collections import OrderedDict, defaultdict
44
from datetime import datetime, timedelta
5-
from typing import Callable, Optional, Sequence, Union
5+
from typing import Callable, Sequence, Union
66

77
from django.conf import settings
88
from django.db import connection, models
@@ -55,7 +55,7 @@ def __init__(
5555
property: str,
5656
data_collector: "DataCollector",
5757
frequency: str,
58-
interval: Optional[timedelta] = None,
58+
interval: timedelta | None = None,
5959
) -> None:
6060
self.property = property
6161
self.data_collector = data_collector
@@ -72,7 +72,7 @@ def __init__(
7272
def __repr__(self) -> str:
7373
return f"<CountStat: {self.property}>"
7474

75-
def last_successful_fill(self) -> Optional[datetime]:
75+
def last_successful_fill(self) -> datetime | None:
7676
fillstate = FillState.objects.filter(property=self.property).first()
7777
if fillstate is None:
7878
return None
@@ -92,7 +92,7 @@ def __init__(
9292
property: str,
9393
data_collector: "DataCollector",
9494
frequency: str,
95-
interval: Optional[timedelta] = None,
95+
interval: timedelta | None = None,
9696
dependencies: Sequence[str] = [],
9797
) -> None:
9898
CountStat.__init__(self, property, data_collector, frequency, interval=interval)
@@ -103,7 +103,7 @@ class DataCollector:
103103
def __init__(
104104
self,
105105
output_table: type[BaseCount],
106-
pull_function: Optional[Callable[[str, datetime, datetime, Optional[Realm]], int]],
106+
pull_function: Callable[[str, datetime, datetime, Realm | None], int] | None,
107107
) -> None:
108108
self.output_table = output_table
109109
self.pull_function = pull_function
@@ -115,9 +115,7 @@ def depends_on_realm(self) -> bool:
115115
## CountStat-level operations ##
116116

117117

118-
def process_count_stat(
119-
stat: CountStat, fill_to_time: datetime, realm: Optional[Realm] = None
120-
) -> None:
118+
def process_count_stat(stat: CountStat, fill_to_time: datetime, realm: Realm | None = None) -> None:
121119
# TODO: The realm argument is not yet supported, in that we don't
122120
# have a solution for how to update FillState if it is passed. It
123121
# exists solely as partial plumbing for when we do fully implement
@@ -180,7 +178,7 @@ def do_update_fill_state(fill_state: FillState, end_time: datetime, state: int)
180178
# We assume end_time is valid (e.g. is on a day or hour boundary as appropriate)
181179
# and is time-zone-aware. It is the caller's responsibility to enforce this!
182180
def do_fill_count_stat_at_hour(
183-
stat: CountStat, end_time: datetime, realm: Optional[Realm] = None
181+
stat: CountStat, end_time: datetime, realm: Realm | None = None
184182
) -> None:
185183
start_time = end_time - stat.interval
186184
if not isinstance(stat, LoggingCountStat):
@@ -209,7 +207,7 @@ def do_delete_counts_at_hour(stat: CountStat, end_time: datetime) -> None:
209207

210208

211209
def do_aggregate_to_summary_table(
212-
stat: CountStat, end_time: datetime, realm: Optional[Realm] = None
210+
stat: CountStat, end_time: datetime, realm: Realm | None = None
213211
) -> None:
214212
cursor = connection.cursor()
215213

@@ -303,15 +301,15 @@ def do_aggregate_to_summary_table(
303301
def do_increment_logging_stat(
304302
model_object_for_bucket: Union[Realm, UserProfile, Stream, "RemoteRealm", "RemoteZulipServer"],
305303
stat: CountStat,
306-
subgroup: Optional[Union[str, int, bool]],
304+
subgroup: str | int | bool | None,
307305
event_time: datetime,
308306
increment: int = 1,
309307
) -> None:
310308
if not increment:
311309
return
312310

313311
table = stat.data_collector.output_table
314-
id_args: dict[str, Union[int, None]] = {}
312+
id_args: dict[str, int | None] = {}
315313
conflict_args: list[str] = []
316314
if table == RealmCount:
317315
assert isinstance(model_object_for_bucket, Realm)
@@ -433,7 +431,7 @@ def do_pull_by_sql_query(
433431
start_time: datetime,
434432
end_time: datetime,
435433
query: QueryFn,
436-
group_by: Optional[tuple[type[models.Model], str]],
434+
group_by: tuple[type[models.Model], str] | None,
437435
) -> int:
438436
if group_by is None:
439437
subgroup: Composable = SQL("NULL")
@@ -469,10 +467,10 @@ def do_pull_by_sql_query(
469467
def sql_data_collector(
470468
output_table: type[BaseCount],
471469
query: QueryFn,
472-
group_by: Optional[tuple[type[models.Model], str]],
470+
group_by: tuple[type[models.Model], str] | None,
473471
) -> DataCollector:
474472
def pull_function(
475-
property: str, start_time: datetime, end_time: datetime, realm: Optional[Realm] = None
473+
property: str, start_time: datetime, end_time: datetime, realm: Realm | None = None
476474
) -> int:
477475
# The pull function type needs to accept a Realm argument
478476
# because the 'minutes_active::day' CountStat uses
@@ -485,7 +483,7 @@ def pull_function(
485483
return DataCollector(output_table, pull_function)
486484

487485

488-
def count_upload_space_used_by_realm_query(realm: Optional[Realm]) -> QueryFn:
486+
def count_upload_space_used_by_realm_query(realm: Realm | None) -> QueryFn:
489487
if realm is None:
490488
realm_clause: Composable = SQL("")
491489
else:
@@ -520,7 +518,7 @@ def count_upload_space_used_by_realm_query(realm: Optional[Realm]) -> QueryFn:
520518

521519

522520
def do_pull_minutes_active(
523-
property: str, start_time: datetime, end_time: datetime, realm: Optional[Realm] = None
521+
property: str, start_time: datetime, end_time: datetime, realm: Realm | None = None
524522
) -> int:
525523
user_activity_intervals = (
526524
UserActivityInterval.objects.filter(
@@ -555,7 +553,7 @@ def do_pull_minutes_active(
555553
return len(rows)
556554

557555

558-
def count_message_by_user_query(realm: Optional[Realm]) -> QueryFn:
556+
def count_message_by_user_query(realm: Realm | None) -> QueryFn:
559557
if realm is None:
560558
realm_clause: Composable = SQL("")
561559
else:
@@ -588,7 +586,7 @@ def count_message_by_user_query(realm: Optional[Realm]) -> QueryFn:
588586

589587

590588
# Note: ignores the group_by / group_by_clause.
591-
def count_message_type_by_user_query(realm: Optional[Realm]) -> QueryFn:
589+
def count_message_type_by_user_query(realm: Realm | None) -> QueryFn:
592590
if realm is None:
593591
realm_clause: Composable = SQL("")
594592
else:
@@ -643,7 +641,7 @@ def count_message_type_by_user_query(realm: Optional[Realm]) -> QueryFn:
643641
# use this also subgroup on UserProfile.is_bot. If in the future there is a
644642
# stat that counts messages by stream and doesn't need the UserProfile
645643
# table, consider writing a new query for efficiency.
646-
def count_message_by_stream_query(realm: Optional[Realm]) -> QueryFn:
644+
def count_message_by_stream_query(realm: Realm | None) -> QueryFn:
647645
if realm is None:
648646
realm_clause: Composable = SQL("")
649647
else:
@@ -683,7 +681,7 @@ def count_message_by_stream_query(realm: Optional[Realm]) -> QueryFn:
683681
# same event_time and event_type in [RealmAuditLog.USER_CREATED,
684682
# USER_DEACTIVATED, etc]. In particular, it's important to ensure
685683
# that migrations don't cause that to happen.
686-
def check_realmauditlog_by_user_query(realm: Optional[Realm]) -> QueryFn:
684+
def check_realmauditlog_by_user_query(realm: Realm | None) -> QueryFn:
687685
if realm is None:
688686
realm_clause: Composable = SQL("")
689687
else:
@@ -722,7 +720,7 @@ def check_realmauditlog_by_user_query(realm: Optional[Realm]) -> QueryFn:
722720
)
723721

724722

725-
def check_useractivityinterval_by_user_query(realm: Optional[Realm]) -> QueryFn:
723+
def check_useractivityinterval_by_user_query(realm: Realm | None) -> QueryFn:
726724
if realm is None:
727725
realm_clause: Composable = SQL("")
728726
else:
@@ -746,7 +744,7 @@ def check_useractivityinterval_by_user_query(realm: Optional[Realm]) -> QueryFn:
746744
).format(**kwargs, realm_clause=realm_clause)
747745

748746

749-
def count_realm_active_humans_query(realm: Optional[Realm]) -> QueryFn:
747+
def count_realm_active_humans_query(realm: Realm | None) -> QueryFn:
750748
if realm is None:
751749
realm_clause: Composable = SQL("")
752750
else:
@@ -817,7 +815,7 @@ def count_realm_active_humans_query(realm: Optional[Realm]) -> QueryFn:
817815
).format(**kwargs)
818816

819817

820-
def get_count_stats(realm: Optional[Realm] = None) -> dict[str, CountStat]:
818+
def get_count_stats(realm: Realm | None = None) -> dict[str, CountStat]:
821819
## CountStat declarations ##
822820

823821
count_stats_ = [

analytics/lib/time_utils.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from datetime import datetime, timedelta
2-
from typing import Optional
32

43
from analytics.lib.counts import CountStat
54
from zerver.lib.timestamp import floor_to_day, floor_to_hour, verify_UTC
@@ -10,7 +9,7 @@
109
# So informally, time_range(Sep 20, Sep 22, day, None) returns [Sep 20, Sep 21, Sep 22],
1110
# and time_range(Sep 20, Sep 22, day, 5) returns [Sep 18, Sep 19, Sep 20, Sep 21, Sep 22]
1211
def time_range(
13-
start: datetime, end: datetime, frequency: str, min_length: Optional[int]
12+
start: datetime, end: datetime, frequency: str, min_length: int | None
1413
) -> list[datetime]:
1514
verify_UTC(start)
1615
verify_UTC(end)

analytics/management/commands/populate_analytics_db.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from datetime import timedelta
2-
from typing import Any, Mapping, Union
2+
from typing import Any, Mapping
33

44
from django.core.files.uploadedfile import UploadedFile
55
from django.utils.timezone import now as timezone_now
@@ -147,7 +147,7 @@ def handle(self, *args: Any, **options: Any) -> None:
147147
with open(IMAGE_FILE_PATH, "rb") as fp:
148148
upload_message_attachment_from_request(UploadedFile(fp), shylock)
149149

150-
FixtureData: TypeAlias = Mapping[Union[str, int, None], list[int]]
150+
FixtureData: TypeAlias = Mapping[str | int | None, list[int]]
151151

152152
def insert_fixture_data(
153153
stat: CountStat,
@@ -330,7 +330,7 @@ def insert_fixture_data(
330330
"true": self.generate_fixture_data(stat, 20, 2, 3, 0.2, 3),
331331
}
332332
insert_fixture_data(stat, realm_data, RealmCount)
333-
stream_data: Mapping[Union[int, str, None], list[int]] = {
333+
stream_data: Mapping[int | str | None, list[int]] = {
334334
"false": self.generate_fixture_data(stat, 10, 7, 5, 0.6, 4),
335335
"true": self.generate_fixture_data(stat, 5, 3, 2, 0.4, 2),
336336
}

analytics/tests/test_counts.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from contextlib import AbstractContextManager, ExitStack, contextmanager
22
from datetime import datetime, timedelta, timezone
3-
from typing import Any, Iterator, Optional
3+
from typing import Any, Iterator
44
from unittest import mock
55

66
import time_machine
@@ -111,7 +111,7 @@ def setUp(self) -> None:
111111
# used to generate unique names in self.create_*
112112
self.name_counter = 100
113113
# used as defaults in self.assert_table_count
114-
self.current_property: Optional[str] = None
114+
self.current_property: str | None = None
115115

116116
# Delete RemoteRealm registrations to have a clean slate - the relevant
117117
# tests want to construct this from scratch.
@@ -226,10 +226,10 @@ def assert_table_count(
226226
self,
227227
table: type[BaseCount],
228228
value: int,
229-
property: Optional[str] = None,
230-
subgroup: Optional[str] = None,
229+
property: str | None = None,
230+
subgroup: str | None = None,
231231
end_time: datetime = TIME_ZERO,
232-
realm: Optional[Realm] = None,
232+
realm: Realm | None = None,
233233
**kwargs: models.Model,
234234
) -> None:
235235
if property is None:
@@ -1812,7 +1812,7 @@ def setUp(self) -> None:
18121812
self.current_property = self.stat.property
18131813

18141814
def add_event(
1815-
self, event_type: int, days_offset: float, user: Optional[UserProfile] = None
1815+
self, event_type: int, days_offset: float, user: UserProfile | None = None
18161816
) -> None:
18171817
hours_offset = int(24 * days_offset)
18181818
if user is None:
@@ -1984,7 +1984,7 @@ def setUp(self) -> None:
19841984
self.stat = COUNT_STATS["realm_active_humans::day"]
19851985
self.current_property = self.stat.property
19861986

1987-
def mark_15day_active(self, user: UserProfile, end_time: Optional[datetime] = None) -> None:
1987+
def mark_15day_active(self, user: UserProfile, end_time: datetime | None = None) -> None:
19881988
if end_time is None:
19891989
end_time = self.TIME_ZERO
19901990
UserCount.objects.create(

analytics/tests/test_stats_views.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from datetime import datetime, timedelta, timezone
2-
from typing import Optional
32

43
from django.utils.timezone import now as timezone_now
54
from typing_extensions import override
@@ -88,7 +87,7 @@ def data(self, i: int) -> list[int]:
8887
return [0, 0, i, 0]
8988

9089
def insert_data(
91-
self, stat: CountStat, realm_subgroups: list[Optional[str]], user_subgroups: list[str]
90+
self, stat: CountStat, realm_subgroups: list[str | None], user_subgroups: list[str]
9291
) -> None:
9392
if stat.frequency == CountStat.HOUR:
9493
insert_time = self.end_times_hour[2]

analytics/urls.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from typing import Union
2-
31
from django.conf import settings
42
from django.conf.urls import include
53
from django.urls import path
@@ -16,7 +14,7 @@
1614
)
1715
from zerver.lib.rest import rest_path
1816

19-
i18n_urlpatterns: list[Union[URLPattern, URLResolver]] = [
17+
i18n_urlpatterns: list[URLPattern | URLResolver] = [
2018
# Server admin (user_profile.is_staff) visible stats pages
2119
path("stats/realm/<realm_str>/", stats_for_realm),
2220
path("stats/installation", stats_for_installation),

0 commit comments

Comments
 (0)