
    SIgm                     P   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dS )(    N   )YouTrackError)query_fieldsz	\{(\w+)\}c                       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d
S )
Collection(   z$skipz$top)skiptopc                 "    || _         || _        d S N)_connection_vars)self
connectionkwargss      1./modules/youtrack/youtrack_client/collections.py__init__zCollection.__init__   s    %


    c                 ,    |                      |          S r   )get)r   keys     r   __getitem__zCollection.__getitem__   s    xx}}r   c                 D    t          |                                           S r   )iterget_allr   s    r   __iter__zCollection.__iter__   s    DLLNN###r   c                     d S 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d S t          |t                    r,t          t                              |                    | _        |                     |          \  }} |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(   s     	4dC   	= !5!5d!;!;<<DN!11&99
Ft{((Z((vD4TDDVDDDr   c                 
   |pi }dt          | j        dd          i}i }|                    dd           }|s| j        }t	          |t
                    rt          |          |d<   n||d<   | j                                        D ]\  }}|| j	        v r|||<   |||<   |                                D ];\  }}|| j	        v r|||<   | j
                            |          }||||<   6|||<   <| j	        D ]}||vr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   sZ   2 '$*:J"N"NO

Hd++ 	![Ffd## 	*#/#7#7Jx  #)Jx J$$&& 	" 	"DAqDN"" !
1 !
1LLNN 	& 	&DAqDN"" !
1#'#:#>#>q#A#A #/34J/00$%JqMM 	# 	#A
"" "
1:%%r   c              +     K   d|vrd|d<   d|vr
| j         |d<   |r|d         |k    r||d<   d}	 |                     | j        j        |p| j        |          }|s|S |D ]1}|dz  }d|v r|                    d          |d<   |V  |r||k    r n2|dxx         |d         z  cc<   |r||k    st          |          |d         k     rd S )	Nr	   r   r
   T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6'F5M	++ $&TY ,  G  !  "&(($*JJ{$;$;F5M =K#?#?E6NNNfUm+NNN - < <w<<&-///	r   c                     ||d<   |                      | j        j        | j        |          }d|v r|                    d          |d<   |S )Nr"   rB   rC   r   )r3   r   r   r    )r   r   r'   rI   s       r   r   zCollection.gety   s]    t''  ( 
 

 &  "JJ{33F5Mr   c                     d}ddd}|dd}| 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   sk    #'
 

  
 

 #(( ) 
 
 ||FB'''r   c                      || j         fi |S r   )r   )r   
collectionr   s      r   _associatedzCollection._associated   s    z$*55f555r   NNr   )__name__
__module____qualname__rD   r<   r   r   r   propertyr    r$   r3   r/   r   r   rQ   rT   r   r   r   r   r      s        K")&99    $ $ $   X 
 
 X

E 
E 
E 
E!& !& !& !&F       D	 	 	( ( ((6 6 6 6 6r   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id	Zd	 ZdS )
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                 J    d}|                      | j        j        ||          S )Nz/{api_root}/users/merB   )r3   r   r   )r   r'   r    s      r   mezUsers.me   s3    %$$  % 
 
 	
r   )rV   rW   rX   r    r$   ro   r   r   r   r[   r[      s        #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                      t                      j        |i |}|                     |                    dd                    |d<   |S )Nru   r7   htmlDescription)superr   rQ   )r   argsr   project_data	__class__s       r   r   zProjects.get   sM    "uww{D3F33 +///,:J:J=Z\:]:]*^*^&'r   projectc                 L   g }|                      t          |d                   D ]~}d |d<   |d         d         d         rN|d         d         d         }|d         d         }|                      t          ||	          }d
 |D             |d<   |                    |           |S )Nr"   )r   valuesfield	fieldTypeisBundleType	valueTypebundler   r"   c                     g | ]}|S r   r   .0_s     r   
<listcomp>z*Projects.custom_fields.<locals>.<listcomp>   s    ">">">1">">">r   )rT   ProjectCustomFieldsBundleElementsappend)r   r   fields_r   bundle_type	bundle_idbundle_elementss          r   custom_fieldszProjects.custom_fields   s    %%&974=%QQ 	" 	"E"E(OW~k*>: ?#Gn[9+F!(OD1	"&"2"2"&  #3 # #
 #?">o">">">hNN5!!!!r   c                 l    |                      t                    }|                    |d                   S )Nr"   )rT   ProjectTimeTrackingSettingsr   )r   r   time_tracking_settingss      r   time_trackingzProjects.time_tracking   s/    !%!1!12M!N!N%))'$-888r   )
rV   rW   rX   r    r$   r   r:   r   r   __classcell__)r   s   @r   rq   rq      s        ,D	
 
 	
 
 3 F8    T     9T 9 9 9 9 9 9 9 9r   rq   c                   j   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dS )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     s       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
 7
p Cb bFFFr   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dS )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  s        AD !%$($(!%	 	
 

 
  !!%$($(!%	 	
 

 
  
 
C% %FFFr   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dS )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 
 

 ?     FFFr   r   c                   ,    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"   ra   r   sourceToTargetlocalizedSourceToTargettargetToSourcelocalizedTargetToSourcedirectedaggregationreadOnlyr   r   r   r   r   r     s=        ,D#'#' FFFr   r   c                   l   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dS )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                 \    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  sl    )K)) 	<;
;;;;E 	:9X99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        |||
          }|d         }	|	dk    r(t                              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)) 	<;
;;;;E 	:9X9999E((!	 ) 
 
 !B;;NNQ    //!5zzr   issuec                 F    |                      t          |d                   S Nr"   )r
  )rT   IssueCommentsr   r
  s     r   commentszIssues.comments{  s    U4[AAAr   c                 F    |                      t          |d                   S r  )rT   IssueAttachmentsr  s     r   r   zIssues.attachments~  s      0dDDDr   c                 F    |                      t          |d                   S r  )rT   
IssueLinksr  s     r   linkszIssues.links  s    
%+>>>r   c                 F    |                      t          |d                   S r  )rT   IssueSprintsr  s     r   sprintszIssues.sprints  s    E$K@@@r   c                 F    |                      t          |d                   S r  )rT   IssueTimeTrackingr  s     r   r   zIssues.time_tracking        1tEEEr   c                 v    g d}|                      t          |d         d                    |                    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  sK    
 
 

" +xx
++   
 
 	
r   c                 F    |                      t          |d                   S r  )rT   Tagsr  s     r   tagszIssues.tags  s    E$K888r   c                 F    |                      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/  r2  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 J JFX& & & & W',CCC c    DC4Bd B B B BE E E E E?4 ? ? ? ?AT A A A AF4 F F F F
 
 
 
 
09$ 9 9 9 9F4 F F F F F 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dS )	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% %FFFr   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dS )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FFFr   r  c                   H    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"   ra   r   r   r   r   r   r   r   r   )r"   r   
issuesSizer   r   trimmedIssuesr   r   r   r   r  r    sw        2D!"'+"'+

 

 
 
 
 
) FFFr   r  c            
       *    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"   agilera   goalstartfinishrs   	isDefaultunresolvedIssuesCountr   r   r   r   r  r    s:        /D!% FFFr   r  c                   P    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/workItemsNrr   )r"   ra   autoAttached)r"   r   r]   )
r"   r   creatorrL   r>  typer   r   durationdater   r   r   r   r  r  #  s        >D	
 
 	
 
  
 

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

 9 FFFr   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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#   ra   r   rg   ri   rr   r"   )r   r   r   )r"   ra   r]   customField)	r"   addedrE  r   categoryr   	timestamptargetMemberrV  r   r   r   r   r-  r-  E  s        7D!
 
 !
 
 	
 
 $
  !%!%$( 	 	
 
 W, ,FFFr   r-  c                       e Zd ZdZddiZdS )r1  z/{api_root}/issues/{issue}/tagsra   Nr   r   r   r   r1  r1  v  s        ,DFFFr   r1  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dS )r4  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   r4  r4  }  s       9D
$
D
 t
 D	

 D
 4
 4
 T
 $
 
 
 D
 d
 T
 T
  t!
" T#
$ "!5
 
 
 FFFr   r4  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dS ) 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   r9  )r"   r   )r"   ra   r   r   isAutoAttachedisDisplayedInIssueListr   r   r   r   	instancesr   c                     d }|d         d         r[|d         d         }g }|d         d         r=|d         d         d         }|                      t          ||          }d |D             }|S )	Nr   r   r   r   r   r"   r   c                     g | ]}|S r   r   r   s     r   r   z)CustomFields.elements.<locals>.<listcomp>  s    555!555r   )rT   r   )r   r   r   r   r   r   s         r   elementszCustomFields.elements  s    n- 
	6,[9KF_%h/ 6!/28<TB	"&"2"2"&  #3 # #
 65_555r   )rV   rW   rX   r    r$   r:   rp  r   r   r   rg  rg    s       DD"&   
 
 "" $)- #	 	D  T	
 t D   d d     4 !" & t'( D)* $+, -1!"1  !*
 *
X  
 
wC CFJd      r   rg  )loggingrer5  
exceptionsr   uriutilsr   	getLoggerrV   r  compiler,   r   r[   rq   r   r   r   r   r   r  r  r  r  r  r-  r1  r4  rg  r   r   r   <module>rw     sq    				  % % % % % % " " " " " "		8	$	$ rz,''J6 J6 J6 J6 J6 J6 J6 J6Z*
 *
 *
 *
 *
J *
 *
 *
Z79 79 79 79 79z 79 79 79td d d d d* d d dN' ' ' ' '* ' ' 'R" " " " "Z " " "J    Z    ^F ^F ^F ^F ^FZ ^F ^F ^FB' ' ' ' 'J ' ' 'T    z   D       <    :        
   D. . . . . . . .b    :   ! ! ! ! !
 ! ! !HT T T T T: T T T T Tr   