U
    Og]                     @   sF  d dl Z d dlZd dlZddlmZ ddlmZ e eZ	e
dZG dd dZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZdS )&    N   )YouTrackError)query_fieldsz	\{(\w+)\}c                   @   sx   e Zd ZdZdddZdd Zdd Zd	d
 Zedd Z	edd Z
dddZdddZdddZdd Zdd ZdS )
Collection(   z$skipz$top)skiptopc                 K   s   || _ || _d S N)_connection_vars)selfZ
connectionkwargs r   1./modules/youtrack/youtrack_client/collections.py__init__   s    zCollection.__init__c                 C   s
   |  |S r	   )get)r   keyr   r   r   __getitem__   s    zCollection.__getitem__c                 C   s   t |  S r	   )iterget_allr   r   r   r   __iter__   s    zCollection.__iter__c                 C   s   d S r	   r   r   r   r   r   path   s    zCollection.pathc                 C   s
   d d dS )N)idringIdr   r   r   r   r   fields!   s    zCollection.fieldsNc                 K   sR   |sd S t |tr"tt|| _| |\}}|jf |}|f |||d|S )N)r   paramsdata)
isinstancestrseturl_slots_refindall	url_slots_extract_paramsformat)r   methodr   r   r   r   
url_paramsr   r   r   _execute_request(   s    
zCollection._execute_requestc                 C   s   |pi }dt | jddi}i }|dd }|s4| j}t|trLt||d< n||d< | j D ]$\}}|| j	krz|||< q^|||< q^| D ]B\}}|| j	kr|||< q| j
|}|d k	r|||< q|||< q| j	D ]}||krd||< q||fS )NZapi_rootZapir    )getattrr
   popr   r   dictr   r   itemsr#   _pagination_paramsr   )r   r   r'   Z
get_paramsr   kvZpagination_paramr   r   r   r$   4   s0    









zCollection._extract_paramsc                 k   s   d|krd|d< d|kr"| j |d< |r:|d |kr:||d< d}| j| jj|pP| j|d}|s`|S |D ]8}|d7 }d|kr|d|d< |V  |rd||krd qqd|d  |d 7  < |r||kst||d k r>qq>d S )Nr   r   r   r   r   r   	shortNamer   )DEFAULT_TOPr(   r
   r   r   len)r   r   Zmax_resultsr   Zresults_countresultsresultr   r   r   r   W   s:    
zCollection.get_allc                 K   s8   ||d< | j | jj| j|d}d|kr4|d|d< |S )Nr   r1   r2   r   )r(   r
   r   r   )r   r   r   r6   r   r   r   r   y   s    zCollection.getc                 K   s   || j f|S r	   )r
   )r   Z
collectionr   r   r   r   _associated   s    zCollection._associated)NN)N)NN)__name__
__module____qualname__r3   r.   r   r   r   propertyr   r   r(   r$   r   r   r7   r   r   r   r   r      s   




#
"r   c                   @   s\   e Zd ZdZddddddddddddddddddddddddddid	Zd	d
 ZdS )Usersz/{api_root}/users/{id}NZgeneral)r   presentationpatternZdatePattern)r   r=   offset)r   namelocalelanguageZ	community)r   ZdateFieldFormattimezonerA   )	r   loginfullNameemailr   guestbanned	avatarUrlZprofilesc                 K   s   d}| j | jj||dS )Nz/{api_root}/users/mer1   )r(   r
   r   )r   r   r   r   r   r   me   s    zUsers.me)r8   r9   r:   r   r   rJ   r   r   r   r   r<      s<   "r<   c                   @   sV   e Zd ZdZddddddddddddddddddddddddZedddZdS )Projectsz/{api_root}/admin/projects/{id}Nr   r   rD   rF   )r   r   archivedZ	createdBydescriptionZ	fromEmailZiconUrlZleaderr@   ZreplyToEmailr2   ZisDemotemplateZhasArticlesZ
