Skip to content

Commit fb6cbe0

Browse files
authored
Merge 9152b4a into c02eef4
2 parents c02eef4 + 9152b4a commit fb6cbe0

File tree

3 files changed

+38
-82
lines changed

3 files changed

+38
-82
lines changed

src/sentry/hybridcloud/tasks/deliver_webhooks.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,6 @@ def perform_region_request(region: Region, payload: WebhookPayload) -> None:
608608
"region",
609609
{
610610
"name": region.name,
611-
"id": region.category,
612611
"address": region.address,
613612
},
614613
)

src/sentry/testutils/region.py

Lines changed: 29 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,128 +1,78 @@
11
from __future__ import annotations
22

3-
from collections.abc import Collection, Generator, Iterable, Sequence
3+
from collections.abc import Collection, Generator, Sequence
44
from contextlib import contextmanager
5-
from dataclasses import dataclass
65

76
from django.test import override_settings
87

98
from sentry.types.region import Locality, Region, RegionDirectory, get_global_directory
109

1110

12-
@dataclass(frozen=True)
13-
class _TemporaryRegionDirectoryState:
14-
regions: frozenset[Region]
15-
default_region: Region
16-
17-
1811
class TestEnvRegionDirectory(RegionDirectory):
1912
__test__ = False
2013

2114
def __init__(self, regions: Collection[Region]) -> None:
22-
super().__init__(regions, self.localities_from_regions(regions))
23-
self._tmp_state = _TemporaryRegionDirectoryState(
24-
regions=super().regions, default_region=next(iter(regions))
25-
)
15+
super().__init__(regions, frozenset())
16+
self._apply_regions(regions)
2617

27-
def localities_from_regions(self, regions: Collection[Region]) -> frozenset[Locality]:
28-
return frozenset(
29-
Locality(name=cell.name, cells=frozenset([cell.name]), category=cell.category)
30-
for cell in regions
18+
def _apply_regions(self, regions: Collection[Region]) -> None:
19+
localities = frozenset(
20+
Locality(name=r.name, cells=frozenset([r.name]), category=r.category, visible=r.visible)
21+
for r in regions
3122
)
23+
self._cells = frozenset(regions)
24+
self._by_name = {r.name: r for r in self._cells}
25+
self._localities = localities
26+
self._localities_by_name = {loc.name: loc for loc in localities}
27+
self._cell_to_locality = {cell_name: loc for loc in localities for cell_name in loc.cells}
3228

3329
@contextmanager
3430
def swap_state(
3531
self,
3632
regions: Sequence[Region],
3733
local_region: Region | None = None,
3834
) -> Generator[None]:
39-
monolith_region = regions[0]
40-
new_regions = self.regions if regions is None else frozenset(regions)
41-
new_state = _TemporaryRegionDirectoryState(
42-
regions=new_regions,
43-
default_region=local_region or monolith_region,
35+
prev_state = (
36+
self._cells,
37+
self._by_name,
38+
self._localities,
39+
self._localities_by_name,
40+
self._cell_to_locality,
4441
)
45-
46-
old_state = self._tmp_state
4742
try:
48-
self._tmp_state = new_state
49-
43+
self._apply_regions(regions)
44+
monolith_region = regions[0]
5045
with override_settings(SENTRY_MONOLITH_REGION=monolith_region.name):
5146
if local_region:
5247
with override_settings(SENTRY_REGION=local_region.name):
5348
yield
5449
else:
5550
yield
5651
finally:
57-
self._tmp_state = old_state
52+
(
53+
self._cells,
54+
self._by_name,
55+
self._localities,
56+
self._localities_by_name,
57+
self._cell_to_locality,
58+
) = prev_state
5859

5960
@contextmanager
6061
def swap_to_default_region(self) -> Generator[None]:
6162
"""Swap to an arbitrary region when entering region mode."""
62-
with override_settings(SENTRY_REGION=self._tmp_state.default_region.name):
63+
region = next(iter(self._cells))
64+
with override_settings(SENTRY_REGION=region.name):
6365
yield
6466

6567
@contextmanager
6668
def swap_to_region_by_name(self, region_name: str) -> Generator[None]:
6769
"""Swap to the specified region when entering region mode."""
68-
6970
region = self.get_cell_by_name(region_name)
7071
if region is None:
7172
raise Exception("specified swap region not found")
7273
with override_settings(SENTRY_REGION=region.name):
7374
yield
7475

75-
@property
76-
def regions(self) -> frozenset[Region]:
77-
return self._tmp_state.regions
78-
79-
@property
80-
def localities(self) -> frozenset[Locality]:
81-
return frozenset(
82-
Locality(
83-
name=r.name,
84-
cells=frozenset([r.name]),
85-
category=r.category,
86-
visible=r.visible,
87-
)
88-
for r in self._tmp_state.regions
89-
)
90-
91-
def get_cell_by_name(self, region_name: str) -> Region | None:
92-
match = (r for r in self._tmp_state.regions if r.name == region_name)
93-
try:
94-
return next(match)
95-
except StopIteration:
96-
return None
97-
98-
def get_locality_by_name(self, locality_name: str) -> Locality | None:
99-
region = self.get_cell_by_name(locality_name)
100-
if region is None:
101-
return None
102-
return Locality(
103-
name=locality_name,
104-
cells=frozenset([locality_name]),
105-
category=region.category,
106-
visible=region.visible,
107-
)
108-
109-
def get_locality_for_cell(self, cell_name: str) -> Locality | None:
110-
region = self.get_cell_by_name(cell_name)
111-
if region is None:
112-
return None
113-
return Locality(
114-
name=cell_name,
115-
cells=frozenset([cell_name]),
116-
category=region.category,
117-
visible=region.visible,
118-
)
119-
120-
def get_cells_for_locality(self, locality_name: str) -> Iterable[Region]:
121-
region = self.get_cell_by_name(locality_name)
122-
if region is None:
123-
return ()
124-
return (region,)
125-
12676

12777
def get_test_env_directory() -> TestEnvRegionDirectory:
12878
directory = get_global_directory()

src/sentry/types/region.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,17 @@ def get_locality_by_name(self, locality_name: str) -> Locality | None:
167167
return self._localities_by_name.get(locality_name)
168168

169169
def get_cells(self, category: RegionCategory | None = None) -> Iterable[Region]:
170-
return (r for r in self.regions if (category is None or r.category == category))
170+
if category is None:
171+
return iter(self.regions)
172+
173+
return (
174+
r
175+
for r in self.regions
176+
if (loc := self._cell_to_locality.get(r.name)) is not None and loc.category == category
177+
)
171178

172179
def get_cell_names(self, category: RegionCategory | None = None) -> Iterable[str]:
173-
return (r.name for r in self.regions if (category is None or r.category == category))
180+
return (r.name for r in self.get_cells(category))
174181

175182
def get_locality_for_cell(self, cell_name: str) -> Locality | None:
176183
return self._cell_to_locality.get(cell_name)

0 commit comments

Comments
 (0)