U
    \cc                     @   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   sj   ddl m} |r|r"|s"|}n|}|||||||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   st   | j jstd d S | j d}tdddd}| j||d }|d sLd S |d E d H  |d	  |d
 7  < q.d S )Nup   Для серверной версии недоступна выгрузка всех пользователейz/wiki/rest/api/search/userr      z	type=user)r   r   Zcql)paramsr    r   r   )r   r
   printr   dictr   json)r   Zurir%   r"   r   r   r   get_all_users<   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-   K   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   r0   _   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_contentr1   r   r   r   get_root_pages_from_spacer   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 j|ddS )NZ
operations)r+   )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   rC   )Z	accountid)r   r
   get_account_idrB   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   rE      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$   r6   childrenr3   r    size)r   get_page_by_idr   Zget_page_child_by_typeappendlen)	r   idr   r   r3   rJ   r   Zchildren_iterZchr   r   r   rL      s    zConfluenceApi.get_page_by_id)NN)__name__
__module____qualname____doc__ZAPI_VERSIONZUSER_URIr<   rH   strboolr   r   r!   r)   listr-   r'   r0   r5   r7   classmethodr?   rA   rD   rG   rE   rL   r   r   r   r   r      s(   


r   )Zrequests.authr   Zcmf.includer   r   r   r   r   r   <module>   s   