Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 52 additions & 4 deletions plat/gitea.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,25 @@ def __init__(self, type, json):
self._set_attr_from_json('tgt_rev', json, 'base.sha')


class Review:
attributes = ["by", "state", "type", "when"]

states_mapping = {
"APPROVED": "accepted",
"REQUEST_CHANGES": "declined",
"REQUEST_REVIEW": "new",
}

def __init__(self, **kwargs):
self._review_data = kwargs

def __getattr__(self, attribute):
if attribute == "state":
return self.states_mapping[self._review_data.get("state", "REQUEST_REVIEW")]

return self._review_data.get(attribute, None)


class Request:
"""Request structure implemented for Gitea"""
def __init__(self):
Expand All @@ -182,6 +201,25 @@ def parse_request_id(reqid):
def construct_request_id(owner, repo, pr_id):
return f'{owner}:{repo}:{pr_id}'

@staticmethod
def format_review(review):
if review.get("user") is not None:
return Review(
by=review["user"]["login"],
state=review["state"],
type="User",
when=review["updated_at"]
)
elif review.get("team") is not None:
return Review(
by=review["team"]["name"],
state=review["state"],
type="Group",
when=review["updated_at"]
)
else:
raise Exception("Unknown review type")

def _init_attributes(self):
self.reqid = None
self.creator = ''
Expand All @@ -197,11 +235,12 @@ def _init_attributes(self):
self._issues = None

# Gitea specific attributes
self._labels = set()
self._owner = None
self._repo = None
self._pr_id = None

def read(self, json, owner, repo):
def read(self, json, owner, repo, reviews_json=None):
"""Read in a request from JSON response"""
self._init_attributes()

Expand All @@ -219,8 +258,15 @@ def read(self, json, owner, repo):

self.actions = [RequestAction(type="submit", json=json)]

if json.get("merged"):
self.accept_at = json["merged_at"]
if reviews_json is not None:
if json.get("merged"):
self.accept_at = json["merged_at"]

for review in reviews_json:
if not review.get("dismissed", False):
self.reviews.append(Request.format_review(review))

self._labels = {x["name"] for x in json["labels"]}


class ProjectConfig:
Expand Down Expand Up @@ -256,8 +302,10 @@ def get_path(self, *args):
def _get_request(self, pr_id, owner, repo):
res = self.api.get(f'repos/{owner}/{repo}/pulls/{pr_id}').json()

reviews = self.api.get(f'repos/{owner}/{repo}/pulls/{pr_id}/reviews').json()

ret = Request()
ret.read(res, owner=owner, repo=repo)
ret.read(res, owner=owner, repo=repo, reviews_json=reviews)
return ret

def get_request(self, request_id, with_full_history=False):
Expand Down
Loading