U
    Įwhm                     @   sV  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G d&d' d'eZdS )(    N   )YouTrackError)query_fieldsz	\{(\w+)\}c                   @   s   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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   r2   r3   r   )r)   r
   r   r   )r   r   r   r7   r   r   r   r   y   s    zCollection.getc                 C   s6   d}ddd}|dd}| j j|||d}|ddS )u*    Конвертирует Markdown в HTMLz/api/markuptextT)r   ZignoreLicenseErrors)r8   ZusesMarkdownr   r*   )r
   postr   )r   r8   r   r   r   responser   r   r   
get_markup   s    zCollection.get_markupc                 K   s   || j f|S r	   )r
   )r   Z
collectionr   r   r   r   _associated   s    zCollection._associated)NN)N)NN)__name__
__module____qualname__r4   r/   r   r   r   propertyr   r   r)   r%   r   r   r;   r<   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   rB   offset)r   namelocalelanguageZ	community)r   ZdateFieldFormattimezonerF   )	r   loginfullNameemailr   guestbanned	avatarUrlZprofilesc                 K   s   d}| j | jj||dS )Nz/{api_root}/users/mer2   )r)   r
   r   )r   r   r   r   r   r   me   s    zUsers.me)r=   r>   r?   r   r   rO   r   r   r   r   rA      s<   "rA   c                       st   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 fddZeddd	Zedd