restrictedprojectc                 C   s   g }| j t|d dD ]d}d |d< |d d d rp|d d d }|d d }| j t||d	}d
d |D |d< || q|S )Nr   rP   valuesfield	fieldTypeisBundleType	valueTypebundlerW   r   c                 S   s   g | ]}|qS r   r   .0_r   r   r   
<listcomp>   s     z*Projects.custom_fields.<locals>.<listcomp>)r7   ProjectCustomFieldsBundleElementsappend)r   rQ   Zfields_rS   bundle_type	bundle_idbundle_elementsr   r   r   custom_fields   s    zProjects.custom_fields)r8   r9   r:   r   r   r,   rc   r   r   r   r   rK      s4   rK   c                %   @   s   e Zd ZdZddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd	d
dddZdS )r]   z6/{api_root}/admin/projects/{project}/customFields/{id}N)r   r@   rL   r   r@   r   )$typer   r   rM   assembleDaterI   rN   rE   
isResolvedlocalizedNamerD   r@   ordinalownerreleaseDatereleased	startDateteamForProject
usersCount)r   isUpdateabler@   )r   r@   emptyFieldText
canBeEmptyisPublicrW   defaultValues)r   rU   isMultiValuer=   rV   )r   rh   r@   ri   aliasesfieldDefaultsrT   )r   rW   rr   rt   rq   rS   rs   ri   r8   r9   r:   r   r   r   r   r   r   r]      s   +8r]   c                   @   sT   e Zd ZdZddddddddidddddddddddddddddddddZdS )r^   zB/{api_root}/admin/customFieldSettings/bundles/{bundle}/{id}/valuesNZ
backgroundrL   rd   )re   r   r   rM   rf   rI   ZcolorrN   rE   rg   rh   rD   r@   ri   rj   rk   rl   rm   rn   ro   rx   r   r   r   r   r^   I  s>    r^   c                   @   s*   e Zd ZdZddddddddddd
ZdS )IssueLinkTypesz/{api_root}/issueLinkTypes/{id}N)
r   r@   rh   sourceToTargetlocalizedSourceToTargettargetToSourcelocalizedTargetToSourcedirectedaggregationZreadOnlyrx   r   r   r   r   ry   n  s   ry   c                /   @   s  e Zd ZdZdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd	dd
dddddddidddddddddddddddddddddddddddddddddddddddddddddddZd+ddZejeje	ddd,e
dddZedddZedddZeddd Zedd!d"Zedd#d$Zedd%d&Zedd'd(Zedd)d*ZdS )-Issuesz/{api_root}/issues/{id}NrL   )r   authorcreatedr@   sizeurlr   r@   rh   )r   
idReadable)r   	directionlinkTypeissues)r   r   r@   r2   )r   ZhasVoteZoriginalZissueWatchers)userZ	isStarredr   r   summary)r   rV   )r   r@   rh   rT   )r   rS   )r   r@   rh   minutesr=   isEstimationisSpentTimerN   rg   buildIntegration	buildLinktextr   rD   rF   rG   rE   allUsersGroupicon)r   r@   ZprojectCustomFieldvalue)r   attachmentsZcommentsCountr   rN   Z
draftOwnerr   ZisDraftZnumberInProjectparentrQ   ZreporterZresolvedr   updatedZupdater
visibilityZvotersZvotesZwatchersZwikifiedDescriptionZmentionedArticlesZmentionedIssuesZmentionedUsersZcustomFieldsc                 K   sF   d| }|r|d| d7 }|r2|d| d7 }||d< | j f |S )N	project:  AND updated: {} .. * AND updated: * .. {}query)r   )r   project_key
start_dateend_dater   r   r   r   r   for_project  s    
zIssues.for_project<   )Zmax_time)returnc           
      K   s   d}dd i|d< d| }|r.|d| d7 }|rB|d| d7 }d	|i}| j | jj|||d
}|d }	|	dkrtd t t|	S )Nz/{api_root}/issuesGetter/countcountr   r   r   r   r   r   r   )r   r   r   z?YouTrack has not finished counting the issues yet, retrying ...)r(   r
   ZpostloggerZwarningr   int)
r   r   r   r   r   r   r   r   Zresponser   r   r   r   r     s*    
zIssues.countissuec                 C   s   | j t|d dS Nr   r   )r7   IssueCommentsr   r   r   r   r   comments1  s    zIssues.commentsc                 C   s   | j t|d dS r   )r7   IssueAttachmentsr   r   r   r   r   4  s    zIssues.attachmentsc                 C   s   | j t|d dS r   )r7   
IssueLinksr   r   r   r   links7  s    zIssues.linksc                 C   s   | j t|d dS r   )r7   IssueSprintsr   r   r   r   sprints:  s    zIssues.sprintsc                 C   s   | j t|d dS r   )r7   IssueTimeTrackingr   r   r   r   time_tracking=  s    zIssues.time_trackingc                 C   s   | j t|d dS r   )r7   IssueActivityItemsr   r   r   r   
activities@  s    zIssues.activitiesc                 C   s   | j t|d dS r   )r7   Tagsr   r   r   r   tagsC  s    zIssues.tagsc                 C   s   | j t|d dS r   )r7   IssueCustomFieldsr   r   r   r   rc   F  s    zIssues.custom_fields)NN)NN)r8   r9   r:   r   r   r   backoffZon_exceptionZexpor   r   r   r,   r   r   r   r   r   r   r   rc   r   r   r   r   r   ~  s  
 

