
    Zjn$                     V    d dl Z d dlZd dlmZ d dl ddlmZ ddlmZ  G d d      Z	y)	    N)quote)*   )Gitflic)GitflicConnectionErrorc                       e Zd Z	 	 ddZedefd       Zd Zd Zd Z	d Z
d	 Zd
 Zd Z	 	 ddededej                  dej                  def
dZd ZddZddZed        Zd Z	 ddZddZy)DriverNc                 6    t        ||      | _        i | _        y )N)urltoken)r   api_repos)selfr   r   
ssl_verifytimeouthttp_usernamehttp_passworddebugs           ./modules/git/gitflic.py__init__zDriver.__init__   s     s%0    sc                     | xrV t         j                   j                  | j                  dd            j                  t         j                  j
                        S )NZz+00:00)datetimefromisoformatreplace
astimezonetimezoneutc)r   s    r   _parse_datetimezDriver._parse_datetime   sC     pX&&44QYYsH5MNYYZbZkZkZoZoppr   c                    t        t        j                         t        t        j                         t        j                  t        j                        }|d   }|d   }|d   d   j                  d      }t        d| d|d           d|d   t        |d	         ||j                  d
d       dg g g d}|j                  d      xr |j                  d      }|r|d   t        |d         |d   |d   |d   |d   |d   |d   |d   |d   |d   |d   dk(  |d   d}|d   |j                  di       j                  d      k(  r|d   d   |d<   |d   j                  |       |j                  d i       }|j                  d!      |j                  d"      |j                  d#      }}
}	|	rR|
rP|rN|	j                  d$      r=|	j                  d$dd%      }	|d&   j                  |	||d'k(  | d(t        |	       d)       |j                  d*g       }|D ]C  }|d*   j                  |d   |d   | d+|d    | j                  |d,         |d-   |d.   d/       E |S )0Nactionprojecthttp_transport_url.gitz'Gitflic.process_webhook_request: event=z, repo_name=title 
project_iddefault_branchnameext_idr   r*   )responserepobranchescommitsmerge_requestsMERGEmerge_requestidlocal_idsource_branchsource_project_idtarget_branchtarget_project_idauthor_usernamedescriptionstatus	can_mergeMERGEDr   )r,   r-   numberhead_branch_name	head_repobase_branch_name	base_repoauthor_logintextr=   	mergeablemergedr   	initiatorr,   author_ext_idr2   pushrefbeforeafterzrefs/heads/r   r0   (0000000000000000000000000000000000000000/file?branch=)r,   shadeletedr   r1   /commit/	timestampauthor_nameauthor_email)r,   rQ   r   daterU   rV   )printrequestheadersdatajsonloadsrstripstrget
startswithappendr   r   r!   )r   	hook_dataevent	repo_datar   resultpr_datamr	push_datarL   rM   rN   r1   commit_datas                 r   process_webhook_requestzDriver.process_webhook_request   s   googllJJw||,	(#i(		"#78??G5eW =#G,-/	0
 !'*c)L:Q6R[^"+--0@$"GI  
 ""7+N	o0N(gdm,!*-$+O$<$%89$+O$<$%89 '(9 :.!(+$[1!(+x7u~B  ()Y]];-K-O-OPV-WW&/&<T&B?##$++B/MM&"-	&]]519==3JIMMZaLbUV6e}(E++mR3C:%%Ee?i6imE#J<8': ; --	2." 	K9$$#D)+d2CseS[\ghl\m[nLo,,[-EF*=9 +N ;	& 	 r   c                     |}|| j                   vr3| j                  j                  j                  |      | j                   |<   | j                   |   S )N)r5   )r   r   projectsr`   )r   r-   s     r   get_repozDriver.get_repoU   sH    $"&(("3"3"7"76"7"BDKK{{6""r   c                 8    |j                   j                  d      S )Nr&   )httpTransportUrlr^   )r   r/   s     r   	_repo_urlzDriver._repo_url[   s    $$++F33r   c                    g }	 | j                   j                  j                  d      D ]v  }|| j                  |j                  <   |j                  |j                  t        |j                        |j                  xs | j                  |      t        |dd       d       x 	 |S # t        $ r}t        d      |d }~ww xY w)NT)lazydefaultBranchr+   u8   Ошибка  на стороне сервера Gitflic)r   rm   listr   r5   rb   r'   r_   siteUrlrq   getattrr   CmfAuthError)r   rf   r/   es       r   available_reposzDriver.available_repos^   s    	b))..D.9 M'+DGG$ JJ#dgg,<<?4>>$+?&-dOT&JL MM  & 	bYZ`aa	bs   BB& &	C /B;;C c                 T    | j                  |       dt        |j                         S )NrP   )rq   r   r,   )r   r/   branchs      r   _branch_urlzDriver._branch_urll   s'    ..&'}U6;;5G4HIIr   c           	          | j                  |      }|j                  j                  d      D cg c]/  }|j                  |j                  d   | j                  ||      d1 c}S c c}w )NTallhash)r,   rQ   r   )rn   r0   ru   r,   
lastCommitr}   )r   r-   r/   r|   s       r   get_brancheszDriver.get_brancheso   sl    }}V$ --,,,68  KK(9(9&(A##D&13 8 	8 8s   4A'c                 B    | j                  |       d|j                   S )NrS   )rq   r   )r   r/   commits      r   _commit_urlzDriver._commit_urlv   s!    ..&'x}==r   rQ   pathsinceuntilauthorc              #     K   | j                  |      }|j                  j                  |d      D ]  }|j                  |j                  | j	                  ||      |j
                  | j                  |j                  d         |j                  d   |j                  d   t        |j                        dddd  y w)NT)r,   rs   whenr,   emailAddressr   )r,   rQ   r   rF   rW   rU   rV   parents	additions	deletionstotal)	rn   r1   ru   r   r   messager!   authorIdentparentCommitIds)	r   r-   rQ   r   r   r   r   r/   r   s	            r   iter_commitszDriver.iter_commitsy   s      }}V$ll''St'< 	FFKK@P@PQUW]@^0D0DVEWEWX^E_0`%11&96K]K]^lKm 6 67Q 	s   B<B>c                 t   |j                   xs i }i d|j                  dt        |j                        d|j                  d|j
                  d   d|j                  d   d|j
                  d   d	|j                  d   d
