Skip to content

Commit e643f71

Browse files
authored
stacks: add revision data to API response (bug 1835678) (#320)
- add Lando revision data to API response - add serialize method to Revision class
1 parent e84e171 commit e643f71

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

landoapi/api/stacks.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from flask import current_app
99
from landoapi.commit_message import format_commit_message
1010
from landoapi.decorators import require_phabricator_api_key
11+
from landoapi.models.revisions import Revision
1112
from landoapi.phabricator import PhabricatorClient
1213
from landoapi.projects import (
1314
get_release_managers,
@@ -116,19 +117,25 @@ def get(phab: PhabricatorClient, revision_id: str):
116117
}
117118

118119
revisions_response = []
119-
for revision_phid, revision in stack_data.revisions.items():
120-
fields = PhabricatorClient.expect(revision, "fields")
120+
for _phid, phab_revision in stack_data.revisions.items():
121+
lando_revision = Revision.query.filter(
122+
Revision.revision_id == phab_revision["id"]
123+
).one_or_none()
124+
revision_phid = PhabricatorClient.expect(phab_revision, "phid")
125+
fields = PhabricatorClient.expect(phab_revision, "fields")
121126
diff_phid = PhabricatorClient.expect(fields, "diffPHID")
122127
repo_phid = PhabricatorClient.expect(fields, "repositoryPHID")
123128
diff = stack_data.diffs[diff_phid]
124-
human_revision_id = "D{}".format(PhabricatorClient.expect(revision, "id"))
129+
human_revision_id = "D{}".format(PhabricatorClient.expect(phab_revision, "id"))
125130
revision_url = urllib.parse.urljoin(
126131
current_app.config["PHABRICATOR_URL"], human_revision_id
127132
)
128-
secure = revision_is_secure(revision, secure_project_phid)
129-
commit_description = find_title_and_summary_for_display(phab, revision, secure)
130-
bug_id = get_bugzilla_bug(revision)
131-
reviewers = get_collated_reviewers(revision)
133+
secure = revision_is_secure(phab_revision, secure_project_phid)
134+
commit_description = find_title_and_summary_for_display(
135+
phab, phab_revision, secure
136+
)
137+
bug_id = get_bugzilla_bug(phab_revision)
138+
reviewers = get_collated_reviewers(phab_revision)
132139
accepted_reviewers = reviewers_for_commit_message(
133140
reviewers, users, projects, sec_approval_project_phid
134141
)
@@ -163,16 +170,16 @@ def get(phab: PhabricatorClient, revision_id: str):
163170
{
164171
"id": human_revision_id,
165172
"phid": revision_phid,
166-
"status": serialize_status(revision),
173+
"status": serialize_status(phab_revision),
167174
"blocked_reason": blocked.get(revision_phid, ""),
168175
"bug_id": bug_id,
169176
"title": commit_description.title,
170177
"url": revision_url,
171178
"date_created": PhabricatorClient.to_datetime(
172-
PhabricatorClient.expect(revision, "fields", "dateCreated")
179+
PhabricatorClient.expect(phab_revision, "fields", "dateCreated")
173180
).isoformat(),
174181
"date_modified": PhabricatorClient.to_datetime(
175-
PhabricatorClient.expect(revision, "fields", "dateModified")
182+
PhabricatorClient.expect(phab_revision, "fields", "dateModified")
176183
).isoformat(),
177184
"summary": commit_description.summary,
178185
"commit_message_title": commit_message_title,
@@ -183,6 +190,9 @@ def get(phab: PhabricatorClient, revision_id: str):
183190
"reviewers": serialize_reviewers(reviewers, users, projects, diff_phid),
184191
"is_secure": secure,
185192
"is_using_secure_commit_message": commit_description.sanitized,
193+
"lando_revision": lando_revision.serialize()
194+
if lando_revision
195+
else None,
186196
}
187197
)
188198

landoapi/models/revisions.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
from __future__ import annotations
1313

14+
from typing import Any
15+
1416
import enum
1517
import logging
1618

@@ -86,6 +88,16 @@ def set_patch(self, raw_diff: bytes, patch_data: dict[str, str]):
8688
patch = build_patch_for_revision(raw_diff, **self.patch_data)
8789
self.patch_bytes = patch.encode("utf-8")
8890

91+
def serialize(self) -> dict[str, Any]:
92+
return {
93+
"id": self.id,
94+
"revision_id": self.revision_id,
95+
"diff_id": self.diff_id,
96+
"landing_jobs": [job.id for job in self.landing_jobs],
97+
"created_at": self.created_at,
98+
"updated_at": self.updated_at,
99+
}
100+
89101

90102
class DiffWarning(Base):
91103
"""Represents a warning message associated with a particular diff and revision."""

0 commit comments

Comments
 (0)