
    dh&%                         S r SSKJrJrJrJrJr  SSKJr  SSK	J
r
JrJr  SSKJr   " S S\5      r " S S	\5      r " S
 S\
5      rg)zUtil that calls Jira.    )AnyDictListOptionalUnion)get_from_dict_or_env)	BaseModel
ConfigDictmodel_validator)	TypedDictc                   0    \ rS rSr% Sr\\S'    \\S'   Srg)JiraOauth2Token
   zJira OAuth2 token.access_token
token_type N)__name__
__module____qualname____firstlineno____doc__str__annotations____static_attributes__r       Z/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/jira.pyr   r   
   s    #O5r   r   c                   0    \ rS rSr% Sr\\S'    \\S'   Srg)
JiraOauth2   zJira OAuth2.	client_idtokenr   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    N r   r   c                      \ rS rSr% SrSr\\S'   Sr\\S'   Sr	\
\   \S'   Sr\
\   \S'    Sr\
\\\4      \S'    Sr\
\   \S	'   Sr\
\   \S
'   \" SS9r\" SS9\S\S\4S j5       5       rS\S\\   4S jrS\\   S\\   4S jrS\S\4S jrS\4S jrS\S\4S jrS\S\4S jr S\S\4S jr!S\S\S\4S jr"Sr#g)JiraAPIWrapper   aU  
Wrapper for Jira API. You can connect to Jira with either an API token or OAuth2.
- with API token, you need to provide the JIRA_USERNAME and JIRA_API_TOKEN
    environment variables or arguments.
ex: JIRA_USERNAME=your_username JIRA_API_TOKEN=your_api_token
- with OAuth2, you need to provide the JIRA_OAUTH2 environment variable or
    argument as a dict having as fields "client_id" and "token" which is
    a dict containing at least "access_token" and "token_type".
ex: JIRA_OAUTH2='{"client_id": "your_client_id", "token":
    {"access_token": "your_access_token","token_type": "bearer"}}'