|j                  d   d|j                  j                  d      d|j                  j                  d      d|j                  j                  d      d|j                  d|j                  d   d|j                  d|j                  d   dk(  d|j                  d      d|j                  di       j                  d      |j                  di       j                  d      |j                  di       j                  d      | j                  |       d|j                   dS )Nr,   r-   r@   rA   r5   rB   head_shar   rC   rD   rU   rE   usernamerJ   rF   r=   rG   rH   r?   	merge_shamerged_by_nameuserz/merge-request/)merged_by_loginmerged_by_ext_idr   )mergeCommitr'   r_   r5   localIdsourceBranchsourceProjecttargetBranch	createdByr`   r<   r=   canMergerq   )r   rh   r/   merge_commits       r   _mr2dictzDriver._mr2dict   s   ~~+
BHH
c"%%j
 bjj
  5	

 ))$/
 /
  5
 .
 2<<++F3
 BLL,,Z8
 R\\--d3
 BNN
 biio
 
 biio1
  ))&1!
$ l..vr:>>vF%
&  ,//;??
K , 0 0 < @ @ FnnT*+?2::,G+
 	
r   c                     | j                  |      }|j                  j                  |      }||S | j                  ||      S )N)r6   )rn   r2   r`   r   )r   r-   r@   r/   rh   s        r   get_merge_requestzDriver.get_merge_request   sD    }}V$  $$f$5:I}}R&&r   c                     | j                  |      }|rdnd }|j                  j                  |d      D cg c]  }| j                  ||       c}S c c}w )NOPENEDT)stater   )rn   r2   ru   r   )r   r-   	only_openr/   r   rh   s         r   get_merge_requestszDriver.get_merge_requests   sP    }}V$%4262E2E2J2JQV\`2J2abBb$'bbbs   Ac                 F    dt         j                  j                  |        S )Nz&git_webhook_name=)urllibparser   )webhook_names    r   _webhook_name_url_tagzDriver._webhook_name_url_tag   s    #FLL$6$6|$D#EFFr   c                     | j                  |      }| j                  |      }|j                  j                  d      D ]  }||j                  v s|c S  y )NTr   )r   rn   webhooksru   r   )r   r-   r   tagr/   hooks         r   _get_webhook_by_namezDriver._get_webhook_by_name   sQ    ((6}}V$MM&&4&0 	Ddhh	r   c           	         | j                  |      }| j                  ||      }	|| j                  |      z  }t        |di       }
dD ]
  }d|
d   |<    |	rd}|	j	                         j                         D ]s  \  }}||
v s|dk(  rIt        |
d   j                         D cg c]  \  }}||   |k(   c}}      rFt        |	||
|          d}Y||
|   k7  sbt        |	||
|          d}u |sKt        d|	 d|
        |	j                          n)t        d	|
        |j                  j                  |
      }	t        |	j                        S c c}}w )
Nsecret)r   r   events)	BRANCH_UPDATEBRANCH_DELETEBRANCH_CREATEMERGE_REQUEST_CREATEMERGE_REQUEST_UPDATEr3   MERGE_REQUEST_CLOSEMERGE_REQUEST_CANCELMERGE_REQUEST_ACCEPTTr   Fz/Gitflic driver: webhook config differ Gitflic: z	 != eva: zGitflic: create webhook )rn   r   r   dictas_dictitemsr   setattrrX   saver   creater_   r5   )r   r-   webhook_urlr   insecure_sslr   webhook_ext_id_kwargsr/   r   webhook_configrd   equalkeyvaluekvs                    r   setup_webhookzDriver.setup_webhook   sg   }}V$((>t11,??+hrJ
 	3E
 /3N8$U+	3 E"lln224 &
U.(h"nX>V>\>\>^#_daE!HM#_`#D#~c/BC$)E."55c>#+>? %& GvYWeVfgh		,^,<=>==''7D477| $`s   "Ec                 l    | j                  ||      }|r t        d| d       |j                          y y )NzGitflic: delete webhook())r   rX   delete)r   r-   r   r   r   r   s         r   cleanup_webhookzDriver.cleanup_webhook   s7    ((>,TF!45KKM r   )NNN   NNN)NNNNN)N)T)FNN)NN)__name__
__module____qualname__r   staticmethodr_   r!   rk   rn   rq   rz   r}   r   r   r   r   r   r   r   r   r   r   r    r   r   r	   r	   
   s    AC:> q3 q q=~#4J8> 8<\`"14$$4<4E4EVY
6'c
 G G fjBr   r	   )
r   r   urllib.parser   cmf.includegitflic_client.mainr   gitflic_client.exceptionsr   r	   r   r   r   <module>r      s#        ( =V Vr   