
    h	                         d dl mZmZmZmZ d dlmZmZ d dlZd dl	m
Z
mZmZmZ d dlmZmZmZ eddede
eeef                  de
eeef                  fd	            Z G d
 d          ZdS )    )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                 "  	
 | st          d           dS |r|                    dt                    nt          }|r|                    dt                    nt          
|r|                    dt                    nt          	|st          d           dS |                    d          sd|z   }|                    d	          }| d
|  ddi	 t          d          	
fd            } |            }|                                 |	                                }	 |                    di           }d|v r\t          |d         t                    rAg fd |d                    d                    d D                       |d         d<   n# t          $ r Y nw xY w|S # t          j        j        $ r}t          d|            Y d}~dS d}~wt          j        j        $ r}t          d|            Y d}~dS d}~ww xY w)a  Fetch 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                  8    t          j        f d          S )N   authheaderstimeout)requestsget)r    
jira_token	jira_userr   s   =/var/www/html/testcasegenerator.evdpl.com/jira/jira_client.pymake_jira_requestz&fetch_issue.<locals>.make_jira_request.   s-    <,	       fieldsdescriptionc                     t          | t                    r|                     d          nd }|dk    rd| v r                    | d                    t          | t                    r|                     dg           ng D ]} |           d S )Ntypetextcontent)
isinstancedictr#   append)node	node_typechild
text_partswalks      r&   r6   zfetch_issue.<locals>.walk@   s    4>tT4J4J T 0 0 0PTI F**v~~"))$v,777<FtT<R<R!Z)R!8!8!8XZ $ $U$ $r(   
c                     g | ]}||S  r9   ).0ts     r&   
<listcomp>zfetch_issue.<locals>.<listcomp>G   s    :V:V:VTU:V1:V:V:Vr(   u   ❌ Failed to fetch issue: u   ❌ Error decoding JSON: )printr#   r   r   r   
startswithrstripr   raise_for_statusjsonr/   r0   join	Exceptionr"   
exceptionsRequestExceptionJSONDecodeError)r   r   jira_urlr'   responsedatar)   er    r$   r%   r5   r   r6   s           @@@@@@r&   fetch_issuerK   	   s     -...t 4?L{uh///HH6AP	222yI=H\.999nJ  ,---t 677 )( s##H
4
4
4
4C+,G$	4	(	(	(	 	 	 	 	 	 	 
)	(	 %$&&!!###}}	XXh++F&&:f]6KT+R+R&
$ $ $ $ $ $ VM*+++04		:V:Vj:V:V:V0W0WX}- 	 	 	D	/   /A//000ttttt.   -!--...tttttsJ   AF. %A6F F. 
F)&F. (F))F. .HGH1H		Hc            
           e Zd ZdZdededefdZdeeeef                  fdZ	dd	e
d
eee                  deeeef                  fdZdS )
JiraClientz8Jira API client for connection testing and item fetchingrG   r%   r$   c                 h    |                     d          | _        || _        || _        ddi| _        d S )Nr   r   r   )r?   rG   r%   r$   r    )selfrG   r%   r$   s       r&   __init__zJiraClient.__init__U   s4     ,,"$ "45r(   r   c                    	 | j          d}t          j        || j        | j        f| j        d          }|                                 |                                S # t          $ r}t          d|            Y d}~dS d}~ww xY w)zGet current user informationz/rest/api/3/myselfr   r   u    ❌ Failed to get current user: N)
rG   r"   r#   r%   r$   r    r@   rA   rC   r=   )rO   r   rH   rJ   s       r&   get_current_userzJiraClient.get_current_user[   s    	]666C|ndo6	  H %%'''==??" 	 	 	8Q8899944444	s   AA 
B'A??BNlimitstatusesc                 &   	 | j          d}g }|r8d                    d |D                       }|                    d| d           |                    d           d                    |          }||nd	}||g d
d}t          j        || j        | j        f| j        |d          }	|	                                 |		                                }
|

                    dg           S # t          $ r}t          d|            g cY d}~S d}~ww xY w)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, c                     g | ]}d | d 	S )"r9   )r:   ss     r&   r<   z0JiraClient.get_recent_issues.<locals>.<listcomp>t   s     ,H,H,H!XXXX,H,H,Hr(   zstatus in ()zORDER BY updated DESC Ni  )summary	issuetypestatus)jql
maxResultsr)   r   )r   r    rA   r!   issuesu!   ❌ Failed to get recent issues: )rG   rB   r1   r"   postr%   r$   r    r@   rA   r#   rC   r=   )rO   rS   rT   r   jql_clausesquoted_statusesr^   max_resultspayloadrH   resultrJ   s               r&   get_recent_issueszJiraClient.get_recent_issuesk   sd   
 	]666CK E"&)),H,Hx,H,H,H"I"I""#C#C#C#CDDD6777((;''C $)#4%%$K )<<< G  }ndo6  H %%''']]__F::h+++ 	 	 	9a99:::IIIIII	s   C%C( (
D2DDD)NN)__name__
__module____qualname____doc__strrP   r	   r
   r   rR   intr   rg   r9   r(   r&   rM   rM   R   s        BB6 6 6# 6 6 6 6(4S>":     % %s %Xd3i=P %\`aefiknfnao\p % % % % % %r(   rM   )N)utils.error_loggerr   r   r   r   utils.error_monitorr   r   r"   typingr	   r
   r   r   config.settingsr   r   r   rl   rK   rM   r9   r(   r&   <module>rr      s    W W W W W W W W W W W W I I I I I I I I  , , , , , , , , , , , , ? ? ? ? ? ? ? ? ? ?F F3 FXd38n-E FQYZ^_bdg_gZhQi F F F FP> > > > > > > > > >r(   