MCPcopy Create free account
hub / github.com/apache/arrow / GitHubIssue

Class GitHubIssue

dev/merge_arrow_pr.py:126–192  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

124
125
126class GitHubIssue(object):
127
128 def __init__(self, github_api, github_id, cmd):
129 self.github_api = github_api
130 self.github_id = github_id
131 self.cmd = cmd
132
133 try:
134 self.issue = self.github_api.get_issue_data(github_id)
135 except Exception as e:
136 self.cmd.fail("GitHub could not find %s\n%s" % (github_id, e))
137
138 def get_label(self, prefix):
139 prefix = f"{prefix}:"
140 return [
141 lbl["name"][len(prefix):].strip()
142 for lbl in self.issue["labels"] if lbl["name"].startswith(prefix)
143 ]
144
145 @property
146 def components(self):
147 return self.get_label("Component")
148
149 @property
150 def assignees(self):
151 return [a["login"] for a in self.issue["assignees"]]
152
153 @property
154 def current_fix_versions(self):
155 try:
156 return self.issue.get("milestone", {}).get("title")
157 except AttributeError:
158 pass
159
160 @property
161 def current_versions(self):
162 all_versions = self.github_api.get_milestones()
163
164 unreleased_versions = [x for x in all_versions if x["state"] == "open"]
165 unreleased_versions = [x["title"] for x in unreleased_versions]
166
167 return unreleased_versions
168
169 def resolve(self, fix_version, comment, pr_body):
170 cur_status = self.issue["state"]
171
172 if cur_status == "closed":
173 self.cmd.fail("GitHub issue %s already has status '%s'"
174 % (self.github_id, cur_status))
175
176 if DEBUG:
177 print("GitHub issue %s untouched -> %s" %
178 (self.github_id, fix_version))
179 else:
180 self.github_api.assign_milestone(self.github_id, fix_version)
181 if f"Closes: #{self.github_id}" not in pr_body:
182 self.github_api.close_issue(self.github_id, comment)
183 print("Successfully resolved %s!" % (self.github_id))

Callers 1

_get_issueMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected