1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-08-21 14:08:52 +02:00
Files
github.com_openSUSE_osc/osc/gitea_api/pr_review.py

136 lines
3.7 KiB
Python

from typing import List
from typing import Optional
from .common import GiteaModel
from .common import dt_sanitize
from .connection import Connection
from .user import User
class PullRequestReview(GiteaModel):
@property
def commit(self) -> str:
return self._data["commit_id"]
@property
def state(self) -> str:
return self._data["state"]
@property
def dismissed(self) -> str:
return self._data["dismissed"]
@property
def user(self) -> Optional[str]:
if not self._data["user"]:
return None
return self._data["user"]["login"]
@property
def user_obj(self) -> Optional[str]:
if not self._data["user"]:
return None
return User(self._data["user"])
@property
def team(self) -> Optional[str]:
if not self._data["team"]:
return None
return self._data["team"]["name"]
@property
def who(self) -> str:
return self.user if self.user else f"@{self.team}"
@property
def who_login_full_name_email(self) -> str:
return self.user_obj.login_full_name_email if self.user_obj else f"@{self.team}"
@property
def created_at(self) -> str:
return self._data["submitted_at"]
@property
def updated_at(self) -> str:
return self._data["updated_at"]
@property
def created_updated_str(self) -> str:
result = dt_sanitize(self.created_at)
if self.updated_at and self.updated_at != self.created_at:
result += f" (updated: {dt_sanitize(self.updated_at)})"
return result
@property
def body(self) -> str:
return self._data["body"]
@property
def pr_owner(self) -> str:
from .pr import PullRequest
return PullRequest.get_owner_repo_number(self._data["pull_request_url"])[0]
@property
def pr_repo(self) -> str:
from .pr import PullRequest
return PullRequest.get_owner_repo_number(self._data["pull_request_url"])[1]
@property
def pr_number(self) -> int:
from .pr import PullRequest
return PullRequest.get_owner_repo_number(self._data["pull_request_url"])[2]
@property
def comments_count(self) -> int:
return self._data["comments_count"]
@classmethod
def get(
cls,
conn: Connection,
owner: str,
repo: str,
number: int,
review_id: int
) -> "PullRequestReview":
"""
Get a review associated with a pull request.
:param conn: Gitea ``Connection`` instance.
:param owner: Owner of the repo.
:param repo: Name of the repo.
:param number: Number of the pull request in owner/repo.
:param review_id: ID of the review.
"""
url = conn.makeurl("repos", owner, repo, "pulls", str(number), "reviews", review_id)
response = conn.request("GET", url, context={"owner": owner, "repo": repo, "number": number})
obj = cls(response.json(), response=response, conn=conn)
return obj
@classmethod
def list(
cls,
conn: Connection,
owner: str,
repo: str,
number: int,
) -> List["PullRequestReview"]:
"""
List reviews associated with a pull request.
:param conn: Gitea ``Connection`` instance.
:param owner: Owner of the repo.
:param repo: Name of the repo.
:param number: Number of the pull request in owner/repo.
"""
q = {
"limit": -1,
}
url = conn.makeurl("repos", owner, repo, "pulls", str(number), "reviews", query=q)
response = conn.request("GET", url)
obj_list = [cls(i, response=response, conn=conn) for i in response.json()]
return obj_list