dZ  Z	S )Projectsz/{api_root}/admin/projects/{id}Nr   r   rI   rK   )r   r   archivedZ	createdBydescriptionZ	fromEmailZiconUrlZleaderrE   ZreplyToEmailr3   ZisDemotemplateZhasArticlesZ
restrictedc                    s(   t  j||}| |dd|d< |S )NrS   r*   ZhtmlDescription)superr   r;   )r   argsr   Zproject_data	__class__r   r   r      s    zProjects.get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   rY   valuesfield	fieldTypeisBundleType	valueTypebundler`   r   c                 S   s   g | ]}|qS r   r   .0_r   r   r   
<listcomp>   s     z*Projects.custom_fields.<locals>.<listcomp>)r<   ProjectCustomFieldsBundleElementsappend)r   rZ   Zfields_r\   bundle_type	bundle_idbundle_elementsr   r   r   custom_fields   s    zProjects.custom_fieldsc                 C   s   |  t}||d S )Nr   )r<   ProjectTimeTrackingSettingsr   )r   rZ   Ztime_tracking_settingsr   r   r   time_tracking   s    
zProjects.time_tracking)
r=   r>   r?   r   r   r   r-   rl   rn   __classcell__r   r   rW   r   rP      s8   rP   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dd
ZdS )rf   z6/{api_root}/admin/projects/{project}/customFields/{id}Nr   rE   rQ   r   rE   r   )$typer   r   rR   assembleDaterN   rS   rJ   
isResolvedlocalizedNamerI   rE   ordinalownerreleaseDatereleased	startDateteamForProject
usersCount)r   isUpdateablerE   )r   rE   emptyFieldText
canBeEmptyisPublicr`   defaultValues)r   r^   isMultiValuerB   r_   )r   ru   rE   rv   aliasesfieldDefaultsr]   )
r   r`   r   r   r~   r\   r   isEstimationisSpentTimerv   r=   r>   r?   r   r   r   r   r   r   rf     s   +8rf   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ZdS )rm   z4/{api_root}/admin/projects/{id}/timeTrackingSettingsN)r   r^   r   r_   r   rE   ru   r]   )r   r   r\   rp   )r   enabledZestimateZ	timeSpentZworkItemTypesr   r   r   r   r   rm   j  s>   rm   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 )rg   zB/{api_root}/admin/customFieldSettings/bundles/{bundle}/{id}/valuesNZ
backgroundrQ   rq   )rr   r   r   rR   rs   rN   ZcolorrS   rJ   rt   ru   rI   rE   rv   rw   rx   ry   rz   r{   r|   r   r   r   r   r   rg     s>    rg   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   rE   ru   sourceToTargetlocalizedSourceToTargettargetToSourcelocalizedTargetToSourcedirectedaggregationZreadOnlyr   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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}NrQ   )r   authorcreatedrE   sizeurlr   rE   ru   )r   
idReadable)r   	directionlinkTypeissues)r   r   rE   r3   )r   ZhasVoteZoriginalZissueWatchers)userZ	isStarredr   r   summary)r   r_   r   )r   r\   )r   rE   ru   minutesrB   r   r   rS   rt   buildIntegration	buildLinkr8   r   rI   rK   rL   rJ   allUsersGroupicon)r   rE   ZprojectCustomFieldvalue)r   attachmentsZcommentsCountr   rS   Z
draftOwnerr   ZisDraftZnumberInProjectparentrZ   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_projectV  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
   r9   loggerZwarningr   int)
r   r   r   r   r   r   r   r   r:   r   r   r   r   r   `  s*    
zIssues.countissuec                 C   s   | j t|d dS Nr   r   )r<   IssueCommentsr   r   r   r   r   comments{  s    zIssues.commentsc                 C   s   | j t|d dS r   )r<   IssueAttachmentsr   r   r   r   r   ~  s    zIssues.attachmentsc                 C   s   | j t|d dS r   )r<   
IssueLinksr   r   r   r   links  s    zIssues.linksc                 C   s   | j t|d dS r   )r<   IssueSprintsr   r   r   r   sprints  s    zIssues.sprintsc                 C   s   | j t|d dS r   )r<   IssueTimeTrackingr   r   r   r   rn     s    zIssues.time_trackingc                 C   s<   ddddddddd	d
dddddg}| j t|d d|dS )NZAttachmentRenameCategoryZAttachmentsCategoryZCustomFieldCategoryZDescriptionCategoryZIssueCreatedCategoryZIssueDeletedCategoryZIssueResolvedCategoryZIssueRestoredCategoryZIssueVisibilityCategoryZLinksCategoryZProjectCategoryZSprintCategoryZSummaryCategoryZTagsCategoryZTicketCCEventCategoryr   ,)r   
categories)r<   IssueActivityItemsjoin)r   r   r   r   r   r   
activities  s*    zIssues.activitiesc                 C   s   | j t|d dS r   )r<   Tagsr   r   r   r   tags  s    zIssues.tagsc                 C   s   | j t|d dS r   )r<   IssueCustomFieldsr   r   r   r   rl     s    zIssues.custom_fields)NN)NN)r=   r>   r?   r   r   r   backoffZon_exceptionZexpor   r   r   r-   r   r   r   r   rn   r   r   rl   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   rE   r   rQ   r   r   r   rE   )ZpermittedUsersZpermittedGroups)r   r   r   r   Zdeletedr   Zpinnedr8   textPreviewr   r   r   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iddZdS )r   z+/{api_root}/issues/{issue}/attachments/{id}NrQ   r   r   )r   rE   r   r   r   r   	extensioncharsetZmimeTypeZmetaDataZdraftremovedZbase64Contentr   r   ZcommentZthumbnailURLr   r   r   r   r   r     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   rE   ru   r   r   r   r   r   r   r   )r   r   Z
issuesSizer   r   ZtrimmedIssuesr   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agilerE   ZgoalstartZfinishrR   Z	isDefaultZunresolvedIssuesCountr   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/workItemsNrQ   )r   rE   ZautoAttached)r   r   rB   )
r   r   Zcreatorr8   r   typer   r   Zdurationdater   r   r   r   r   r   #  s4   r   c                   @   sl   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iddddddddddddddd		ZdS )
r   z*/{api_root}/issues/{issue}/activities/{id}N)r   r   rE   ru   rI   rK   rQ   r   )r_   r   r   )r   rE   rB   ZcustomField)	r   Zaddedr   r   categoryr\   Z	timestampZtargetMemberr   r   r   r   r   r   r   E  sN   		 r   c                   @   s   e Zd ZdZddiZdS )r   z/{api_root}/issues/{issue}/tagsrE   Nr   r   r   r   r   r   v  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   rE   r   rB   r   r   rS   ru   rt   r   r   r8   r   rI   rK   ZisEmailVerifiedrL   rJ   rN   ZonlinerM   ZbanBadgeZcanReadProfileZisLockedr   r   )r   rE   r   r   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   r_   rB   r^   r   r   r   )r   ZdefaultsUsages)r   rI   r   )rr   rR   rs   rN   rS   rJ   ZhasRunningJobr   rt   ru   rI   rE   rv   rw   rx   ry   r   ZshowLocalizedNameInAdminrz   r|   )r   rE   r   r   r~   r`   r   r   )r   rZ   )r   rE   ru   r   ZisAutoAttachedZisDisplayedInIssueListr}   rv   r]   r   Z	instances)r\   c                 C   s^   d }|d d rZ|d d }g }|d d rZ|d d d }| j t||d}dd	 |D }|S )
Nr]   r^   r_   r   r`   r   ra   c                 S   s   g | ]}|qS r   r   rb   r   r   r   re     s     z)CustomFields.elements.<locals>.<listcomp>)r<   rg   )r   r\   r[   ri   rj   rk   r   r   r   elements  s    zCustomFields.elements)r=   r>   r?   r   r   r-   r   r   r   r   r   r     sz   ,Er   )Zloggingrer   
exceptionsr   Zuriutilsr   Z	getLoggerr=   r   compiler"   r   rA   rP   rf   rm   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s2   

 -:g)% b*""1$