Skip to content

Commit e53bf92

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

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-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: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,16 @@ def set_patch(self, raw_diff: bytes, patch_data: dict[str, str]):
8686
patch = build_patch_for_revision(raw_diff, **self.patch_data)
8787
self.patch_bytes = patch.encode("utf-8")
8888

89+
def serialize(self):
90+
return {
91+
"id": self.id,
92+
"revision_id": self.revision_id,
93+
"diff_id": self.diff_id,
94+
"landing_jobs": [job.id for job in self.landing_jobs],
95+
"created_at": self.created_at,
96+
"updated_at": self.updated_at,
97+
}
98+
8999

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

0 commit comments

Comments
 (0)