Skip to content

Commit bb5cd78

Browse files
committed
Wrap raw response with data key and provide the headers
1 parent bf8ab3a commit bb5cd78

File tree

5 files changed

+6229
-6100
lines changed

5 files changed

+6229
-6100
lines changed

src/sentry/scm/private/providers/github.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,7 @@ def get_pull_request_diff(
712712
return {
713713
"data": response.text,
714714
"type": "github",
715-
"raw": response.text,
715+
"raw": {"data": response.text, "headers": response.headers},
716716
"meta": _extract_response_meta(response),
717717
}
718718

@@ -933,7 +933,7 @@ def get_archive_link(
933933
return {
934934
"data": ArchiveLink(url=response.headers["Location"], headers={}),
935935
"type": "github",
936-
"raw": response.headers["Location"],
936+
"raw": {"data": response.headers["Location"], "headers": response.headers},
937937
"meta": _extract_response_meta(response),
938938
}
939939

@@ -1125,7 +1125,7 @@ def map_action[T](
11251125
return {
11261126
"data": fn(raw),
11271127
"type": "github",
1128-
"raw": raw,
1128+
"raw": {"data": raw, "headers": response.headers},
11291129
"meta": _extract_response_meta(response),
11301130
}
11311131

@@ -1143,6 +1143,6 @@ def map_paginated_action[T](
11431143
return {
11441144
"data": fn(raw),
11451145
"type": "github",
1146-
"raw": raw,
1146+
"raw": {"data": raw, "headers": response.headers},
11471147
"meta": meta,
11481148
}

src/sentry/scm/private/providers/gitlab.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ def get_tree(
354354
truncated=False,
355355
),
356356
type="gitlab",
357-
raw=raw,
357+
raw={"data": raw, "headers": None},
358358
meta={},
359359
)
360360

@@ -390,7 +390,7 @@ def get_archive_link(
390390
return ActionResult(
391391
data=data,
392392
type="gitlab",
393-
raw=url,
393+
raw={"data": url, "headers": None},
394394
meta={},
395395
)
396396

@@ -597,7 +597,7 @@ def make_paginated_result[T](
597597
return PaginatedActionResult(
598598
data=[map_item(item) for item in raw_items],
599599
type="gitlab",
600-
raw=raw,
600+
raw={"data": raw, "headers": None},
601601
# No actual pagination for now
602602
meta=PaginatedResponseMeta(next_cursor=None),
603603
)
@@ -615,7 +615,7 @@ def make_result[T](
615615
return ActionResult(
616616
data=map_item(raw_item),
617617
type="gitlab",
618-
raw=raw,
618+
raw={"data": raw, "headers": None},
619619
meta={},
620620
)
621621

src/sentry/scm/types.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from dataclasses import dataclass
22
from datetime import datetime
3-
from typing import Any, Literal, Protocol, Required, TypedDict, runtime_checkable
3+
from typing import Any, Literal, MutableMapping, Protocol, Required, TypedDict, runtime_checkable
44

55
type Action = Literal["check_run", "comment", "pull_request"]
66
type EventType = "CheckRunEvent" | "CommentEvent" | "PullRequestEvent"
@@ -217,6 +217,11 @@ class PullRequest(TypedDict):
217217
base: PullRequestBranch
218218

219219

220+
class RawResult(TypedDict):
221+
headers: MutableMapping[str, str] | None
222+
data: Any
223+
224+
220225
class ActionResult[T](TypedDict):
221226
"""Wraps a provider response with metadata and the original API payload.
222227
@@ -230,7 +235,7 @@ class ActionResult[T](TypedDict):
230235

231236
data: T
232237
type: ProviderName
233-
raw: Any
238+
raw: RawResult
234239
meta: ResponseMeta
235240

236241

@@ -244,7 +249,7 @@ class PaginatedActionResult[T](TypedDict):
244249

245250
data: list[T]
246251
type: ProviderName
247-
raw: Any
252+
raw: RawResult
248253
meta: PaginatedResponseMeta
249254

250255

tests/sentry/scm/unit/test_github_provider.py

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -178,26 +178,6 @@ def make_provider(client: RecordingClient | None = None) -> tuple[GitHubProvider
178178
return provider, transport
179179

180180

181-
def assert_action_result(result: Any, *, expected_data: Any, raw: Any) -> None:
182-
assert result["type"] == "github"
183-
assert result["raw"] == raw
184-
assert result["data"] == expected_data
185-
assert result["meta"] == {}
186-
187-
188-
def assert_paginated_result(
189-
result: Any,
190-
*,
191-
expected_data: Any,
192-
raw: Any,
193-
next_cursor: str,
194-
) -> None:
195-
assert result["type"] == "github"
196-
assert result["raw"] == raw
197-
assert result["data"] == expected_data
198-
assert result["meta"] == {"next_cursor": next_cursor}
199-
200-
201181
def expected_comment(raw: dict[str, Any]) -> dict[str, Any]:
202182
return {
203183
"id": str(raw["id"]),
@@ -857,12 +837,11 @@ def test_paginated_methods(case: dict[str, Any]) -> None:
857837

858838
result = getattr(provider, case["name"])(**case["kwargs"])
859839

860-
assert_paginated_result(
861-
result,
862-
expected_data=case["expected_data"],
863-
raw=case["raw"],
864-
next_cursor=case["next_cursor"],
865-
)
840+
assert result["type"] == "github"
841+
assert result["raw"] == {"data": case["raw"], "headers": {}}
842+
assert result["data"] == case["expected_data"]
843+
assert result["meta"] == {"next_cursor": case["next_cursor"]}
844+
866845
assert client.calls == [
867846
{
868847
"operation": "get",
@@ -885,7 +864,11 @@ def test_action_methods(case: dict[str, Any]) -> None:
885864

886865
result = getattr(provider, case["name"])(**case["kwargs"])
887866

888-
assert_action_result(result, expected_data=case["expected_data"], raw=case["raw"])
867+
assert result["type"] == "github"
868+
assert result["raw"] == {"data": case["raw"], "headers": case.get("headers", {})}
869+
assert result["data"] == case["expected_data"]
870+
assert result["meta"] == {}
871+
889872
expected_call = {"operation": case["operation"], "path": case["path"]}
890873
if "data" in case:
891874
expected_call["data"] = case["data"]
@@ -916,7 +899,13 @@ def test_get_pull_request_diff_uses_raw_request_and_extracts_meta() -> None:
916899
result = provider.get_pull_request_diff("42")
917900

918901
assert result["type"] == "github"
919-
assert result["raw"] == "diff --git a/f.py b/f.py"
902+
assert result["raw"] == {
903+
"data": "diff --git a/f.py b/f.py",
904+
"headers": {
905+
"ETag": '"etag-123"',
906+
"Last-Modified": "Tue, 04 Feb 2026 10:00:00 GMT",
907+
},
908+
}
920909
assert result["data"] == "diff --git a/f.py b/f.py"
921910
assert result["meta"]["etag"] == '"etag-123"'
922911
assert result["meta"]["last_modified"].isoformat() == "2026-02-04T10:00:00+00:00"

0 commit comments

Comments
 (0)