U
    Vc                     @   s.   d dl mZ d dlT d dlZG dd dZdS )    )HTTPBasicAuth)*Nc                   @   s   e Zd ZdZdZe dZdZdZeeeee	e	dddd	Z
d
d Zdd Zdd ZeeedddZeeedddZeeedddZdd Zedd Zdd Zdd Zd d! Zd&d"d#Zd$d% ZdS )'ConfluenceApiuK    Подключение по API к учетной записи Confluence z/rest/api/3z/user   z"/wiki/rest/api/user/bulk/migrationN)urllogintokenpasswordcloud
verify_sslreturnc                 C   sd   ddl m} |r|r|s|}|||||||d| _dd| i| _|| _|| _|| _|| _|| _d S )Nr   )
Confluence)r   usernamer	   r   r
   r   ZAuthorizationzBearer )	Z	atlassianr   connheadersr   r   r	   r   r   )selfr   r   r   r	   r
   r   r    r   ./modules/confluence/api.py__init__   s"    zConfluenceApi.__init__c                 O   sJ   | j r,| jr,tj|| j | jf| jd|S tj|| j| jd|S d S )N)authverify)r   r   )r   r	   requestsgetr   r   )r   argskwargsr   r   r   confluence_request!   s     z ConfluenceApi.confluence_requestc                 c   sL   d}d}| j jd||d}|rH|ds*qH|d D ]
}|V  q2||7 }qdS )u   
        Получим все пространства из Confluence

        :return: Список всех пространств
        r   d   global)Z
space_typestartlimitresultsN)r   get_all_spacesr   )r   r   r   resrowr   r   r   r!   '   s    zConfluenceApi.get_all_spacesc                 c   s`   | j  d}tdddd}| j||d }|d s8d S |d E d H  |d  |d	 7  < qd S )
Nz/wiki/rest/api/search/userr      z	type=user)r   r   Zcql)paramsr    r   r   )r   dictr   json)r   Zurir%   r"   r   r   r   get_all_users8   s    zConfluenceApi.get_all_users)id_docsexpandr   c                 c   sN   d}d}| j j||||d}|rJ|ds,qJ|d D ]
}|V  q4||7 }qdS )u  
        Получим все комментарии к документу.

        :param id_docs: Идентификатор документа.
        :param expand: Расширить свойствами.

        :return: Список всех комментариев.
        r   r$   r*   r   r   r    N)r   get_page_commentsr   )r   r)   r*   r   r   r"   r#   r   r   r   r,   D   s    	zConfluenceApi.get_page_comments)	key_spacer*   r   c                 c   s@   d}d}| j j||||d}|D ]
}|V  q |s2q<||7 }qdS )u^  
        Получим все документы из пространства.

        :param key_space: Идентификатор пространства.
        :param expand: Дополнительные данные по документам.

        :return: Соответствие id документа и его данных.
        r   2   r+   N)r   get_all_pages_from_spacer   r-   r*   r   r   r"   r#   r   r   r   r/   X   s    	z&ConfluenceApi.get_all_pages_from_spacec                 c   sL   d}d}| j j|d|||dd}|d D ]
}|V  q(|d s>qH||7 }qdS )ui  
        Получим все документы из корня пространства.

        :param key_space: Идентификатор пространства.
        :param expand: Дополнительные данные по документам.

        :return: Соответствие id документа и его данных.
        r   r.   rootpage)depthr*   r   r   Zcontent_typer    N)r   Zget_space_contentr0   r   r   r   get_root_pages_from_spacek   s    	z'ConfluenceApi.get_root_pages_from_spacec                 c   sL   d}d}| j j|||d}|rH|ds*qH|d D ]
}|V  q2||7 }qd S )Nr   r.   r   r   r    )r   Zget_attachments_from_contentr   )r   Zpage_idr   r   r"   r#   r   r   r   get_all_attachment   s    z ConfluenceApi.get_all_attachmentc           	      C   sH   t ||}ddi}t| jD ]&}tj||||dd}|jdkr qDq|S )NZAcceptzapplication/json
   )r   r%   r   timeout   )r   rangeRETRY_COUNTr   r   Zstatus_code)	clsr   r   r   r%   r   r   ir"   r   r   r   call   s    
   
zConfluenceApi.callc                 C   s   | j j|dS )N)userkey)r   Zget_user_details_by_userkey)r   r?   r   r   r   get_user_info_by_key   s    z"ConfluenceApi.get_user_info_by_keyc                 C   s   | j |S )N)r   get_user_details_by_accountid)r   	accountIdr   r   r   get_user_info   s    zConfluenceApi.get_user_infoc                 C   s4   | j jr&| j|d}| j j|d dS | j j|dS )N)r   rB   )Z	accountid)r   r
   get_account_idrA   Zget_user_details_by_username)r   r   userr   r   r   get_user_info_by_username   s    z'ConfluenceApi.get_user_info_by_usernamec                 C   s>   |rd|i}nd|i}|  | j | j |}| d d S )Nr   r?   r    r   )r   r   USER_ACCOUNTS_ID_URIr'   )r   r   r?   r%   r"   r   r   r   rD      s    
zConfluenceApi.get_account_idc           	      O   s   | j j|f||}d|ddkrg }d}| j j||dd}|d7 }|sLqb|D ]}|| qPq,||d d d	< t||d d d
< |S )Nzchildren.pager*    r   r$   r5   childrenr2   r    size)r   get_page_by_idr   Zget_page_child_by_typeappendlen)	r   idr   r   r2   rI   r   Zchildren_iterZchr   r   r   rK      s    zConfluenceApi.get_page_by_id)NN)__name__
__module____qualname____doc__ZAPI_VERSIONZUSER_URIr;   rG   strboolr   r   r!   r(   listr,   r&   r/   r4   r6   classmethodr>   r@   rC   rF   rD   rK   r   r   r   r   r      s(   


r   )Zrequests.authr   Zcmf.includer   r   r   r   r   r   <module>   s   