U
    Pd                     @   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)_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                   @   s  e Zd ZdZd;d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dAd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%d9d: Z&dS )B
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   r6   resZfieldr   r   r   
get_fields@   s    zTrackerApi.get_fieldsc                 K   s"   |r| j jj|ddS | jd|S )Nr!   r3   users)r;   )r   r;   r   r1   r   r4   r   r   r   r   	get_usersL   s    zTrackerApi.get_usersc                 K   s"   |r| j jj|ddS | jd|S )Nr!   r3   issues)r>   )r   r>   r   r1   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   r8   ).0
attachmentr   r   r   
<listcomp>o   s     z4TrackerApi.get_issue_attachments.<locals>.<listcomp>)attachments)r   issuerJ   r   r   r   get_issue_attachmentsm   s    z TrackerApi.get_issue_attachmentsc                 C   s   |j j}|S r   )r@   	workflows)r   rK   rM   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   rF   )rG   Zcommentr   r   r   rI   y   s     z1TrackerApi.get_issue_comments.<locals>.<listcomp>r!   d   r$   r%   )commentsr)   )r   rK   rQ   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   rF   )rG   Zchanger   r   r   rI   ~   s     z2TrackerApi.get_issue_changelog.<locals>.<listcomp>r!   rO   rP   )	changelogr)   )r   rK   rS   r   r   r   get_issue_changelog|   s    zTrackerApi.get_issue_changelogc                 C   s   | j jjd|iddS )Nr@   T)rA   Z
count_only)r   r>   rC   r   r4   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!   r3   r#   )r#   )r   r#   r   r1   r<   r   r   r   
get_queues   s    zTrackerApi.get_queuesc                 C   s   | j j|S r   )r   rJ   r   rU   r   r   r   get_attachment   s    zTrackerApi.get_attachmentc                 O   s   | j d||S )Nr   )r   r1   r   r   r   r   	get_roles   s    zTrackerApi.get_rolesc                 O   s   | j d||S )Ngroups)r[   rY   r   r   r   r   
get_groups   s    zTrackerApi.get_groupsc                 O   s   | j d||S )Nissue_types)r]   rY   r   r   r   r   get_issue_types   s    zTrackerApi.get_issue_typesc                 O   s   | j d||S N
priorities)r`   rY   r   r   r   r   get_priorities   s    zTrackerApi.get_prioritiesc                 O   s   | j d||S r_   rY   r   r   r   r   ra      s    c                 O   s   | j d||S )Nstatuses)rb   rY   r   r   r   r   get_statuses   s    zTrackerApi.get_statusesc                 O   s   | j d||S )N	linktypes)rd   rY   r   r   r   r   get_linktypes   s    zTrackerApi.get_linktypesc                 O   s   | j d||S )Nscreens)rf   rY   r   r   r   r   get_screens   s    zTrackerApi.get_screensc                 O   s   | j d||S )NrM   )rM   rY   r   r   r   r   get_workflows   s    zTrackerApi.get_workflowsc                 O   s   | j d||S )Nboards)ri   rY   r   r   r   r   
get_boards   s    zTrackerApi.get_boardsc                 O   s   | j d||S )Nsprints)rk   rY   r   r   r   r   get_sprints   s    zTrackerApi.get_sprintsc                 O   s   | j d||S )Nprojects)rm   rY   r   r   r   r   get_projects   s    zTrackerApi.get_projectsc              	   C   s:   t |d&}| jjj|dD ]}|| qW 5 Q R X d S )Nzwb+)path)openr   r   streamwrite)r   rH   Z	directoryfchunkr   r   r   download   s    zTrackerApi.download)N)NNN)N)N)N)N)N)'r   r   r   r'   r   r1   r   strr7   r:   r=   r?   backoffZon_exceptionZexpor   ZTrackerServerErrorrD   rE   rL   rN   rR   rT   intrV   rW   rX   rZ   r\   r^   ra   rc   re   rg   rh   rj   rl   rn   ru   r   r   r   r   r      sD   

 

	




r   )__doc__typingr   rw   Zyandex_tracker_clientr   r   r   r   r   r   r   r   r   r   <module>   s
   