
    $gm                        d dl Z d dlZd dlZddlmZ ddlmZ  e j                  e      Z	 ej                  d      Z G d d      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d  d!e      Z G d" d#e      Z G d$ d%e      Z G d& d'e      Zy)(    N   )YouTrackError)query_fieldsz	\{(\w+)\}c                   v    e Zd ZdZdddZd Zd Zd Zed        Z	ed	        Z
ddZddZddZd Zd Zd Zy
)
Collection(   z$skipz$top)skiptopc                      || _         || _        y N)_connection_vars)self
connectionkwargss      1./modules/youtrack/youtrack_client/collections.py__init__zCollection.__init__   s    %
    c                 $    | j                  |      S r   )get)r   keys     r   __getitem__zCollection.__getitem__   s    xx}r   c                 4    t        | j                               S r   )iterget_allr   s    r   __iter__zCollection.__iter__   s    DLLN##r   c                      y r    r   s    r   pathzCollection.path   s    r   c                     d d dS )N)idringIdr   r   s    r   fieldszCollection.fields!   s     
 	
r   Nc                     |sy t        |t              r#t        t        j	                  |            | _        | j                  |      \  }} |j                  di |} |d|||d|S )Nr    paramsdatar   )
isinstancestrseturl_slots_refindall	url_slots_extract_paramsformat)r   methodr    r'   r(   r   
url_paramss          r   _execute_requestzCollection._execute_request(   sh    dC  !5!5d!;<DN!11&9
Ft{{(Z(D4TDVDDr   c                 (   |xs i }dt        | j                  dd      i}i }|j                  dd       }|s| j                  }t	        |t
              rt        |      |d<   n||d<   | j                  j                         D ]  \  }}|| j                  v r|||<   |||<     |j                         D ]A  \  }}|| j                  v r|||<   | j                  j                  |      }||||<   =|||<   C | j                  D ]  }||vsd||<    ||fS )Napi_rootapir$    )getattrr   popr$   r)   dictr   r   itemsr.   _pagination_paramsr   )r   r'   r2   
get_paramsr$   kvpagination_params           r   r/   zCollection._extract_params4   s:   2 '$*:*:J"NO

Hd+[[Ffd##/#7Jx #)Jx JJ$$& 	"DAqDNN" !
1 !
1		" LLN 	&DAqDNN" !
1#'#:#:#>#>q#A #/34J/0$%JqM	&  	#A
" "
1	# :%%r   c              +     K   d|vrd|d<   d|vr| j                   |d<   |r|d   |kD  r||d<   d}	 | j                  | j                  j                  |xs | j                  |      }|s|S |D ]-  }|dz  }d|v r|j                  d      |d<   | |s'||k\  s- n |dxx   |d   z  cc<   |r||k\  st        |      |d   k  ry w)Nr	   r   r
   r    r'   r   	shortNamer   )DEFAULT_TOPr3   r   r   r    len)r   r    max_resultsr'   results_countresultsresults          r   r   zCollection.get_allW   s    F6N ,,F5M6%=;6'F5M++  $$&TYY , G ! "&($*JJ{$;F5M=K#? 6NfUm+N <w<&-// s   BCC-Cc                     ||d<   | j                  | j                  j                  | j                  |      }d|v r|j                  d      |d<   |S )Nr"   rB   rC   r   )r3   r   r   r    )r   r   r'   rI   s       r   r   zCollection.gety   sZ    t''   ( 

 & "JJ{3F5Mr   c                 z    d}ddd}|dd}| j                   j                  |||      }|j                  dd      S )u*    Конвертирует Markdown в HTMLz/api/markuptextT)r$   ignoreLicenseErrors)rL   usesMarkdownr&   r7   )r   postr   )r   rL   r    r'   r(   responses         r   
get_markupzCollection.get_markup   s\    #'

  

 ##(( ) 
 ||FB''r   c                 (     || j                   fi |S r   )r   )r   
collectionr   s      r   _associatedzCollection._associated   s    $**5f55r   NNr   )__name__
__module____qualname__rD   r<   r   r   r   propertyr    r$   r3   r/   r   r   rQ   rT   r   r   r   r   r      sj    K")&9$   
 

E!&F D	((6r   r   c                   Z    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	 Zy)
Usersz/{api_root}/users/{id}Ngeneral)r"   presentationpatterndatePattern)r"   r]   offset)r"   namelocalelanguage	community)r"   dateFieldFormattimezonerb   )	r"   loginfullNameemailr#   guestbanned	avatarUrlprofilesc                 V    d}| j                  | j                  j                  ||      S )Nz/{api_root}/users/merB   )r3   r   r   )r   r'   r    s      r   mezUsers.me   s4    %$$   % 
 	
r   )rV   rW   rX   r    r$   ro   r   r   r   r[   r[      ss    #D$(##'	$ $("  " $!%
 FD
r   r[   c                   r     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ZdefdZdefdZ xZ	S )	Projectsz/{api_root}/admin/projects/{id}Nr"   r#   rg   ri   )r"   r#   archived	createdBydescription	fromEmailiconUrlleaderra   replyToEmailrC   isDemotemplatehasArticles
restrictedc                 n    t        |   |i |}| j                  |j                  dd            |d<   |S )Nru   r7   htmlDescription)superr   rQ   )r   argsr   project_data	__class__s       r   r   zProjects.get   s@    w{D3F3 +///,:J:J=Z\:]*^&'r   projectc                    g }| j                  t        |d         D ]a  }d |d<   |d   d   d   r>|d   d   d   }|d   d   }| j                  t        ||	      }|D cg c]  }| c}|d<   |j                  |       c |S c c}w )
Nr"   )r   valuesfield	fieldTypeisBundleType	valueTypebundler   r"   )rT   ProjectCustomFieldsBundleElementsappend)r   r   fields_r   bundle_type	bundle_idbundle_elements_s           r   custom_fieldszProjects.custom_fields   s    %%&974=%Q 	"E"E(OW~k*>:#Gn[9+F!(OD1	"&"2"2"&  #3 #
 />">1">hNN5!	"  #?s   	Bc                 T    | j                  t              }|j                  |d         S )Nr"   )rT   ProjectTimeTrackingSettingsr   )r   r   time_tracking_settingss      r   time_trackingzProjects.time_tracking   s)    !%!1!12M!N%))'$-88r   )
rV   rW   rX   r    r$   r   r:   r   r   __classcell__)r   s   @r   rq   rq      sy    ,D	
 	
 3F8T  9T 9r   rq   c                   h   e Zd ZdZ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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dddddddddd
Zy)r   z6/{api_root}/admin/projects/{project}/customFields/{id}Nr"   ra   $typer"   r#   rs   assembleDaterl   ru   rh   
isResolvedlocalizedNamerg   ra   ordinalownerrr   releaseDatereleased	startDater"   ra   r#   )teamForProject
usersCount)r"   isUpdateablera   )r"   ra   emptyFieldText
canBeEmptyisPublicr   defaultValues)r"   r   isMultiValuer]   r   )r"   r   ra   r   aliasesfieldDefaultsr   )
r"   r   r   r   r   r   r   isEstimationisSpentTimer   rV   rW   rX   r    r$   r   r   r   r   r     sq   CD
 
T
$
 d
 	

 D
 
 4
 
 $
 T
 T
 D
 t
 	
( 4)
* +
, -
0 
 9
< !"&" $( 
"T"$" d" 	"
 #D"  " "4" " !$" $T" T" D" t" ""&!%!%	"( "4)"* +",  -"0 # $"&'
 #'9")V  $ $ $!a7
p CbFr   r   c                   ^    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y)r   z4/{api_root}/admin/projects/{id}/timeTrackingSettingsN)r"   r   r   r   r"   ra   r   r   )r   r   r   r   )r"   enabledestimate	timeSpentworkItemTypesr   r   r   r   r   r   j  sx    AD !%$($(!%		

  !!%$($(!%		

  
C%Fr   r   c                       e Zd ZdZi 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Zy)r   zB/{api_root}/admin/customFieldSettings/bundles/{bundle}/{id}/valuesr   Nr"   r#   rs   r   rl   color
backgroundru   rh   r   r   rg   ra   r   r   rr   r   r   r   )r   r   r   r   r   r   r   r   r     s
   OD  d  	$  	D	 
 	  	T  	$
  	t  	D  	d  	  	  	   	4! " 		
# . 	t/ 0 	D1 2 

 ? Fr   r   c                   *    e Zd ZdZddddddddddd
