feat: file mobile issues without an owner (Closes #855)
This commit is contained in:
1 parent
fc35b17d24
commit
ed246ce6dd
12 files changed
+275
-63
No files matched your search
+6
-3
@@ -1469,12 +1469,14 @@ async def create_issue(
|
||||
repository: str,
|
||||
title: str,
|
||||
body: str,
|
||||
assignee: str,
|
||||
assignee: str | None,
|
||||
label_ids: list[int] | None = None,
|
||||
milestone_id: int | None = None,
|
||||
due_date: str | None = None,
|
||||
) -> dict:
|
||||
payload: dict = {"title": title, "body": body, "assignee": assignee}
|
||||
payload: dict = {"title": title, "body": body}
|
||||
if assignee is not None:
|
||||
payload["assignee"] = assignee
|
||||
if label_ids:
|
||||
payload["labels"] = label_ids
|
||||
if milestone_id is not None:
|
||||
@@ -1497,7 +1499,8 @@ async def create_issue(
|
||||
for item in assignees
|
||||
if isinstance(item, dict) and isinstance(item.get("login"), str)
|
||||
]
|
||||
if confirmed_assignees != [assignee]:
|
||||
expected_assignees = [assignee] if assignee is not None else []
|
||||
if confirmed_assignees != expected_assignees:
|
||||
raise ValueError(
|
||||
"Gitea did not confirm self-assignment or exact issue assignment"
|
||||
)
|
||||
|
||||
+10
-2
@@ -742,6 +742,7 @@ def _validate_binary_attachment(filename: str, content_type: str, content: bytes
|
||||
class IssueCreation(BaseModel):
|
||||
title: str = Field(min_length=1, max_length=255)
|
||||
body: str = Field(default="", max_length=10_000)
|
||||
unassigned: bool = False
|
||||
assignee: str | None = Field(
|
||||
default=None, pattern=r"^[A-Za-z0-9_.-]+$", max_length=255
|
||||
)
|
||||
@@ -766,6 +767,12 @@ class IssueCreation(BaseModel):
|
||||
def strip_issue_body(cls, value: str) -> str:
|
||||
return value.strip()
|
||||
|
||||
@model_validator(mode="after")
|
||||
def require_one_owner_intent(self):
|
||||
if self.unassigned and self.assignee is not None:
|
||||
raise ValueError("assignee and unassigned cannot be requested together")
|
||||
return self
|
||||
|
||||
@field_validator("due_date")
|
||||
@classmethod
|
||||
def validate_due_date(cls, value: str | None) -> str | None:
|
||||
@@ -4717,8 +4724,8 @@ async def create_assigned_issue(
|
||||
login = user.get("login") if isinstance(user, dict) else None
|
||||
if not login or accessible is None:
|
||||
raise HTTPException(status_code=404, detail="Repository not found")
|
||||
assignee = login
|
||||
if creation.assignee and creation.assignee != login:
|
||||
assignee = None if creation.unassigned else login
|
||||
if not creation.unassigned and creation.assignee and creation.assignee != login:
|
||||
eligible = {
|
||||
item["login"]
|
||||
for item in await gitea_proxy.issue_handoff_candidates(repository)
|
||||
@@ -4772,6 +4779,7 @@ async def create_assigned_issue(
|
||||
creation.title,
|
||||
creation.body,
|
||||
creation.assignee,
|
||||
creation.unassigned,
|
||||
tuple(creation.label_ids),
|
||||
creation.milestone_id,
|
||||
creation.due_date,
|
||||
|
||||
Reference in new issue
Block a user