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__ '/opt/crm/modules/tracker/tracker_api.pyr      s    zClient.__init__c                 C   s   | j j  d S N)_connection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   client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   collection_nameper_pager(   max_resultsr&   Zcount_resultsZcurrent_pager.   
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   r;   resfieldr   r   r   
get_fields@   s    zTrackerApi.get_fieldsc                 K   s"   |r| j jj|ddS | jd|S )Nr#   r8   users)rA   )r    rA   r   r6   r   r9   r   r   r   r   	get_usersL   s    zTrackerApi.get_usersc                 K   s"   |r| j jj|ddS | jd|S )Nr#   r8   issues)rD   )r    rD   r   r6   rB   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queue	createdAtr#   )filterorderr&   r1   )r)   r    rD   find)r   Z	queue_keyr1   rD   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   rD   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   r=   ).0
attachmentr   r   r   
<listcomp>o   s     z4TrackerApi.get_issue_attachments.<locals>.<listcomp>)attachments)r   issuerQ   r   r   r   get_issue_attachmentsm   s    z TrackerApi.get_issue_attachmentsc                 C   s   |j j}|S r   )rF   	workflows)r   rR   rT   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   rM   )rN   commentr   r   r   rP   y   s     z1TrackerApi.get_issue_comments.<locals>.<listcomp>r#   d   r&   r'   )commentsr+   )r   rR   rY   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   rM   )rN   changer   r   r   rP   ~   s     z2TrackerApi.get_issue_changelog.<locals>.<listcomp>r#   rW   rX   )	changelogr+   )r   rR   r\   r   r   r   get_issue_changelog|   s    zTrackerApi.get_issue_changelogc                 C   s   | j jjd|iddS )NrF   T)rH   Z
count_only)r    rD   rJ   r   r9   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#   r8   r%   )r%   )r    r%   r   r6   rB   r   r   r   
get_queues   s    zTrackerApi.get_queuesc                 C   s   | j j|S r   )r    rQ   r   r^   r   r   r   get_attachment   s    zTrackerApi.get_attachmentc                 O   s   | j d||S )Nr   )r   r6   r   r   r   r   	get_roles   s    zTrackerApi.get_rolesc                 O   s   | j d||S )Ngroups)rd   rb   r   r   r   r   
get_groups   s    zTrackerApi.get_groupsc                 O   s   | j d||S )Nissue_types)rf   rb   r   r   r   r   get_issue_types   s    zTrackerApi.get_issue_typesc                 O   s   | j d||S N
priorities)ri   rb   r   r   r   r   get_priorities   s    zTrackerApi.get_prioritiesc                 O   s   | j d||S rh   rb   r   r   r   r   rj      s    c                 O   s   | j d||S )Nstatuses)rk   rb   r   r   r   r   get_statuses   s    zTrackerApi.get_statusesc                 O   s   | j d||S )N	linktypes)rm   rb   r   r   r   r   get_linktypes   s    zTrackerApi.get_linktypesc                 O   s   | j d||S )Nscreens)ro   rb   r   r   r   r   get_screens   s    zTrackerApi.get_screensc                 O   s   | j d||S )NrT   )rT   rb   r   r   r   r   get_workflows   s    zTrackerApi.get_workflowsc                 O   s   | j d||S )Nboards)rr   rb   r   r   r   r   
get_boards   s    zTrackerApi.get_boardsc                 O   s   | j d||S )Nsprints)rt   rb   r   r   r   r   get_sprints   s    zTrackerApi.get_sprintsc                 O   s   | j d||S )Nprojects)rv   rb   r   r   r   r   get_projects   s    zTrackerApi.get_projects)N)NNN)N)N)N)N)N)&r   r   r   r)   r   r6   r   strr<   r@   rC   rE   backoffZon_exceptionZexpor   ZTrackerServerErrorrK   rL   rS   rU   rZ   r]   intr_   r`   ra   rc   re   rg   rj   rl   rn   rp   rq   rs   ru   rw   r   r   r   r   r      sB   

 

	




r   )__doc__typingr   ry   Zyandex_tracker_clientr   r   r   r   r   r   r   r   r   r   <module>   s
   