Skip to content

Commit da7313c

Browse files
ref: fix types for sentry.api.base
1 parent e07587f commit da7313c

File tree

15 files changed

+50
-41
lines changed

15 files changed

+50
-41
lines changed

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ ignore_missing_imports = true
111111
# - python3 -m tools.mypy_helpers.find_easiest_modules
112112
[[tool.mypy.overrides]]
113113
module = [
114-
"sentry.api.base",
115114
"sentry.api.endpoints.group_integration_details",
116115
"sentry.api.endpoints.organization_events_meta",
117116
"sentry.api.endpoints.organization_events_spans_performance",

src/sentry/api/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ def dispatch(self, request: Request, *args, **kwargs) -> Response:
401401
self.initial(request, *args, **kwargs)
402402

403403
# Get the appropriate handler method
404+
assert request.method is not None
404405
method = request.method.lower()
405406
if method in self.http_method_names and hasattr(self, method):
406407
handler = getattr(self, method)
@@ -445,6 +446,7 @@ def dispatch(self, request: Request, *args, **kwargs) -> Response:
445446

446447
# Only enforced in dev environment
447448
if settings.ENFORCE_PAGINATION:
449+
assert request.method is not None
448450
if request.method.lower() == "get":
449451
status = getattr(self.response, "status_code", 0)
450452
# Response can either be Response or HttpResponse, check if

src/sentry/auth/services/auth/model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class RpcAuthState(RpcModel):
5555

5656

5757
class AuthenticatedToken(RpcModel):
58-
allowed_origins: list[str] = Field(default_factory=list)
58+
allowed_origins: frozenset[str] = Field(default_factory=frozenset)
5959
audit_log_data: dict[str, Any] = Field(default_factory=dict)
6060
scopes: list[str] = Field(default_factory=list)
6161
entity_id: int | None = None
@@ -119,7 +119,7 @@ def from_token(cls, token: Any) -> Optional["AuthenticatedToken"]:
119119
def get_audit_log_data(self) -> Mapping[str, Any]:
120120
return self.audit_log_data
121121

122-
def get_allowed_origins(self) -> list[str]:
122+
def get_allowed_origins(self) -> frozenset[str]:
123123
return self.allowed_origins
124124

125125
def get_scopes(self) -> list[str]:

src/sentry/auth/system.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ def is_expired(self) -> bool:
8181
def user(self) -> AnonymousUser:
8282
return AnonymousUser()
8383

84-
def get_allowed_origins(self) -> list[str]:
85-
return []
84+
def get_allowed_origins(self) -> frozenset[str]:
85+
return frozenset()
8686

8787
def get_audit_log_data(self) -> dict[str, Any]:
8888
return {"label": "System", "key": "<system>", "scopes": -1}

src/sentry/hybridcloud/models/apikeyreplica.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ def entity_id(self) -> int:
4646
def is_active(self) -> bool:
4747
return self.status == ApiKeyStatus.ACTIVE
4848

49-
def get_allowed_origins(self) -> list[str]:
49+
def get_allowed_origins(self) -> frozenset[str]:
5050
if not self.allowed_origins:
51-
return []
52-
return list(filter(bool, self.allowed_origins.split("\n")))
51+
return frozenset()
52+
return frozenset(origin for origin in self.allowed_origins.splitlines() if origin)
5353

5454
def get_audit_log_data(self) -> dict[str, Any]:
5555
return {

src/sentry/hybridcloud/models/apitokenreplica.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ def is_expired(self) -> bool:
5151

5252
return timezone.now() >= self.expires_at
5353

54-
def get_allowed_origins(self) -> list[str]:
54+
def get_allowed_origins(self) -> frozenset[str]:
5555
if not self.allowed_origins:
56-
return []
57-
return [origin for origin in self.allowed_origins.split()]
56+
return frozenset()
57+
return frozenset(origin for origin in self.allowed_origins.split())
5858

5959
def get_audit_log_data(self) -> dict[str, Any]:
6060
return {"scopes": self.get_scopes()}

src/sentry/hybridcloud/models/orgauthtokenreplica.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ def entity_id(self) -> int:
4545
def get_audit_log_data(self) -> dict[str, Any]:
4646
return {"name": self.name, "scopes": self.get_scopes()}
4747

48-
def get_allowed_origins(self) -> list[str]:
49-
return []
48+
def get_allowed_origins(self) -> frozenset[str]:
49+
return frozenset()
5050

5151
def get_scopes(self) -> list[str]:
5252
return self.scope_list

src/sentry/models/apiapplication.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,10 @@ def is_valid_redirect_uri(self, value):
145145
def get_default_redirect_uri(self):
146146
return self.redirect_uris.split()[0]
147147

148-
def get_allowed_origins(self):
148+
def get_allowed_origins(self) -> frozenset[str]:
149149
if not self.allowed_origins:
150-
return []
151-
return [origin for origin in self.allowed_origins.split()]
150+
return frozenset()
151+
return frozenset(origin for origin in self.allowed_origins.split())
152152

153153
def get_redirect_uris(self):
154154
if not self.redirect_uris:

src/sentry/models/apikey.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ def save(self, *args, **kwargs):
7777
self.key = ApiKey.generate_api_key()
7878
super().save(*args, **kwargs)
7979

80-
def get_allowed_origins(self):
80+
def get_allowed_origins(self) -> frozenset[str]:
8181
if not self.allowed_origins:
82-
return []
83-
return list(filter(bool, self.allowed_origins.split("\n")))
82+
return frozenset()
83+
return frozenset(origin for origin in self.allowed_origins.split("\n") if origin)
8484

8585
def get_audit_log_data(self):
8686
return {

src/sentry/models/apitoken.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,10 +299,10 @@ def is_expired(self):
299299
def get_audit_log_data(self):
300300
return {"scopes": self.get_scopes()}
301301

302-
def get_allowed_origins(self):
302+
def get_allowed_origins(self) -> frozenset[str]:
303303
if self.application:
304304
return self.application.get_allowed_origins()
305-
return ()
305+
return frozenset()
306306

307307
def refresh(self, expires_at=None):
308308
if self.token_type == AuthTokenType.USER:

src/sentry/models/orgauthtoken.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ def __str__(self):
7373
def get_audit_log_data(self):
7474
return {"name": self.name, "scopes": self.get_scopes()}
7575

76-
def get_allowed_origins(self):
77-
return []
76+
def get_allowed_origins(self) -> frozenset[str]:
77+
return frozenset()
7878

7979
def get_scopes(self):
8080
return self.scope_list

src/sentry/models/projectkey.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ def get_endpoint(self) -> str:
310310

311311
return endpoint
312312

313-
def get_allowed_origins(self):
313+
def get_allowed_origins(self) -> frozenset[str]:
314314
from sentry.utils.http import get_origins
315315

316316
return get_origins(self.project)

tests/sentry/models/test_apiapplication.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,13 @@ def test_get_allowed_origins_space_separated(self):
4040
allowed_origins="http://example.com http://example2.com http://example.io",
4141
)
4242

43-
assert app.get_allowed_origins() == [
44-
"http://example.com",
45-
"http://example2.com",
46-
"http://example.io",
47-
]
43+
assert app.get_allowed_origins() == frozenset(
44+
(
45+
"http://example.com",
46+
"http://example2.com",
47+
"http://example.io",
48+
)
49+
)
4850

4951
def test_get_allowed_origins_newline_separated(self):
5052
app = ApiApplication.objects.create(
@@ -53,24 +55,26 @@ def test_get_allowed_origins_newline_separated(self):
5355
allowed_origins="http://example.com\nhttp://example2.com\nhttp://example.io",
5456
)
5557

56-
assert app.get_allowed_origins() == [
57-
"http://example.com",
58-
"http://example2.com",
59-
"http://example.io",
60-
]
58+
assert app.get_allowed_origins() == frozenset(
59+
(
60+
"http://example.com",
61+
"http://example2.com",
62+
"http://example.io",
63+
)
64+
)
6165

6266
def test_get_allowed_origins_none(self):
6367
app = ApiApplication.objects.create(
6468
name="origins_test",
6569
redirect_uris="http://example.com",
6670
)
6771

68-
assert app.get_allowed_origins() == []
72+
assert app.get_allowed_origins() == frozenset()
6973

7074
def test_get_allowed_origins_empty_string(self):
7175
app = ApiApplication.objects.create(name="origins_test", redirect_uris="")
7276

73-
assert app.get_allowed_origins() == []
77+
assert app.get_allowed_origins() == frozenset()
7478

7579
def test_get_redirect_uris_space_separated(self):
7680
app = ApiApplication.objects.create(

tests/sentry/sentry_apps/api/endpoints/test_sentry_app_details.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def _validate_updated_published_app(self, response):
130130
"clientId": self.published_app.application.client_id,
131131
"clientSecret": self.published_app.application.client_secret,
132132
"overview": self.published_app.overview,
133-
"allowedOrigins": [],
133+
"allowedOrigins": frozenset(),
134134
"schema": {},
135135
"owner": {"id": self.organization.id, "slug": self.organization.slug},
136136
"featureData": [
@@ -687,7 +687,9 @@ def test_set_allowed_origins(self):
687687
allowedOrigins=["google.com", "sentry.io"],
688688
status_code=200,
689689
)
690-
assert self.published_app.application.get_allowed_origins() == ["google.com", "sentry.io"]
690+
assert self.published_app.application.get_allowed_origins() == frozenset(
691+
("google.com", "sentry.io")
692+
)
691693

692694
def test_allowed_origins_with_star(self):
693695
response = self.get_error_response(

tests/sentry/sentry_apps/api/endpoints/test_sentry_apps.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,9 @@ def test_create_integration_with_allowed_origins(self):
730730
)
731731
sentry_app = SentryApp.objects.get(slug=response.data["slug"])
732732
assert sentry_app.application is not None
733-
assert sentry_app.application.get_allowed_origins() == ["google.com", "example.com"]
733+
assert sentry_app.application.get_allowed_origins() == frozenset(
734+
("google.com", "example.com")
735+
)
734736

735737
def test_create_internal_integration_with_allowed_origins_and_test_route(self):
736738
self.create_project(organization=self.organization)
@@ -743,7 +745,7 @@ def test_create_internal_integration_with_allowed_origins_and_test_route(self):
743745
response = self.get_success_response(**data, status_code=201)
744746
sentry_app = SentryApp.objects.get(slug=response.data["slug"])
745747
assert sentry_app.application is not None
746-
assert sentry_app.application.get_allowed_origins() == ["example.com"]
748+
assert sentry_app.application.get_allowed_origins() == frozenset(("example.com",))
747749

748750
self.assert_sentry_app_status_code(sentry_app, status_code=200)
749751

@@ -754,7 +756,7 @@ def test_create_internal_integration_without_allowed_origins_and_test_route(self
754756
response = self.get_success_response(**data, status_code=201)
755757
sentry_app = SentryApp.objects.get(slug=response.data["slug"])
756758
assert sentry_app.application is not None
757-
assert sentry_app.application.get_allowed_origins() == []
759+
assert sentry_app.application.get_allowed_origins() == frozenset()
758760

759761
self.assert_sentry_app_status_code(sentry_app, status_code=400)
760762

0 commit comments

Comments
 (0)