
    ᴺh                         S SK JrJrJrJr  S SKJrJr  S SKrS SK	J
r
JrJrJr  S SKJrJrJr  \SS\S\
\\\4      S\
\\\4      4S	 jj5       r " S
 S5      rg)    )capture_exceptioncapture_messageset_tagset_context)monitor_jira_apimonitor_critical_systemN)OptionalDictAnyList)JIRA_URL	JIRA_USERJIRA_API_TOKEN	issue_keyjira_configreturnc                   ^^^^	 U (       d  [        S5        gU(       a  UR                  S[        5      O[        nU(       a  UR                  S[        5      O[        mU(       a  UR                  S[        5      O[        mU(       d  [        S5        gUR                  S5      (       d  SU-   nUR                  S	5      nU S
U  3m	SS0m [        SS9UUUU	4S j5       nU" 5       nUR                  5         UR                  5       $ ! [        R                  R                   a  n[        SU 35         SnAgSnAf[        R                  R                   a  n[        SU 35         SnAgSnAff = f)zFetch issue details from Jira.

Args:
    issue_key (str): The Jira issue key
    jira_config (Optional[Dict[str, str]]): Optional Jira configuration override

Returns:
    Optional[Dict[str, Any]]: Issue details or None if fetch fails
u   ❌ Issue key cannot be emptyNurlusertokenu   ❌ Jira URL cannot be empty)zhttp://https://r   /z/rest/api/3/issue/Acceptapplication/jsonT)criticalc                  6   > [         R                  " TTT4T SS9$ )N   authheaderstimeout)requestsget)r    
jira_token	jira_userr   s   4D:\Projects\AI-TestCaseGenerator\jira\jira_client.pymake_jira_request&fetch_issue.<locals>.make_jira_request.   s%    <<,	     u   ❌ Failed to fetch issue: u   ❌ Error decoding JSON: )printr#   r   r   r   
startswithrstripr   raise_for_statusjsonr"   
exceptionsRequestExceptionJSONDecodeError)
r   r   jira_urlr'   responseer    r$   r%   r   s
         @@@@r&   fetch_issuer5   	   sB    -. 4?{uh/HH6A	2yI=H.9nJ ,- 677( s#HJ(
4C+,G	4	(	 
)	 %&!!#}}// +A3/0.. )!-.s$   ;D E2&D99!E2E--E2c            
           \ rS rSrSrS\S\S\4S jrS\\\\	4      4S jr
SS
\S\\\      S\\\\	4      4S jjrSrg	)
JiraClientA   z8Jira API client for connection testing and item fetchingr2   r%   r$   c                 Z    UR                  S5      U l        X l        X0l        SS0U l        g )Nr   r   r   )r,   r2   r%   r$   r    )selfr2   r%   r$   s       r&   __init__JiraClient.__init__D   s)     ,"$ "45r)   r   c                     U R                    S3n[        R                  " UU R                  U R                  4U R
                  SS9nUR                  5         UR                  5       $ ! [         a  n[        SU 35         SnAgSnAff = f)zGet current user informationz/rest/api/3/myselfr   r   u    ❌ Failed to get current user: N)
r2   r"   r#   r%   r$   r    r-   r.   	Exceptionr*   )r:   r   r3   r4   s       r&   get_current_userJiraClient.get_current_userJ   s    	]]O#56C||nndoo6	H %%'==?" 	4QC89	s   A%A( (
B
2BB
Nlimitstatusesc                 8    U R                    S3n/ nU(       a;  SR                  U Vs/ s H	  nSU S3PM     sn5      nUR                  SU S35        UR                  S5        SR                  U5      nUb  UOS	nUU/ S
QS.n	[        R                  " UU R
                  U R                  4U R                  U	SS9n
U
R                  5         U
R                  5       nUR                  S/ 5      $ s  snf ! [         a  n[        SU 35        / s SnA$ SnAff = f)zGet recent issues for suggestions
:param limit: maximum number of issues to return (None for all)
:param statuses: optional list of status names to filter by (e.g., ["To Do", "Ready for QA"]) 
z/rest/api/3/searchz, "zstatus in ()zORDER BY updated DESC Ni  )summary	issuetypestatus)jql
maxResultsfieldsr   )r   r    r.   r!   issuesu!   ❌ Failed to get recent issues: )r2   joinappendr"   postr%   r$   r    r-   r.   r#   r>   r*   )r:   rA   rB   r   jql_clausessquoted_statusesrJ   max_resultspayloadr3   resultr4   s                r&   get_recent_issuesJiraClient.get_recent_issuesZ   s!   
 	]]O#56CK"&))x,Hx!q1Xx,H"I""[0A#CD67((;'C $)#4%$K )<G  }}nndoo6H %%']]_F::h++3 -I4  	5aS9:I	s.   'C5 C0B6C5 0C5 5
D?DDD)r    r$   r2   r%   )NN)__name__
__module____qualname____firstlineno____doc__strr;   r	   r
   r   r?   intr   rW   __static_attributes__ r)   r&   r7   r7   A   ss    B6 6 6# 6(4S>":  %s %Xd3i=P %\`aefiknfnao\p % %r)   r7   )N)utils.error_loggerr   r   r   r   utils.error_monitorr   r   r"   typingr	   r
   r   r   config.settingsr   r   r   r^   r5   r7   ra   r)   r&   <module>rf      so    W W I  , , ? ?53 5Xd38n-E 5QYZ^_bdg_gZhQi 5 5n> >r)   