Zy)IssueLinkTypesz/{api_root}/issueLinkTypes/{id}N)
r"   ra   r   sourceToTargetlocalizedSourceToTargettargetToSourcelocalizedTargetToSourcedirectedaggregationreadOnlyr   r   r   r   r   r     s,    ,D#'#'Fr   r   c                   r   e Zd ZdZ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ddddddddddddddd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 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d0d1d2ZdAd3Z ej                  ej                  e	d45      dAd6e
fd7       Zd8efd9Zd8efd:Zd8efd;Zd8efd<Zd8efd=Zd8efd>Zd8efd?Zd8efd@Zy)BIssuesz/{api_root}/issues/{id}r"   Nattachmentsrr   )r"   authorcreatedra   sizeurlcommentsCountr   ru   
draftOwner
idReadableisDraftnumberInProjectparentr"   ra   r   )r"   r   )r"   	directionlinkTypeissuesr   )r"   r#   ra   rC   reporterresolvedsummaryupdatedupdater
visibility)r"   hasVoteoriginalissueWatchers)user	isStarredr"   r   r   )r"   r   r   )r"   r   ra   r   minutesr]   r   r   r   buildIntegration	buildLinkrL   r#   rg   ri   rj   rh   )allUsersGroupicon)r"   ra   projectCustomFieldvalue)votersvoteswatcherswikifiedDescriptionmentionedArticlesmentionedIssuesmentionedUserscustomFieldsc                 f    d| }|r	|d| dz  }|r	|d| dz  }||d<    | j                   di |S )N	project:  AND updated: {} .. * AND updated: * .. {}queryr   )r   )r   project_key
start_dateend_dater'   r   s         r   for_projectzIssues.for_projectV  sY    K=)'
|7;;E,XJb99Ewt||%f%%r   <   )max_timereturnc                    d}dd i|d<   d| }|r	|d| dz  }|r	|d| dz  }d	|i}| j                  | j                  j                  |||
      }|d   }	|	dk(  rt        j	                  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 ...)r3   r   rO   loggerwarningr   int)
