Merge pull request 'fix: tolerate null labels/assignees/user in get_issue (#13)' (#23) from fix/get-issue-none-iterable into dev
docker / test (push) Successful in 29s
docker / lint (push) Successful in 36s
test / test (push) Successful in 36s
lint / lint (push) Successful in 36s
docker / docker-test (push) Successful in 7s
docker / docker-publish (push) Successful in 5s

Reviewed-on: #23
This commit was merged in pull request #23.
This commit is contained in:
2026-06-22 12:50:08 +00:00
2 changed files with 31 additions and 3 deletions
+3 -3
View File
@@ -272,9 +272,9 @@ async def get_issue_tool(gitea: GiteaClient, arguments: dict[str, Any]) -> dict[
"title": limit_text(str(issue.get("title", ""))),
"body": limit_text(str(issue.get("body", ""))),
"state": issue.get("state", ""),
"author": issue.get("user", {}).get("login", ""),
"labels": [label.get("name", "") for label in issue.get("labels", [])],
"assignees": [assignee.get("login", "") for assignee in issue.get("assignees", [])],
"author": (issue.get("user") or {}).get("login", ""),
"labels": [label.get("name", "") for label in (issue.get("labels") or [])],
"assignees": [assignee.get("login", "") for assignee in (issue.get("assignees") or [])],
"created_at": issue.get("created_at", ""),
"updated_at": issue.get("updated_at", ""),
"url": issue.get("html_url", ""),
+28
View File
@@ -265,6 +265,34 @@ async def test_extended_read_tools_failure_mode() -> None:
await list_commits_tool(ErrorGitea(), {"owner": "acme", "repo": "app"})
@pytest.mark.asyncio
async def test_get_issue_tolerates_null_collections() -> None:
"""Regression for #13: Gitea may return null for labels/assignees/user.
`.get(key, [])` returns None when the key is present with a null value, so
iterating the result raised `'NoneType' object is not iterable`.
"""
class NullFieldsGitea(StubGitea):
async def get_issue(self, owner, repo, index):
return {
"number": index,
"title": "Issue",
"body": "Body",
"state": "open",
"user": None,
"labels": None,
"assignees": None,
}
result = await get_issue_tool(
NullFieldsGitea(), {"owner": "acme", "repo": "app", "issue_number": 1}
)
assert result["author"] == ""
assert result["labels"] == []
assert result["assignees"] == []
@pytest.mark.asyncio
@pytest.mark.parametrize(
"tool,args,expected_key",