o
    |qi&%                     @   s   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 deZG dd	 d	eZG d
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                   @   s$   e Zd ZU dZeed< 	 eed< dS )JiraOauth2TokenzJira OAuth2 token.Zaccess_token
token_typeN)__name__
__module____qualname____doc__str__annotations__ r   r   i/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/langchain_community/utilities/jira.pyr   
      
 r   c                   @   s$   e Zd ZU dZeed< 	 eed< dS )
JiraOauth2zJira OAuth2.Z	client_idtokenN)r   r   r   r   r   r   r   r   r   r   r   r      r   r   c                   @   sL  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
dZeddededefddZdedee fddZdee dee fddZde
de
fddZde
fddZde
de
fddZde
de
fdd Zde
de
fd!d"Z d#e
de
de
fd$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_cloudZforbid)extrabefore)modevaluesreturnc              
   C   s  t |dddd}||d< t |dddd}||d< t |dddd}||d< |rVt|trVzd	d
l}||}W n tyA   td |jjyU } ztd| d
}~ww t |dd}||d< d|v rr|d d
urrt|d |d< t |dd}|	 dk}	|	|d< |r|rtdz
d	dl
m}
m} W n ty   tdw |r|dkr||||	d}n|||||	d}|
||||	d}n|r||||	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_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   ZJIRA_INSTANCE_URLr    Z
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,   Zoauth2r-   r   r   )r   
isinstancer   jsonloadsImportErrordecoderJSONDecodeError
ValueErrorlowerZ	atlassianr*   r+   )clsr$   r   r   r   r1   er   Zjira_cloud_strr    r*   r+   r   r   r   r   r   validate_environment8   s   z#JiraAPIWrapper.validate_environmentissuesc                 C   sD  g }|d D ]}|d }|d d }|d d dd }d|d v r+|d d d	 }nd }|d d
 d	 }z
|d d d }	W n t yJ   d}	Y nw i }
|d dg D ]<}d| v rq|d d }|d d }|d d d }d| v r|d d }|d d }|d d d }|||d}
qU|||||	|||
d q|S )Nr;   keyfieldssummarycreatedr   
   prioritynamestatusassigneeZdisplayNameNoneZ
issuelinksZinwardIssuetypeZinwardZoutwardIssueZoutward)rF   r<   r>   )r<   r>   r?   rD   rA   rC   Zrelated_issues)	Exceptiongetkeysappend)selfr;   parsedissuer<   r>   r?   rA   rC   rD   Z
rel_issuesZrelated_issueZrel_typeZrel_keyZrel_summaryr   r   r   parse_issues   sH   zJiraAPIWrapper.parse_issuesprojectsc           	   	   C   sT   g }|D ]#}|d }|d }|d }| d}| d}||||||d q|S )Nidr<   rB   ZprojectTypeKeystyle)rP   r<   rB   rF   rQ   )rH   rJ   )	rK   rO   rL   projectrP   r<   rB   rF   rQ   r   r   r   parse_projects   s   

zJiraAPIWrapper.parse_projectsqueryc                 C   s6   | j |}| |}dtt| d t| }|S )NFound z	 issues:
)r   jqlrN   r   len)rK   rT   r;   Zparsed_issuesZparsed_issues_strr   r   r   search   s
   
zJiraAPIWrapper.searchc                 C   s4   | j  }| |}dtt| d t| }|S )NrU   z projects:
)r   rO   rS   r   rW   )rK   rO   Zparsed_projectsZparsed_projects_strr   r   r   rR      s
   

zJiraAPIWrapper.projectc                 C   s@   zdd l }W n ty   tdw ||}| jjt|dS )Nr   r(   )r=   )r1   r3   r2   r   issue_createdictrK   rT   r1   paramsr   r   r   rY      s   
zJiraAPIWrapper.issue_createc                 C   sD   zdd l }W n ty   tdw ||}| jjdi t|S )Nr   r(   r   )r1   r3   r2   r   create_pagerZ   r[   r   r   r   page_create   s   
zJiraAPIWrapper.page_createc                 C   s\   zdd l }W n ty   tdw ||}t| j|d }||dg i |di S )Nr   r(   functionargskwargs)r1   r3   r2   getattrr   rH   )rK   rT   r1   r\   Zjira_functionr   r   r   other   s   
zJiraAPIWrapper.otherr#   c                 C   sf   |dkr	|  |S |dkr|  S |dkr| |S |dkr#| |S |dkr,| |S td| )NrV   Zget_projectsZcreate_issuerc   r]   zGot unexpected mode )rX   rR   rY   rc   r^   r6   )rK   r#   rT   r   r   r   run   s   



zJiraAPIWrapper.run)"r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    boolr	   Zmodel_configr
   classmethodr   r:   r   rZ   rN   rS   rX   rR   rY   r^   rc   rd   r   r   r   r   r      s2   
 `'

r   N)r   typingr   r   r   r   r   Zlangchain_core.utilsr   Zpydanticr   r	   r
   Ztyping_extensionsr   r   r   r   r   r   r   r   <module>   s    	
