
    h&%                         d Z ddlmZmZmZmZmZ ddlmZ ddl	m
Z
mZmZ ddlmZ  G d de      Z G d d	e      Z G d
 de
      Zy)zUtil that calls Jira.    )AnyDictListOptionalUnion)get_from_dict_or_env)	BaseModel
ConfigDictmodel_validator)	TypedDictc                   (    e Zd ZU dZeed<   	 eed<   y)JiraOauth2TokenzJira OAuth2 token.access_token
token_typeN)__name__
__module____qualname____doc__str__annotations__     `/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/utilities/jira.pyr   r   
   s    #O5r   r   c                   (    e Zd ZU dZeed<   	 eed<   y)
JiraOauth2zJira OAuth2.	client_idtokenN)r   r   r   r   r   r   r   r   r   r   r   r      s    N r   r   c                   v   e Zd ZU dZdZeed<   dZeed<   dZe	e
   ed<   dZe	e
   ed<   	 dZe	eee
f      ed<   	 dZe	e
   ed<   dZe	e   ed	<    ed
      Z ed      ededefd              Zdedee   fdZdee   dee   fdZde
de
fdZde
fdZde
de
fdZde
de
fdZde
de
fdZ de
de
de
fdZ!y)JiraAPIWrappera}  
    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                    t        |ddd      }||d<   t        |ddd      }||d<   t        |ddd      }||d<   |r&t        |t              r	 d	d
l}|j	                  |      }t        |dd      }||d<   d|v r|d   t        |d         |d<   t        |dd      }|j                         dk(  }	|	|d<   |r|rt        d      	 d	dl
m}
m} |r*|dk(  r ||||	      }n |||||	      } |
||||	      }n|r ||||	      } |
|||	      }|d<   |d<   |S # t
        $ r t        d      j                  j                  $ r}t        d|       d
}~ww xY w# t
        $ r t        d      w xY w)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)r9   usernamepasswordr:   )r9   oauth2r:   r    r!   )r   
isinstancer   jsonloadsImportErrordecoderJSONDecodeError
ValueErrorlower	atlassianr7   r8   )clsr+   r"   r#   r$   r?   er%   jira_cloud_strr&   r7   r8   r    r!   s                 r   validate_environmentz#JiraAPIWrapper.validate_environment8   s&    -O_b
 #0-$&6
 $2 *M="
 !,}:k3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 E5issuesc                    g }|d   D ]  }|d   }|d   d   }|d   d   dd }d|d   v r|d   d   d	   }nd }|d   d
   d	   }	 |d   d   d   }	i }
|d   j                  dg       D ]b  }d|j                         v r|d   d   }|d   d   }|d   d   d   }d|j                         v r|d   d   }|d   d   }|d   d   d   }d}
d |j                  ||||	|||
d        |S # t         $ r d}	Y w xY w)NrK   keyfieldssummarycreatedr   
   prioritynamestatusassigneedisplayNameNone
issuelinksinwardIssuetypeinwardoutwardIssueoutward)rZ   rM   rO   )rM   rO   rP   rU   rR   rT   related_issues)	Exceptiongetkeysappend)selfrK   parsedissuerM   rO   rP   rR   rT   rU   
rel_issuesrelated_issuerel_typerel_keyrel_summarys                  r   parse_issuesz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 	X 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
	X MM&& ( ($&0
1"	F 1  "!"s   C((C65C6projectsc           	          g }|D ]J  }|d   }|d   }|d   }|j                  d      }|j                  d      }|j                  |||||d       L |S )NidrM   rS   projectTypeKeystyle)rn   rM   rS   rZ   rp   )r`   rb   )	rc   rl   rd   projectrn   rM   rS   rZ   rp   s	            r   parse_projectszJiraAPIWrapper.parse_projects   so     	GB%.C6?D;;/0DKK(EMM#tTER	 r   queryc                     | j                   j                  |      }| j                  |      }dt        t	        |            z   dz   t        |      z   }|S )NFound z	 issues:
)r    jqlrk   r   len)rc   rs   rK   parsed_issuesparsed_issues_strs        r   searchzJiraAPIWrapper.search   sR    u%))&1s3}-..=M@RR 	 ! r   c                     | j                   j                         }| j                  |      }dt        t	        |            z   dz   t        |      z   }|S )Nru   z projects:
)r    rl   rr   r   rw   )rc   rl   parsed_projectsparsed_projects_strs       r   rq   zJiraAPIWrapper.project   sR    99%%'--h7s3/00>ACDXX 	 #"r   c                     	 dd l }|j                  |      }| j                  j	                  t        |            S # t        $ r t        d      w xY w)Nr   r3   )rN   )r?   rA   r@   r    issue_createdictrc   rs   r?   paramss       r   r   zJiraAPIWrapper.issue_create   sW    	
 E"yy%%T&\%::  	R 		   < Ac                     	 dd l }|j                  |      } | j                  j                  di t        |      S # t        $ r t        d      w xY w)Nr   r3   r   )r?   rA   r@   r!   create_pager   r   s       r   page_createzJiraAPIWrapper.page_create   sY    	
 E"*t**:T&\::  	R 	r   c                     	 dd l }|j                  |      }t        | j                  |d         } ||j                  dg       i |j                  di       S # t        $ r t        d      w xY w)Nr   r3   functionargskwargs)r?   rA   r@   getattrr    r`   )rc   rs   r?   r   jira_functions        r   otherzJiraAPIWrapper.other   sv    	
 E"		6*+=>fjj4Q

8R8PQQ  	R 	s   A A-r*   c                     |dk(  r| j                  |      S |dk(  r| j                         S |dk(  r| j                  |      S |dk(  r| j                  |      S |dk(  r| j	                  |      S t        d|       )Nrv   get_projectscreate_issuer   r   zGot unexpected mode )rz   rq   r   r   r   rD   )rc   r*   rs   s      r   runz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&   boolr
   model_configr   classmethodr   rJ   r   r   rk   rr   rz   rq   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   