r   r   r   r   r'   r    r   r(   rP   r  s
             r   r  zIssues.count`  s    /#T?xK=)'
|7;;E,XJb99E((!!	 ) 
 !B;NNQ  /!5zr   issuec                 6    | j                  t        |d         S Nr"   )r  )rT   IssueCommentsr   r  s     r   commentszIssues.comments{  s    U4[AAr   c                 6    | j                  t        |d         S r  )rT   IssueAttachmentsr
  s     r   r   zIssues.attachments~  s     0dDDr   c                 6    | j                  t        |d         S r  )rT   
IssueLinksr
  s     r   linkszIssues.links  s    
%+>>r   c                 6    | j                  t        |d         S r  )rT   IssueSprintsr
  s     r   sprintszIssues.sprints  s    E$K@@r   c                 6    | j                  t        |d         S r  )rT   IssueTimeTrackingr
  s     r   r   zIssues.time_tracking       1tEEr   c                 ^    g d}| j                  t        |d   dj                  |            S )N)AttachmentRenameCategoryAttachmentsCategoryCustomFieldCategoryDescriptionCategoryIssueCreatedCategoryIssueDeletedCategoryIssueResolvedCategoryIssueRestoredCategoryIssueVisibilityCategoryLinksCategoryProjectCategorySprintCategorySummaryCategoryTagsCategoryTicketCCEventCategoryr"   ,)r  
categories)rT   IssueActivityItemsjoin)r   r  r(  s      r   
activitieszIssues.activities  s9    

" +xx
+   
 	
r   c                 6    | j                  t        |d         S r  )rT   Tagsr
  s     r   tagszIssues.tags  s    E$K88r   c                 6    | j                  t        |d         S r  )rT   IssueCustomFieldsr
  s     r   r   zIssues.custom_fields  r  r   rU   )rV   rW   rX   r    r$   r   backoffon_exceptionexpor   r  r  r:   r  r   r  r  r   r+  r.  r   r   r   r   r   r     s   $DJdJ	 
J 	J  	4!J" 	t#J$ 		
%J0 	d1J2 	43J4 	45J6 	!% "
7JP 		
QJ\ 		
]Jh 	DiJj 	4kJl 	4mJn 		
oJz 	d{J~ 		
 "!!	 "

  $
 
 	
  %)"%)"	#d   4	
   t t d #D T  $    !" D#$ "&'$
KJFX& W',,Cc  D4Bd BE E?4 ?AT AF4 F
 
09$ 9F4 Fr   r   c                   ^    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y)	r	  z(/{api_root}/issues/{issue}/comments/{id}N)r"   ra   r   rr   r   r"   r#   ra   )permittedUserspermittedGroups)r"   r   r   r   deletedr  pinnedrL   textPreviewr   r   r   r   r   r   r	  r	    s~    5D
 	
 

  	  
1%Fr   r	  c                       e Zd ZdZ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iddZy)r  z+/{api_root}/issues/{issue}/attachments/{id}r"   Nra   r   rr   r   r   r   	extensioncharsetmimeTypemetaDatadraftremovedbase64Contentr   r  r   commentthumbnailURLr   r   r   r   r  r    s    8Dd 		
 	4 	4 	 	T 	4 	D 	D  	!" 	4#$ 	%& 	t'( 	
)2 	$
38 	9Fr   r  c                   F    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y)r  z%/{api_root}/issues/{issue}/links/{id}N)	r"   ra   r   r   r   r   r   r   r   r   )r"   r   
issuesSizer   r   trimmedIssuesr   r   r   r   r  r    sW    2D!"'+"'+

 
 
)Fr   r  c            
       (    e Zd ZdZdddddddddd	Zy)r  z"/{api_root}/issues/{issue}/sprintsN)	r"   agilera   goalstartfinishrs   	isDefaultunresolvedIssuesCountr   r   r   r   r  r    s)    /D!%Fr   r  c                   N    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y)r  z1/{api_root}/issues/{issue}/timeTracking/workItemsNrr   )r"   ra   autoAttached)r"   r   r]   )
r"   r   creatorrL   r:  typer   r   durationdater   r   r   r   r  r  #  sf    >D	
 	
  

  

 9Fr   r  c                   l    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y)
r)  z*/{api_root}/issues/{issue}/activities/{id}N)r"   r#   ra   r   rg   ri   rr   r"   )r   r   r   )r"   ra   r]   customField)	r"   addedrA  r   categoryr   	timestamptargetMemberrR  r   r   r   r   r)  r)  E  s    7D!
 !
 	
 $
  !%!%$(		
 W,Fr   r)  c                       e Zd ZdZddiZy)r-  z/{api_root}/issues/{issue}/tagsra   Nr   r   r   r   r-  r-  v  s    ,DFr   r-  c                       e Zd ZdZ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Zy)r0  z,/{api_root}/issues/{issue}/customFields/{id}Nr"   ra   r   r]   r   r   ru   r   r   r   r   rL   r#   rg   ri   isEmailVerifiedrj   )	rh   rl   onlinerk   banBadgecanReadProfileisLockedr   r   )r"   ra   r   r   r   r   r   r0  r0  }  s   9D
$
D
 t
 D	

 D
 4
 4
 T
 $
 
 
 D
 d
 T
 T
  t!
" T#
$ "!5
Fr   r0  c                       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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ddZdefdZy) CustomFieldsz7/{api_root}/admin/customFieldSettings/customFields/{id}N)r"   r   r]   r   r   r   r   )r"   defaultsUsagesr   rs   r   rl   ru   rh   hasRunningJobr"   r   r   rg   ra   r   r   )r"   rg   r#   r   r   r#   )showLocalizedNameInAdminr   r   )r"   ra   r   r   r   r   r   r5  )r"   r   )r"   ra   r   r   isAutoAttachedisDisplayedInIssueListr   r   r   r   	instancesr   c                     d }|d   d   rD|d   d   }g }|d   d   r2|d   d   d   }| j                  t        ||      }|D cg c]  }| }}|S c c}w )Nr   r   r   r   r   r"   r   )rT   r   )r   r   r   r   r   r   r   s          r   elementszCustomFields.elements  s    n-,[9KF_%h/!/28<TB	"&"2"2"&  #3 #
 &55!55 6s   	A)rV   rW   rX   r    r$   r:   rk  r   r   r   rc  rc    s   DD"&   
 "" $)-#	D  T	
 t D   d d     4 !"& t'( D)* $+, -1!"1!*
X 
wCFJd r   rc  )loggingrer1  
exceptionsr   uriutilsr   	getLoggerrV   r  compiler,   r   r[   rq   r   r   r   r   r   r	  r  r  r  r  r)  r-  r0  rc  r   r   r   <module>rr     s    	  % "			8	$ rzz,'J6 J6Z*
J *
Z79z 79td* dN'* 'R"Z "JZ  ^FZ ^FB'J 'Tz D <:  
 D. .b: !
 !HT: Tr   