
    
i&%                         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dS )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<   dS )JiraOauth2TokenzJira OAuth2 token.access_token
token_typeN)__name__
__module____qualname____doc__str__annotations__     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_community/utilities/jira.pyr   r   
   s0         #OOO55r   r   c                   *    e Zd ZU dZeed<   	 eed<   dS )
JiraOauth2zJira OAuth2.	client_idtokenN)r   r   r   r   r   r   r   r   r   r   r   r      s0         NNN r   r   c                      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!dS )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<   |rqt          |t                    r\	 d	d
l}|                    |          }nA# t
          $ r t          d          |j        j        $ r}t          d|           d
}~ww xY wt          |dd          }||d<   d|v r |d         t          |d                   |d<   t          |dd          }|	                                dk    }	|	|d<   |r|rt          d          	 d	dl
m}
m} n# t
          $ r t          d          w xY w|r4|dk    r ||||	          }n |||||	          } |
||||	          }n|r ||||	          } |
|||	          }||d<   ||d<   |S )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7 	"jj55   !V   </    3/03 3   1')<
 
 '8"#6!!f\&:&F#&vl';#<#<F< -flLQQ#))++v5
)| 	k 	  
	222222222 	 	 	L  	  	""t)($   t)*+$	   $%&' 	  JJ  
	4%"   D
 $%"   J v)|s$   !A; ;'B9"B44B98E E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         }	n# t           $ r d}	Y nw xY wi }
|d                             dg           D ]}d|                                v r0|d         d         }|d         d         }|d         d         d         }d|                                v r0|d         d         }|d         d         }|d         d         d         }|||d}
|                    ||||	|||
d           ^|S )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!F 	X 	X M$6$6$8$888,V4X>H+M:5AG"/">x"H"SK!]%7%7%9%999,V4Y?H+N;EBG"/"?"I)"TK&.w;WW

MM&& ( ($&0 
 
 
 
 s   0BBBprojectsc           	          g }|D ]_}|d         }|d         }|d         }|                     d          }|                     d          }|                    |||||d           `|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   s     	 	GB%.C6?D;;/00DKK((EMM#tTERR    r   queryc                     | 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   s_    u%%))&11s3}--...=M@R@RR 	 ! r   c                     | 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   s_    9%%''--h77s3//000>ACDXDXX 	 #"r   c                     	 dd l }n# t          $ r t          d          w xY w|                    |          }| j                            t          |                    S )Nr   r3   )rN   )r?   rA   r@   r    issue_createdictrc   rs   r?   paramss       r   r   zJiraAPIWrapper.issue_create   st    	KKKK 	 	 	R  	 E""y%%T&\\%:::    !c                     	 dd l }n# t          $ r t          d          w xY w|                    |          } | j        j        di t          |          S )Nr   r3   r   )r?   rA   r@   r!   create_pager   r   s       r   page_createzJiraAPIWrapper.page_create   sv    	KKKK 	 	 	R  	 E""*t*::T&\\:::r   c                    	 dd l }n# t          $ r t          d          w xY w|                    |          }t          | j        |d                   } ||                    dg           i |                    di           S )Nr   r3   functionargskwargs)r?   rA   r@   getattrr    r`   )rc   rs   r?   r   jira_functions        r   otherzJiraAPIWrapper.other   s    	KKKK 	 	 	R  	 E""	6*+=>>}fjj44Q

8R8P8PQQQr   r*   c                 2   |dk    r|                      |          S |dk    r|                                 S |dk    r|                     |          S |dk    r|                     |          S |dk    r|                     |          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***:D::;;;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88K'+x}+++!%J%%%:  L _(###^$ ^3 ^ ^ ^ [ $#^@%4 %DJ % % % %NtDz d4j    !C !C ! ! ! !# # # # #;# ;# ; ; ; ;; ; ; ; ; ;	R3 	R3 	R 	R 	R 	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 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 ; ; ; ; ; ; ; ; ; ; ' ' ' ' ' '6 6 6 6 6i 6 6 6       l< l< l< l< l<Y l< l< l< l< l<r   