B
    bEf                 @   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                sD   t  j|| |d| _|d| _|d| _| tj| _	d S )Ntokenorg_idcloud_org_id)
super__init__getr   r	   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               @   sz  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/d0 Z!d1d2 Z"d3d4 Z#d5d6 Z$d7d8 Z%d9d: Z&dS )B
TrackerApi2   FNc             C   s2   |rt ||d| _nt ||d| _d| _|| _d S )N)r   r
   )r   r	   zhttps://tracker.yandex.ru)r   clientZurl
cmf_import)r   r   r	   Zcloudr   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}
xvt|
tjrt|
j}|
|pp|}
|
szP x(|
D ] }|d7 }|r||krP |V  qW |d7 }|s|r||ks||krTP qTW d 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$   s2    


zTrackerApi.get_collection)returnc             C   sR   | j jjdd}t }x6|D ].}| }d|kr>|||d < q|||d < qW |S )Nr   )r"   keyid)r   fieldsr'   dictas_dict)r   r3   ZresZfieldr   r   r   
get_fieldsD   s    
zTrackerApi.get_fieldsc             K   s"   |r| j jj|ddS | jd|S )Nr   )r"   users)r7   )r   r7   r   r/   )r   r1   r   r   r   r   	get_usersP   s    zTrackerApi.get_usersc             K   s"   |r| j jj|ddS | jd|S )Nr   )r"   issues)r9   )r   r9   r   r/   )r   r1   r   r   r   r   
get_issuesU   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   r9   find)r   Z	queue_keyr,   r9   r   r   r   get_issues_for_queueZ   s    
zTrackerApi.get_issues_for_queuec             C   s"   t |tjr||}|sd S |S )N)r(   r   r)   r+   )r   r9   r$   r   r   r   get_issues_for_queue_by_pageg   s
    
z'TrackerApi.get_issues_for_queue_by_pagec             C   s   dd |j D }|S )Nc             S   s   g | ]}|  qS r   )r5   ).0
attachmentr   r   r   
<listcomp>s   s    z4TrackerApi.get_issue_attachments.<locals>.<listcomp>)attachments)r   issuerD   r   r   r   get_issue_attachmentsq   s    z TrackerApi.get_issue_attachmentsc             C   s   |j j}|S )N)r;   	workflows)r   rE   rG   r   r   r   get_issue_workflowv   s    zTrackerApi.get_issue_workflowc             C   s   dd |j jdddD }|S )Nc             S   s   g | ]}|  qS r   )r5   )rA   commentr   r   r   rC   }   s    z1TrackerApi.get_issue_comments.<locals>.<listcomp>r   d   )r"   r#   )commentsr'   )r   rE   rK   r   r   r   get_issue_comments{   s    zTrackerApi.get_issue_commentsc             C   s   dd |j jdddD }|S )Nc             S   s   g | ]}|  qS r   )r5   )rA   Zchanger   r   r   rC      s    z2TrackerApi.get_issue_changelog.<locals>.<listcomp>r   rJ   )r"   r#   )	changelogr'   )r   rE   rM   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   r9   r>   )r   r1   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   )r"   r!   )r!   )r   r!   r   r/   )r   r1   r   r   r   r   
get_queues   s    zTrackerApi.get_queuesc             C   s   | j j|S )N)r   rD   r   )r   r1   r   r   r   get_attachment   s    zTrackerApi.get_attachmentc             O   s   | j d||S )Nr   )r   )r/   )r   r   r   r   r   r   	get_roles   s    zTrackerApi.get_rolesc             O   s   | j d||S )Ngroups)rS   )r/   )r   r   r   r   r   r   
get_groups   s    zTrackerApi.get_groupsc             O   s   | j d||S )Nissue_types)rU   )r/   )r   r   r   r   r   r   get_issue_types   s    zTrackerApi.get_issue_typesc             O   s   | j d||S )N
priorities)rW   )r/   )r   r   r   r   r   r   get_priorities   s    zTrackerApi.get_prioritiesc             O   s   | j d||S )Nstatuses)rY   )r/   )r   r   r   r   r   r   get_statuses   s    zTrackerApi.get_statusesc             O   s   | j d||S )N	linktypes)r[   )r/   )r   r   r   r   r   r   get_linktypes   s    zTrackerApi.get_linktypesc             O   s   | j d||S )Nscreens)r]   )r/   )r   r   r   r   r   r   get_screens   s    zTrackerApi.get_screensc             O   s   | j d||S )NrG   )rG   )r/   )r   r   r   r   r   r   get_workflows   s    zTrackerApi.get_workflowsc             O   s   | j d||S )Nboards)r`   )r/   )r   r   r   r   r   r   
get_boards   s    zTrackerApi.get_boardsc             O   s   | j d||S )Nsprints)rb   )r/   )r   r   r   r   r   r   get_sprints   s    zTrackerApi.get_sprintsc             O   s   | j d||S )Nprojects)rd   )r/   )r   r   r   r   r   r   get_projects   s    zTrackerApi.get_projectsc          	   C   s>   t |d*}x"| jjj|dD ]}|| qW W d Q R X d S )Nzwb+)path)openr   r   streamwrite)r   rB   Z	directoryfchunkr   r   r   download   s    zTrackerApi.download)FN)NNN)N)N)N)N)N)'r   r   r   r%   r   r/   r   strr4   r6   r8   r:   backoffZon_exceptionZexpor   ZTrackerServerErrorr?   r@   rF   rH   rL   rN   intrO   rP   rQ   rR   rT   rV   rX   rZ   r\   r^   r_   ra   rc   re   rl   r   r   r   r   r      s:   

 

	
r   )__doc__typingr   rn   Zyandex_tracker_clientr   r   r   r   r   r   r   r   r   r   <module>   s
   