mirror of
https://github.com/openSUSE/osc.git
synced 2025-08-21 14:08:52 +02:00
136 lines
3.7 KiB
Python
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
|