Njira
confluencejira_usernamejira_api_tokenjira_oauth2jira_instance_url
jira_cloudforbid)extrabefore)modevaluesreturnc                     [        USSSS9nX!S'   [        USSSS9nX1S'   [        USSSS9nXAS'   U(       a+  [        U[        5      (       a   S	S
KnUR	                  U5      n[        USS5      nXqS'   SU;   a  US   b  [        US   5      US'   [        USS5      nUR                  5       S:H  n	XS'   U(       a  U(       a  [        S5      e S	SK
Jn
Jn  U(       a"  US:X  a	  U" UUU	S9nO	U" UUUU	S9nU
" UUUU	S9nOU(       a  U" UUU	S9nU
" UUU	S9nWUS'   WUS'   U$ ! [
         a    [        S5      eWR                  R                   a  n[        SU 35      eS
nAff = f! [
         a    [        S5      ef = f)z?Validate that api key and python package exists in environment.r'   JIRA_USERNAME )defaultr(   JIRA_API_TOKENr)   JIRA_OAUTH2r   N@json is not installed. Please install it with `pip install json`z@The format of the JIRA_OAUTH2 string is not a valid dictionary: r*   JIRA_INSTANCE_URLr+   
JIRA_CLOUDtruezGYou have to provide either a jira_api_token or a jira_oauth2. Not both.)
ConfluenceJiraz`atlassian-python-api is not installed. Please install it with `pip install atlassian-python-api`)urlr!   cloud)r>   usernamepasswordr?   )r>   oauth2r?   r%   r&   )r   
isinstancer   jsonloadsImportErrordecoderJSONDecodeError
ValueErrorlower	atlassianr<   r=   )clsr0   r'   r(   r)   rD   er*   jira_cloud_strr+   r<   r=   r%   r&   s                 r   validate_environment#JiraAPIWrapper.validate_environment8   s    -O_b
 #0-$&6
 $2 *M="
 !,}:k377"jj5 1')<
 '8"#6!f\&:&F#&vl';#<F< -flLQ#))+v5
)|k 
	2 ")($ )*+$	 $%&' 	J %" D
 $%" J v)|Q  !V  <<//  //0c3 4  	L 	s$   D# E' #.E$EE$'E=issuesc                    / nUS    H  nUS   nUS   S   nUS   S   SS nSUS   ;   a  US   S   S	   nOS nUS   S
   S	   n US   S   S   n	0 n
US   R                  S/ 5       Hg  nSUR                  5       ;   a  US   S   nUS   S   nUS   S   S   nSUR                  5       ;   a  US   S   nUS   S   nUS   S   S   nWWWS.n
Mi     UR                  UUUU	UUU
S.5        M     U$ ! [          a    Sn	 Nf = f)NrQ   keyfieldssummarycreatedr   r   prioritynamestatusassigneedisplayNameNone
issuelinksinwardIssuetypeinwardoutwardIssueoutward)r_   rS   rU   )rS   rU   rV   rZ   rW   rY   related_issues)	Exceptiongetkeysappend)selfrQ   parsedissuerS   rU   rV   rW   rY   rZ   
rel_issuesrelated_issuerel_typerel_keyrel_summarys                  r   parse_issuesJiraAPIWrapper.parse_issues   s   H%E,CHoi0GHoi026GU8_, ?:6v>8_X.v6F" ?:6}E J!&x!4!4\2!F M$6$6$88,V4X>H+M:5AG"/">x"H"SK!]%7%7%99,V4Y?H+N;EBG"/"?"I)"TK&.w;W
 "G MM&& ( ($&0
1 &F 1  "!"s   C22D Dprojectsc           	          / nU HI  nUS   nUS   nUS   nUR                  S5      nUR                  S5      nUR                  XEXgUS.5        MK     U$ )NidrS   rX   projectTypeKeystyle)rt   rS   rX   r_   rv   )re   rg   )	rh   rr   ri   projectrt   rS   rX   r_   rv   s	            r   parse_projectsJiraAPIWrapper.parse_projects   sf    GB%.C6?D;;/0DKK(EMMtER   r   queryc                     U R                   R                  U5      nU R                  U5      nS[        [	        U5      5      -   S-   [        U5      -   nU$ )NFound z	 issues:
)r%   jqlrp   r   len)rh   rz   rQ   parsed_issuesparsed_issues_strs        r   searchJiraAPIWrapper.search   sR    u%))&1s3}-..=M@RR 	 ! r   c                     U R                   R                  5       nU R                  U5      nS[        [	        U5      5      -   S-   [        U5      -   nU$ )Nr|   z projects:
)r%   rr   rx   r   r~   )rh   rr   parsed_projectsparsed_projects_strs       r   rw   JiraAPIWrapper.project   sR    99%%'--h7s3/00>ACDXX 	 #"r   c                      SS K nUR                  U5      nU R                  R	                  [        U5      S9$ ! [         a    [        S5      ef = f)Nr   r8   )rT   )rD   rF   rE   r%   issue_createdictrh   rz   rD   paramss       r   r   JiraAPIWrapper.issue_create   sW    	
 E"yy%%T&\%::  	R 	s	   9 Ac                      SS K nUR                  U5      nU R                  R                  " S0 [        U5      D6$ ! [         a    [        S5      ef = f)Nr   r8   r   )rD   rF   rE   r&   create_pager   r   s       r   page_createJiraAPIWrapper.page_create   sW    	
 E"**:T&\::  	R 	s	   < Ac                      SS K nUR                  U5      n[        U R                  US   5      nU" UR                  S/ 5      0 UR                  S0 5      D6$ ! [         a    [        S5      ef = f)Nr   r8   functionargskwargs)rD   rF   rE   getattrr%   re   )rh   rz   rD   r   jira_functions        r   otherJiraAPIWrapper.other   sv    	
 E"		6*+=>fjj4Q

8R8PQQ  	R 	s   A A.r/   c                    US:X  a  U R                  U5      $ US:X  a  U R                  5       $ US:X  a  U R                  U5      $ US:X  a  U R                  U5      $ US:X  a  U R	                  U5      $ [        SU 35      e)Nr}   get_projectscreate_issuer   r   zGot unexpected mode )r   rw   r   r   r   rI   )rh   r/   rz   s      r   runJiraAPIWrapper.run   s    5=;;u%%^#<<>!^#$$U++W_::e$$]"##E**3D6:;;r   r   )$r   r   r   r   r   r%   r   r   r&   r'   r   r   r(   r)   r   r   r*   r+   boolr
   model_configr   classmethodr   rO   r   r   rp   rx   r   rw   r   r   r   r   r   r   r   r   r#   r#      s]   
 D#J#'M8C='$(NHSM(K48K%
C018K'+x}+!%J%L (#^$ ^3 ^  $^@%4 %DJ %NtDz d4j !C !C !# #;# ;# ;; ; ;	R3 	R3 	R< <C <C <r   r#   N)r   typingr   r   r   r   r   langchain_core.utilsr   pydanticr	   r
   r   typing_extensionsr   r   r   r#   r   r   r   <module>r      s@     3 3 5 ; ; '6i 6 l<Y l<r   