U
    h                     @   sL   d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
 G dd deZdS )zUtil that calls Jira.    )AnyDictListOptional)	BaseModelroot_validator)get_from_dict_or_envc                   @   s  e Zd ZU dZeed< eed< dZee ed< dZ	ee ed< dZ
ee ed< dZee ed< G d	d
 d
ZeddeedddZeee dddZee ee dddZeedddZedddZeedddZeedddZeedd d!Zeeed"d#d$ZdS )%JiraAPIWrapperzWrapper for Jira API.jira
confluenceNjira_usernamejira_api_tokenjira_instance_url
jira_cloudc                   @   s   e Zd ZdZdS )zJiraAPIWrapper.ConfigZforbidN)__name__
__module____qualname__extra r   r   F/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/utilities/jira.pyConfig   s   r   T)pre)valuesreturnc                 C   s   t |dddd}||d< t |dd}||d< t |dd}||d< t |d	d
}| dk}||d	< zddlm}m} W n tk
r   tdY nX |dkr||||d}	n|||||d}	|||||d}
|	|d< |
|d< |S )z?Validate that api key and python package exists in environment.r   ZJIRA_USERNAME )defaultr   ZJIRA_API_TOKENr   ZJIRA_INSTANCE_URLr   Z
JIRA_CLOUDtruer   )
ConfluenceJiraz`atlassian-python-api is not installed. Please install it with `pip install atlassian-python-api`)urltokencloud)r   usernamepasswordr!   r
   r   )r   lowerZ	atlassianr   r   ImportError)clsr   r   r   r   Zjira_cloud_strr   r   r   r
   r   r   r   r   validate_environment   sb           
z#JiraAPIWrapper.validate_environment)issuesr   c                 C   s4  g }|d D ] }|d }|d d }|d d dd }|d d d	 }|d d
 d	 }z|d d d }	W n t k
r   d}	Y nX i }
|d d D ]z}d| kr|d d }|d d }|d d d }d| kr|d d }|d d }|d d d }|||d}
q|||||	|||
d q|S )Nr(   keyfieldssummarycreatedr   
   prioritynamestatusassigneeZdisplayNameNoneZ
issuelinksZinwardIssuetypeZinwardZoutwardIssueZoutward)r3   r)   r+   )r)   r+   r,   r1   r.   r0   Zrelated_issues)	Exceptionkeysappend)selfr(   parsedissuer)   r+   r,   r.   r0   r1   Z
rel_issuesZrelated_issueZrel_typeZrel_keyZrel_summaryr   r   r   parse_issuesO   sB    
zJiraAPIWrapper.parse_issues)projectsr   c           	   	   C   sP   g }|D ]B}|d }|d }|d }|d }|d }| |||||d q|S )Nidr)   r/   ZprojectTypeKeystyle)r<   r)   r/   r3   r=   )r6   )	r7   r;   r8   projectr<   r)   r/   r3   r=   r   r   r   parse_projectss   s    zJiraAPIWrapper.parse_projects)queryr   c                 C   s6   | j |}| |}dtt| d t| }|S )NFound z	 issues:
)r
   jqlr:   strlen)r7   r@   r(   Zparsed_issuesZparsed_issues_strr   r   r   search   s
    
zJiraAPIWrapper.search)r   c                 C   s4   | j  }| |}dtt| d t| }|S )NrA   z projects:
)r
   r;   r?   rC   rD   )r7   r;   Zparsed_projectsZparsed_projects_strr   r   r   r>      s
    

zJiraAPIWrapper.projectc                 C   sF   zdd l }W n tk
r(   tdY nX ||}| jjt|dS )Nr   @json is not installed. Please install it with `pip install json`)r*   )jsonr%   loadsr
   issue_createdictr7   r@   rG   paramsr   r   r   rI      s    

zJiraAPIWrapper.issue_createc                 C   sF   zdd l }W n tk
r(   tdY nX ||}| jjf t|S )Nr   rF   )rG   r%   rH   r   create_pagerJ   rK   r   r   r   page_create   s    

zJiraAPIWrapper.page_createc                 C   s^   zdd l }W n tk
r(   tdY nX ||}t| j|d }||dg |di S )Nr   rF   functionargskwargs)rG   r%   rH   getattrr
   get)r7   r@   rG   rL   Zjira_functionr   r   r   other   s    

zJiraAPIWrapper.other)moder@   r   c                 C   sj   |dkr|  |S |dkr"|  S |dkr4| |S |dkrF| |S |dkrX| |S td| d S )NrB   Zget_projectsZcreate_issuerT   rM   zGot unexpected mode )rE   r>   rI   rT   rN   
ValueError)r7   rU   r@   r   r   r   run   s    



zJiraAPIWrapper.run)r   r   r   __doc__r   __annotations__r   r   rC   r   r   r   boolr   r   r   r'   r   rJ   r:   r?   rE   r>   rI   rN   rT   rW   r   r   r   r   r	   
   s$   
7$

r	   N)rX   typingr   r   r   r   Zlangchain_core.pydantic_v1r   r   Zlangchain_core.utilsr   r	   r   r   r   r   <module>   s   