U
    TFd                     @   sR   d Z ddlmZ ddlZddlmZmZmZmZ G dd deZ	G dd dZ
dS )	zE
pip install git+https://github.com/yandex/yandex_tracker_client.git
    )DictN)TrackerClientcollectionsobjects
exceptionsc                       s$   e Zd Z fddZdd Z  ZS )Clientc                    s8   t  j|| |d| _|d| _| tj| _d S )Ntokenorg_id)	super__init__getr   r	   Z_get_collectionr   ZRolesrolesselfargskwargs	__class__  ./modules/tracker/tracker_api.pyr      s    zClient.__init__c                 C   s   | j j  d S N)Z_connectionZsessionclose)r   r   r   r   r      s    zClient.close)__name__
__module____qualname__r   r   __classcell__r   r   r   r   r   
   s   	r   c                   @   sz  e Zd ZdZd9ddZd:ddZeeef ddd	Z	d;d
dZ
d<ddZejejejddd=ddZejejejddd>ddZejejejdddd Zejejejdddd Zejejejdddd Zejejejdddd ZedddZd?ddZd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d) Zd+d, Zd-d. Z d/d0 Z!d1d2 Z"d3d4 Z#d5d6 Z$d7d8 Z%dS )@
TrackerApi2   Nc                 C   s   t ||d| _d| _|| _d S )N)r   r	   zhttps://tracker.yandex.ru)r   clientZurl
cmf_import)r   r   r	   r   r   r   r   r      s    zTrackerApi.__init__c                 c   s   d}d}d}d}|p| j }|r*||kr*|}t| j|}	|dkrBd}|	j|||d}
t|
tjrr|
j}|
|pn|}
|
sxq|
D ]"}|d7 }|r||kr q|V  q||d7 }|s|r||ks||krRqqRd S )Nallr      queuesz1projects,components,versions,types,team,workflows)expandperPagepage)	DEFAULT_PER_PAGEgetattrr   get_all
isinstancer   SeekablePaginatedListpages_countget_page)r   Zcollection_nameper_pager%   Zmax_resultsr#   Zcount_resultsZcurrent_pager+   Z
collectionitemsitemr   r   r   get_collection    s0    
zTrackerApi.get_collection)returnc                 C   sN   | j jjdd}t }|D ].}| }d|kr<|||d < q|||d < q|S )Nr    r#   keyid)r   fieldsr(   dictas_dict)r   r5   resZfieldr   r   r   
get_fields@   s    zTrackerApi.get_fieldsc                 K   s"   |r| j jj|ddS | jd|S )Nr    r2   users)r:   )r   r:   r   r0   r   r3   r   r   r   r   	get_usersL   s    zTrackerApi.get_usersc                 K   s"   |r| j jj|ddS | jd|S )Nr    r2   issues)r=   )r   r=   r   r0   r;   r   r   r   
get_issuesQ   s    zTrackerApi.get_issuesi,  )Zmax_timec                 C   s*   |p| j }| jjjd|idgd|d}|S )NqueueZ	createdAtr    )filterorderr#   r-   )r&   r   r=   find)r   Z	queue_keyr-   r=   r   r   r   get_issues_for_queueV   s    
zTrackerApi.get_issues_for_queuec                 C   s"   t |tjr||}|sd S |S r   )r)   r   r*   r,   )r   r=   r%   r   r   r   get_issues_for_queue_by_pagec   s
    
z'TrackerApi.get_issues_for_queue_by_pagec                 C   s   dd |j D }|S )Nc                 S   s   g | ]}|  qS r   r7   ).0Z
attachmentr   r   r   
<listcomp>o   s     z4TrackerApi.get_issue_attachments.<locals>.<listcomp>)attachments)r   issuerH   r   r   r   get_issue_attachmentsm   s    z TrackerApi.get_issue_attachmentsc                 C   s   |j j}|S r   )r?   	workflows)r   rI   rK   r   r   r   get_issue_workflowr   s    zTrackerApi.get_issue_workflowc                 C   s   dd |j jdddD }|S )Nc                 S   s   g | ]}|  qS r   rE   )rF   Zcommentr   r   r   rG   y   s     z1TrackerApi.get_issue_comments.<locals>.<listcomp>r    d   r#   r$   )commentsr(   )r   rI   rO   r   r   r   get_issue_commentsw   s    zTrackerApi.get_issue_commentsc                 C   s   dd |j jdddD }|S )Nc                 S   s   g | ]}|  qS r   rE   )rF   Zchanger   r   r   rG   ~   s     z2TrackerApi.get_issue_changelog.<locals>.<listcomp>r    rM   rN   )	changelogr(   )r   rI   rQ   r   r   r   get_issue_changelog|   s    zTrackerApi.get_issue_changelogc                 C   s   | j jjd|iddS )Nr?   T)r@   Z
count_only)r   r=   rB   r   r3   r   r   r   get_queue_issues_count   s    z!TrackerApi.get_queue_issues_countc                 K   s"   |r| j jj|ddS | jd|S )Nr    r2   r"   )r"   )r   r"   r   r0   r;   r   r   r   
get_queues   s    zTrackerApi.get_queuesc                 C   s   | j j|S r   )r   rH   r   rS   r   r   r   get_attachment   s    zTrackerApi.get_attachmentc                 O   s   | j d||S )Nr   )r   r0   r   r   r   r   	get_roles   s    zTrackerApi.get_rolesc                 O   s   | j d||S )Ngroups)rY   rW   r   r   r   r   
get_groups   s    zTrackerApi.get_groupsc                 O   s   | j d||S )Nissue_types)r[   rW   r   r   r   r   get_issue_types   s    zTrackerApi.get_issue_typesc                 O   s   | j d||S N
priorities)r^   rW   r   r   r   r   get_priorities   s    zTrackerApi.get_prioritiesc                 O   s   | j d||S r]   rW   r   r   r   r   r_      s    c                 O   s   | j d||S )Nstatuses)r`   rW   r   r   r   r   get_statuses   s    zTrackerApi.get_statusesc                 O   s   | j d||S )N	linktypes)rb   rW   r   r   r   r   get_linktypes   s    zTrackerApi.get_linktypesc                 O   s   | j d||S )Nscreens)rd   rW   r   r   r   r   get_screens   s    zTrackerApi.get_screensc                 O   s   | j d||S )NrK   )rK   rW   r   r   r   r   get_workflows   s    zTrackerApi.get_workflowsc                 O   s   | j d||S )Nboards)rg   rW   r   r   r   r   
get_boards   s    zTrackerApi.get_boardsc                 O   s   | j d||S )Nsprints)ri   rW   r   r   r   r   get_sprints   s    zTrackerApi.get_sprintsc                 O   s   | j d||S )Nprojects)rk   rW   r   r   r   r   get_projects   s    zTrackerApi.get_projects)N)NNN)N)N)N)N)N)&r   r   r   r&   r   r0   r   strr6   r9   r<   r>   backoffZon_exceptionZexpor   ZTrackerServerErrorrC   rD   rJ   rL   rP   rR   intrT   rU   rV   rX   rZ   r\   r_   ra   rc   re   rf   rh   rj   rl   r   r   r   r   r      sB   

 

	




r   )__doc__typingr   rn   Zyandex_tracker_clientr   r   r   r   r   r   r   r   r   r   <module>   s
   