r   c                   @   s^   e Zd ZdZdddddddddddddddddddddddddddddddZdS )	r   z(/{api_root}/issues/{issue}/comments/{id}N)r   r@   r   rL   r   r   r   r@   )ZpermittedUsersZpermittedGroups)r   r   r   r   Zdeletedr   Zpinnedr   textPreviewr   r   rx   r   r   r   r   r   J  s@   r   c                   @   sN   e Zd ZdZddddddddddddddddddddddddiddZdS )r   z+/{api_root}/issues/{issue}/attachments/{id}NrL   r   r   )r   r@   r   r   r   r   	extensioncharsetZmimeTypeZmetaDataZdraftZremovedZbase64Contentr   r   ZcommentZthumbnailURLrx   r   r   r   r   r   t  s8    r   c                   @   sF   e Zd ZdZddddddddddddd	dddddddddZdS )r   z%/{api_root}/issues/{issue}/links/{id}N)	r   r@   rh   rz   r{   r|   r}   r~   r   r   )r   r   Z
issuesSizer   r   ZtrimmedIssuesrx   r   r   r   r   r     s.   r   c                
   @   s(   e Zd ZdZdddddddddd	ZdS )r   z"/{api_root}/issues/{issue}/sprintsN)	r   Zagiler@   ZgoalstartZfinishrM   Z	isDefaultZunresolvedIssuesCountrx   r   r   r   r   r     s   r   c                   @   sN   e Zd ZdZddddddddddddddddddddddddd
ZdS )r   z1/{api_root}/issues/{issue}/timeTracking/workItemsNrL   )r   r@   ZautoAttached)r   r   r=   )
r   r   Zcreatorr   r   typer   r   Zdurationdaterx   r   r   r   r   r     s4   r   c                   @   s   e Zd ZdZi ZdS )r   z*/{api_root}/issues/{issue}/activities/{id}Nrx   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZddiZdS )r   z/{api_root}/issues/{issue}/tagsr@   Nrx   r   r   r   r   r     s    r   c                   @   sR   e Zd ZdZddddddddddddddddddddddddddddddZdS )r   z,/{api_root}/issues/{issue}/customFields/{id}N)r   r@   r   r=   r   r   rN   rh   rg   r   r   r   r   rD   rF   ZisEmailVerifiedrG   rE   rI   ZonlinerH   ZbanBadgeZcanReadProfileZisLockedr   r   )r   r@   r   rx   r   r   r   r   r     s>   r   c                $   @   s   e Zd ZdZdddddddddddddddddddddddddidddddddddddddddddddddddddd	ddddd
ddZedddZdS )CustomFieldsz7/{api_root}/admin/customFieldSettings/customFields/{id}N)r   rV   r=   rU   ru   r   r   )r   ZdefaultsUsages)r   rD   r   )re   rM   rf   rI   rN   rE   ZhasRunningJobr   rg   rh   rD   r@   ri   rj   rk   rl   r   ZshowLocalizedNameInAdminrm   ro   )r   r@   rs   rr   rq   rW   rt   r   )r   rQ   )r   r@   rh   rv   ZisAutoAttachedZisDisplayedInIssueListrp   ri   rT   rw   Z	instances)rS   c                 C   s^   d }|d d rZ|d d }g }|d d rZ|d d d }| j t||d}dd	 |D }|S )
NrT   rU   rV   rw   rW   r   rX   c                 S   s   g | ]}|qS r   r   rY   r   r   r   r\   i  s     z)CustomFields.elements.<locals>.<listcomp>)r7   r^   )r   rS   rR   r`   ra   rb   r   r   r   elements]  s    zCustomFields.elements)r8   r9   r:   r   r   r,   r   r   r   r   r   r     sz   ,Er   )Zloggingrer   
exceptionsr   Zuriutilsr   Z	getLoggerr8   r   compiler!   r   r<   rK   r]   r^   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s.   

y-/e% M*""$