
    
h#                     `    d Z ddlZddlZddlmZ  ej        e          Z G d d          ZdS )z(
Jira Client for MCP Server Integration
    N)JIRAc                   J    e Zd ZdZd Zd Zd Zd ZddZd Z	d	 Z
	 	 ddZdS )
JiraClientz Jira client for MCP server toolsc                 J    d | _         d| _        |                                  d S )NF)jira	connected_initialize_clientselfs    ?/Users/user/workspace/sujinbaek/cqa-test-app/lib/jira_client.py__init__zJiraClient.__init__   s(    	!!!!!    c                    	 t          j        d          }|st                              d           dS t          j        d          }|r	 t	          ||          | _        | j                                         d| _        t                              d           dS # t          $ r'}t          
                    d|            Y d}~nd}~ww xY wt          j        d	          }t          j        d
          }|r|r	 t	          |||f          | _        | j                                         d| _        t                              d           dS # t          $ r'}t          
                    d|            Y d}~nd}~ww xY wt                              d           dS # t          $ r/}t          
                    d|            d| _        Y d}~dS d}~ww xY w)z1Initialize Jira client with environment variablesJIRA_URLzJIRA_URL not configuredNJIRA_PERSONAL_TOKEN)server
token_authTz%Connected to Jira with Personal Tokenz/Failed to connect to Jira with Personal Token: JIRA_USERNAMEJIRA_API_TOKEN)r   
basic_authz)Connected to Jira with Username/API Tokenz3Failed to connect to Jira with Username/API Token: zNo valid Jira credentials foundz Error initializing Jira client: F)osgetenvloggerwarningr   r   server_infor   info	Exceptionerror)r   jira_urlpersonal_tokeneusername	api_tokens         r   r	   zJiraClient._initialize_client   s.   '	#y,,H 8999  Y'<==N 	XX $H P P PDII))+++%)DNKK GHHHF  X X XLL!VST!V!VWWWWWWWWX y11H	"233I I 
 $H(IAV W W WDII))+++%)DNKK KLLLF    LLQaQQ       
 NN<===== 	# 	# 	#LL?A??@@@"DNNNNNNN	#sf   0F" F" AB 
