Skip to content

Commit 9900396

Browse files
authored
Provide overload type hints for search_issues variants (#1861)
1 parent afbced5 commit 9900396

File tree

3 files changed

+39
-10
lines changed

3 files changed

+39
-10
lines changed

Diff for: examples/auth.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from __future__ import annotations
44

55
from collections import Counter
6-
from typing import cast
76

87
from jira import JIRA
98
from jira.client import ResultList
@@ -25,9 +24,7 @@
2524
props = jira.application_properties()
2625

2726
# Find all issues reported by the admin
28-
# Note: we cast() for mypy's benefit, as search_issues can also return the raw json !
29-
# This is if the following argument is used: `json_result=True`
30-
issues = cast(ResultList[Issue], jira.search_issues("assignee=admin"))
27+
issues: ResultList[Issue] = jira.search_issues("assignee=admin")
3128

3229
# Find the top three projects containing issues reported by admin
3330
top_three = Counter([issue.fields.project.key for issue in issues]).most_common(3)

Diff for: jira/client.py

+31
Original file line numberDiff line numberDiff line change
@@ -3480,6 +3480,22 @@ def resolution(self, id: str) -> Resolution:
34803480

34813481
# Search
34823482

3483+
@overload
3484+
def search_issues(
3485+
self,
3486+
jql_str: str,
3487+
startAt: int = 0,
3488+
maxResults: int = 50,
3489+
validate_query: bool = True,
3490+
fields: str | list[str] | None = "*all",
3491+
expand: str | None = None,
3492+
properties: str | None = None,
3493+
*,
3494+
json_result: Literal[False] = False,
3495+
use_post: bool = False,
3496+
) -> ResultList[Issue]: ...
3497+
3498+
@overload
34833499
def search_issues(
34843500
self,
34853501
jql_str: str,
@@ -3489,6 +3505,21 @@ def search_issues(
34893505
fields: str | list[str] | None = "*all",
34903506
expand: str | None = None,
34913507
properties: str | None = None,
3508+
*,
3509+
json_result: Literal[True],
3510+
use_post: bool = False,
3511+
) -> dict[str, Any]: ...
3512+
3513+
def search_issues(
3514+
self,
3515+
jql_str: str,
3516+
startAt: int = 0,
3517+
maxResults: int = 50,
3518+
validate_query: bool = True,
3519+
fields: str | list[str] | None = "*all",
3520+
expand: str | None = None,
3521+
properties: str | None = None,
3522+
*,
34923523
json_result: bool = False,
34933524
use_post: bool = False,
34943525
) -> dict[str, Any] | ResultList[Issue]:

Diff for: tests/tests.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
from parameterized import parameterized
2424

2525
from jira import JIRA, Issue, JIRAError
26-
from jira.client import ResultList
2726
from jira.resources import Dashboard, Resource, cls_for_resource
2827
from tests.conftest import JiraTestCase, allow_on_cloud, rndpassword
2928

@@ -231,19 +230,24 @@ def setUp(self):
231230

232231
def test_search_issues(self):
233232
issues = self.jira.search_issues(f"project={self.project_b}")
234-
issues = cast(ResultList[Issue], issues)
235233
self.assertLessEqual(len(issues), 50) # default maxResults
236234
for issue in issues:
237235
self.assertTrue(issue.key.startswith(self.project_b))
238236

237+
def test_search_issues_json(self):
238+
result = self.jira.search_issues(f"project={self.project_b}", json_result=True)
239+
issues = result["issues"]
240+
self.assertLessEqual(len(issues), 50) # default maxResults
241+
for issue in issues:
242+
self.assertTrue(issue["key"].startswith(self.project_b))
243+
239244
def test_search_issues_async(self):
240245
original_val = self.jira._options["async"]
241246
try:
242247
self.jira._options["async"] = True
243248
issues = self.jira.search_issues(
244249
f"project={self.project_b}", maxResults=False
245250
)
246-
issues = cast(ResultList[Issue], issues)
247251
self.assertEqual(len(issues), issues.total)
248252
for issue in issues:
249253
self.assertTrue(issue.key.startswith(self.project_b))
@@ -263,15 +267,13 @@ def test_search_issues_startat(self):
263267

264268
def test_search_issues_field_limiting(self):
265269
issues = self.jira.search_issues(f"key={self.issue}", fields="summary,comment")
266-
issues = cast(ResultList[Issue], issues)
267270
self.assertTrue(hasattr(issues[0].fields, "summary"))
268271
self.assertTrue(hasattr(issues[0].fields, "comment"))
269272
self.assertFalse(hasattr(issues[0].fields, "reporter"))
270273
self.assertFalse(hasattr(issues[0].fields, "progress"))
271274

272275
def test_search_issues_expand(self):
273276
issues = self.jira.search_issues(f"key={self.issue}", expand="changelog")
274-
issues = cast(ResultList[Issue], issues)
275277
# self.assertTrue(hasattr(issues[0], 'names'))
276278
self.assertEqual(len(issues), 1)
277279
self.assertFalse(hasattr(issues[0], "editmeta"))
@@ -283,7 +285,6 @@ def test_search_issues_use_post(self):
283285
with pytest.raises(JIRAError):
284286
self.jira.search_issues(long_jql)
285287
issues = self.jira.search_issues(long_jql, use_post=True)
286-
issues = cast(ResultList[Issue], issues)
287288
self.assertEqual(len(issues), 1)
288289
self.assertEqual(issues[0].key, self.issue)
289290

0 commit comments

Comments
 (0)