@@ -1800,12 +1800,15 @@ def issue(
1800
1800
1801
1801
params = {}
1802
1802
if fields is not None :
1803
- params ["fields" ] = fields
1803
+ fields_list = self ._translate_fields_name_to_id (fields )
1804
+ params ["fields" ] = "," .join (fields_list )
1804
1805
if expand is not None :
1805
1806
params ["expand" ] = expand
1806
1807
if properties is not None :
1807
1808
params ["properties" ] = properties
1809
+
1808
1810
issue .find (id , params = params )
1811
+ self ._untranslate_issues_fields_id_to_fields_name ([issue ])
1809
1812
return issue
1810
1813
1811
1814
def create_issue (
@@ -3547,14 +3550,7 @@ def search_issues(
3547
3550
elif fields is None :
3548
3551
fields = ["*all" ]
3549
3552
3550
- # this will translate JQL field names to REST API Name
3551
- # most people do know the JQL names so this will help them use the API easier
3552
- untranslate = {} # use to add friendly aliases when we get the results back
3553
- if self ._fields_cache :
3554
- for i , field in enumerate (fields ):
3555
- if field in self ._fields_cache :
3556
- untranslate [self ._fields_cache [field ]] = fields [i ]
3557
- fields [i ] = self ._fields_cache [field ]
3553
+ fields = self ._translate_fields_name_to_id (fields )
3558
3554
3559
3555
search_params = {
3560
3556
"jql" : jql_str ,
@@ -3590,16 +3586,51 @@ def search_issues(
3590
3586
use_post = use_post ,
3591
3587
)
3592
3588
3593
- if untranslate :
3594
- iss : Issue
3595
- for iss in issues :
3596
- for k , v in untranslate .items ():
3597
- if iss .raw :
3598
- if k in iss .raw .get ("fields" , {}):
3599
- iss .raw ["fields" ][v ] = iss .raw ["fields" ][k ]
3600
-
3589
+ self ._untranslate_issues_fields_id_to_fields_name (issues )
3601
3590
return issues
3602
3591
3592
+ def _translate_fields_name_to_id (self , fields : list [str ] | str ) -> list [str ]:
3593
+ """Translate fields names to JIRA's REST API field id.
3594
+
3595
+ Args:
3596
+ fields (list[str] | str): comma-separated string or list of issue fields to be translated
3597
+
3598
+ Returns:
3599
+ tuple[list[str], dict[str, str]]: Returns translated fields and dictionary {field_id: field_name}
3600
+ with translation needed to decode ids into names.
3601
+ Translated fields variable is always List type
3602
+ """
3603
+ translated_fields : list [str ]
3604
+ if isinstance (fields , str ):
3605
+ translated_fields = fields .split ("," )
3606
+ elif isinstance (fields , list ):
3607
+ translated_fields = fields .copy ()
3608
+ else :
3609
+ raise NotImplementedError (
3610
+ "Translating fields for <%s> type is unsupported" , type (fields )
3611
+ )
3612
+
3613
+ if self ._fields_cache :
3614
+ for i , field_name in enumerate (translated_fields ):
3615
+ if field_name in self ._fields_cache :
3616
+ translated_fields [i ] = self ._fields_cache [field_name ]
3617
+
3618
+ return translated_fields
3619
+
3620
+ def _untranslate_issues_fields_id_to_fields_name (self , issues : list [Issue ]) -> None :
3621
+ """Untranslate issues fields names from JIRA's REST API field id.
3622
+
3623
+ Args:
3624
+ issues (list[Issue]): list of issues to be untranslated
3625
+ """
3626
+ for issue in issues :
3627
+ if not issue .raw :
3628
+ return
3629
+ for field_name , field_id in self ._fields_cache .items ():
3630
+ if field_id in issue .raw .get ("fields" , {}):
3631
+ issue .raw ["fields" ][field_name ] = issue .raw ["fields" ][field_id ]
3632
+ setattr (issue .fields , field_name , issue .raw ["fields" ][field_id ])
3633
+
3603
3634
# Security levels
3604
3635
def security_level (self , id : str ) -> SecurityLevel :
3605
3636
"""Get a security level Resource.
0 commit comments