C'C	F" 	C/F" >AE 
FE>9F" >FF" "
G,$GGc                 "    | j         o| j        duS )z!Check if Jira client is connectedN)r   r   r
   s    r   is_connectedzJiraClient.is_connected?   s    ~7$)4"77r   c                    |                                  sddiS 	 | j                                        }g }|D ][}|                    |j        |j        t          |dd          t          |d          rt          |j        dd          ndd           \|t          |          dS # t          $ r8}t                              d	|            dt          |          icY d
}~S d
}~ww xY w)z!List all accessible Jira projectsr   Not connected to JiraprojectTypeKeyunknownleaddisplayName)keynameproject_typer*   )projectscountzError listing projects: N)r%   r   r/   appendr,   r-   getattrhasattrr*   lenr   r   r   str)r   r/   project_listprojectr!   s        r   list_projectszJiraClient.list_projectsC   s+     "" 	6455	%y))++HL#  ##&{ '(/9I9(U(U  'w77+GGL-KKK!*	 	    !-s<7H7HIII 	% 	% 	%LL7A77888SVV$$$$$$$	%s   B
B% %
C'/-C"C'"C'd   c                    |                                  sddiS 	 | j                            ||          }g }|D ]}|                    |j        |j        j        |j        j        j        |j        j	        j        |j        j
        r|j        j
        j        nd|j        j        r|j        j        j        nd|j        j        r|j        j        j        ndt          |j        j                  t          |j        j                  d	           |t#          |          |j        dS # t&          $ r8}t(                              d	|            dt          |          icY d
}~S d
}~ww xY w)zSearch Jira issues using JQLr   r'   )
maxResultsNone
UnassignedUnknown)	r,   summarystatus
issue_typepriorityassigneereportercreatedupdated)issuesr0   totalzError searching issues: N)r%   r   search_issuesr1   r,   fieldsr?   r@   r-   	issuetyperB   rC   r+   rD   r5   rE   rF   r4   rH   r   r   r   )r   jqlmax_resultsrG   
issue_listissuer!   s          r   rI   zJiraClient.search_issues^   s     "" 	6455%	%Y,,S[,IIFJ  !!$y#(<#7"',"5":&+l&<&A  %|4(EL166!'  %|4.EL1==!-  %|4+EL1==!*#&u|';#<#<#&u|';#<#<+    6 %Z  
  	% 	% 	%LL7A77888SVV$$$$$$$	%s   DD& &
E(0-E#E(#E(c                 .   |                                  sddiS 	 | j                            |          }|j        |j        j        |j        j        pd|j        j        j        |j        j	        j        |j        j
        r|j        j
        j        nd|j        j        r|j        j        j        nd|j        j        r|j        j        j        ndt          |j        j                  t          |j        j                  |j        j        j        |j        j        j        d|j        j        |j        j        rd |j        j        D             ng d	S # t(          $ r;}t*                              d
| d|            dt          |          icY d}~S d}~ww xY w)z/Get detailed information about a specific issuer   r'   zNo descriptionr<   r=   r>   )r,   r-   c                     g | ]	}|j         
S  r-   ).0comps     r   
<listcomp>z(JiraClient.get_issue.<locals>.<listcomp>   s    CCC4TYCCCr   )r,   r?   descriptionr@   rA   rB   rC   rD   rE   rF   r7   labels
componentszError getting issue : N)r%   r   rO   r,   rJ   r?   rW   r@   r-   rK   rB   rC   r+   rD   r5   rE   rF   r7   rX   rY   r   r   r   )r   	issue_keyrO   r!   s       r   	get_issuezJiraClient.get_issue   s     "" 	6455%	%IOOI..E y </$|7K;K,-2#l4927,2GSEL)..V |,&EL)55% |,#EL)55"u|344u|344 </3!L05   ,- |.CC5<+BCCCC;  @  	% 	% 	%LL@	@@Q@@AAASVV$$$$$$$	%s   D4E 
F0F	FFc           
         |                                  sddiS 	 | j                            |          }| j                            |          }g }|D ]U}|                    |j        |j        j        |j        t          |j
                  t          |j                  d           V||t          |          dS # t          $ r;}t                              d| d|            dt          |          icY d}~S d}~ww xY w)z!Get comments for a specific issuer   r'   )idauthorbodyrE   rF   )r[   commentsr0   zError getting comments for rZ   N)r%   r   rO   ra   r1   r^   r_   r+   r`   r5   rE   rF   r4   r   r   r   )r   r[   rO   ra   comment_listcommentr!   s          r   get_issue_commentszJiraClient.get_issue_comments   s<     "" 	6455	%IOOI..Ey))%00HL# 	 	##%j")."< '#&w#7#7#&w#7#7     '(\**  
  	% 	% 	%LLGyGGAGGHHHSVV$$$$$$$	%s   B B; ;
D 0C;5D ;D TaskMediumc                    |                                  sddiS 	 d|i||d|id}	 | j                                        }d |D             }||v rd|i|d<   n-# t          $ r  t                              d|            Y nw xY w| j                            |	          }	|	j        |d
| j        j         d|	j         dS # t          $ r8}
t          	                    d|
            dt          |
          icY d}
~
S d}
~
ww xY w)zCreate a new Jira issuer   r'   r,   r-   )r7   r?   rW   rK   c                     g | ]	}|j         
S rR   rS   )rT   ps     r   rV   z+JiraClient.create_issue.<locals>.<listcomp>   s    !=!=!=Q!&!=!=!=r   rB   zCould not set priority )rJ   Createdz/browse/)r,   r?   r@   urlzError creating issue: N)r%   r   
prioritiesr   r   r   create_issuer,   
server_urlr   r5   )r   project_keyr?   rW   rA   rB   
issue_dictrl   priority_names	new_issuer!   s              r   rm   zJiraClient.create_issue   s|      "" 	6455	%!;/"*$j1	 JE!Y1133
!=!=*!=!=!=~--.4h-?Jz* E E ECCCDDDDDE 	..j.AAI !}"#).GG	GG	    	% 	% 	%LL5!55666SVV$$$$$$$	%s@   B? 0A B? 'B>B?  B=B? ?
D	-C<6D<DN)r9   )re   rf   )__name__
__module____qualname____doc__r   r	   r%   r8   rI   r\   rd   rm   rR   r   r   r   r      s        **" " "
)# )# )#V8 8 8% % %6*% *% *% *%X*% *% *%X% % %F '% '% '% '% '% '%r   r   )	rv   r   loggingr   r   	getLoggerrs   r   r   rR   r   r   <module>ry      s     
			       		8	$	$o% o% o% o% o% o% o% o% o% o%r   