ó
    ùÚ j/  ã                  óÞ   • % S r SSKJr  SSKrSSKJrJrJrJr  SSK	r	SSK
Jr  SSKJrJr   " S S\5      r " S	 S
\5      r " S S5      r " S S5      rSS jrSqS\S'   SSS jjrSS jrg)z7Git client: mock + live GitHub Git Data API (Phase 3b).é    )ÚannotationsN)ÚDictÚListÚOptionalÚProtocol)Ú	BaseModel)ÚSettingsÚget_settingsc                  ó4   • \ rS rSr% S\S'   S\S'   S\S'   Srg)Ú	GitResulté   ÚstrÚbranch_nameÚ
commit_shaÚpr_url© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    Ú1/var/www/html/gaurav/packages/integrations/git.pyr   r      s   ‡ ØÓØƒOØ†Kr   r   c                  ó2   • \ rS rSr          SS jrSrg)Ú	GitClienté   c             ƒ  ó   #   • g 7f©Nr   )ÚselfÚjira_keyr   Úcommit_messageÚfiless        r   Úcreate_draft_prÚGitClient.create_draft_pr   s
   é € ð ùs   ‚r   N©
r!   r   r   r   r"   r   r#   zDict[str, str]Úreturnr   )r   r   r   r   r$   r   r   r   r   r   r      s9   † ðð ðð ð	ð
 ðð ðð 
÷r   r   c                  ó@   • \ rS rSrSrSS jr          SS jrSrg)	ÚMockGitClienté   z+In-memory Git used for local/dev and tests.c                ó   • / U l         g r   ©Úcalls)r    s    r   Ú__init__ÚMockGitClient.__init__"   s	   € Ø.0ˆ�
r   c          	   ƒ  ó  #   • U R                   R                  UUU[        UR                  5       5      S.5        [        R
                  " U SU 3R                  5       5      R                  5       S S n[        USU 3SS9$ 7f)N)r!   r   r"   r#   Ú:é   zmock-z,https://github.com/example/agent-nova/pull/0©r   r   r   )	r-   ÚappendÚlistÚkeysÚhashlibÚsha256ÚencodeÚ	hexdigestr   )r    r!   r   r"   r#   Údigests         r   r$   ÚMockGitClient.create_draft_pr%   s‰   é € ð 	�
‰
×Ñà$Ø*Ø"0Ü˜eŸj™j›lÓ+ñ	ô	
ô —’ 8 *¨A¨nÐ-=Ð >× EÑ EÓ GÓH×RÑRÓTÐUXÐVXÐYˆÜØ#Ø˜v˜hÐ'ØAñ
ð 	
ùs   ‚B Br,   N)r'   ÚNoner&   )r   r   r   r   Ú__doc__r.   r$   r   r   r   r   r)   r)      sA   † Ù5ô1ð
ð ð
ð ð	
ð
 ð
ð ð
ð 
÷
r   r)   c                  óf   • \ rS rSrSr  S	     S
S jjr          SS jrSS jrSS jrSr	g)ÚHttpGitHubClienté=   uC   Live GitHub: blobs â†’ tree â†’ commit â†’ branch ref â†’ draft PR.Nc                óN  • U=(       d
    [        5       U l        X l        U R                  R                  nU(       d  [	        S5      eU R                  R
                  (       d  [	        S5      eUu  U l        U l        U R                  R                  R                  S5      U l
        g )NzNGIT_REPO_URL must be set to owner/repo (or GitHub URL) for GIT_PROVIDER=githubz1GITHUB_TOKEN is required when GIT_PROVIDER=githubÚ/)r
   ÚsettingsÚ	transportÚgithub_owner_repoÚ
ValueErrorÚgithub_tokenÚownerÚrepoÚgithub_api_base_urlÚrstripÚ_api)r    rD   rE   Úparseds       r   r.   ÚHttpGitHubClient.__init__@   sx   € ð
 !×2¤L£NˆŒØ"ŒØ—‘×0Ñ0ˆÞÜÐmÓnÐnØ�}‰}×)×)ÜÐPÓQÐQØ &ÑˆŒ
�D”IØ—M‘M×5Ñ5×<Ñ<¸SÓAˆ�	r   c             ƒ  óv  #   • UR                  5        VVs0 sH  u  pV[        U5      (       d  M  XV_M     nnnU(       d  [        S5      eSSU R                  R                   3SS.nU R                  R
                  =(       d    Sn	[        R                  " SUU R                  S9 IS h  v•N n
U R                  U
S	U R                   S
U R                   SU	 35      I S h  v•N nUS   S   nU R                  U
S	U R                   S
U R                   SU 35      I S h  v•N nUS   S   n/ n[        UR                  5       5       HX  u  nnU R                  U
S	U R                   S
U R                   S3USS.5      I S h  v•N nUR                  USSUS   S.5        MZ     U R                  U
S	U R                   S
U R                   S3XïS.5      I S h  v•N nU R                  U
S	U R                   S
U R                   S3UUS   U/S.5      I S h  v•N nUS   nU R                  U
S	U R                   S
U R                   S3SU 3US.5      I S h  v•N   U R                  U
S	U R                   S
U R                   S3SU 3UU	SU S U 3S!S".5      I S h  v•N nUR                  S#5      =(       d.    S$U R                   S
U R                   S%UR                  S&5       3nS S S 5      IS h  v•N   [!        UWWS'9$ s  snnf  GN] GN) GNí GNŽ GN< GN NÂ N N+! , IS h  v•N  (       d  f       N@= f7f)(Nz3No force-app (or sfdx-project.json) files to commitzapplication/vnd.github+jsonzBearer z
2022-11-28)ÚAcceptÚAuthorizationzX-GitHub-Api-VersionÚmaing      N@)ÚtimeoutÚheadersrE   z/repos/rC   z/git/ref/heads/ÚobjectÚshaz/git/commits/Útreez
/git/blobszutf-8)ÚcontentÚencodingÚ100644Úblob)ÚpathÚmodeÚtyperW   z
/git/trees)Ú	base_treerX   z/git/commits)ÚmessagerX   Úparentsz	/git/refszrefs/heads/)ÚrefrW   z/pullsz[Agent Nova] z#Draft PR created by Agent Nova for z.

T)ÚtitleÚheadÚbaseÚbodyÚdraftÚhtml_urlzhttps://github.com/z/pull/Únumberr3   )ÚitemsÚ_is_commit_pathrG   rD   rH   Úgit_default_branchÚhttpxÚAsyncClientrE   Ú	_get_jsonrI   rJ   ÚsortedÚ
_post_jsonr4   Úgetr   )r    r!   r   r"   r#   ÚpÚcÚcommit_filesrU   Údefault_branchÚclientrc   Úbase_commit_shaÚbase_commitÚbase_tree_shaÚ
tree_itemsr]   rY   r\   rX   Úcommitr   Úprr   s                           r   r$   Ú HttpGitHubClient.create_draft_prO   sm  é € ð */¯©¬ÔM©¡ ¼/È!×:L›˜š©ˆÑMÞÜÐRÓSÐSð 4Ø& t§}¡}×'AÑ'AÐ&BÐCØ$0ñ
ˆð
 Ÿ™×9Ñ9×C¸Vˆä×$Ò$ØØØ—n‘n÷
ò 
ð ØŸ™Ø˜' $§*¡* ¨Q¨t¯y©y¨k¸ÈÐHXÐYó÷ ˆCð " (™m¨EÑ2ˆOà $§¡Ø˜' $§*¡* ¨Q¨t¯y©y¨k¸ÀÐFWÐXó!÷ ˆKð (¨Ñ/°Ñ6ˆMàˆJÜ!'¨×(:Ñ(:Ó(<Ö!=‘��gØ!Ÿ_™_ØØ˜dŸj™j˜\¨¨4¯9©9¨+°ZÐ@Ø '°WÑ=ó÷ �ð
 ×!Ñ!à $Ø (Ø &Ø# E™{ñ	öñ ">ð Ÿ™ØØ˜$Ÿ*™*˜ Q t§y¡y k°Ð<Ø+Ñ@ó÷ ˆDð  Ÿ?™?ØØ˜$Ÿ*™*˜ Q t§y¡y k°Ð>à-Ø  ™KØ /Ð0ñó÷ ˆFð   ™ˆJà—/‘/ØØ˜$Ÿ*™*˜ Q t§y¡y k°Ð;Ø% k ]Ð3¸JÑGó÷ ð ð —‘ØØ˜$Ÿ*™*˜ Q t§y¡y k°Ð8à,¨X¨JÐ7Ø'Ø*ØAÀ(ÀÈ5ÐQ_ÐP`ÐaØ!ñó
÷ 
ˆBð —V‘V˜JÓ'×qÐ-@ÀÇÁÀÈAÈdÏiÉiÈ[ÐX^Ð_a×_eÑ_eÐfnÓ_oÐ^pÐ+qˆF÷C
÷ 
ôF  [¸ZÐPVÑWÐWùó] Nò
ò
ò
òòòññ
÷m
÷ 
÷ 
ð 
üsÚ   ‚L9–L¯LµA5L9Â*LÂ+L9Â.3LÃ!L
Ã">LÄ LÄ!A!LÆLÆALÇLÇ=LÈLÈA LÉLÉALÊLÊA
LË&L9Ë1LË2L9Ì
LÌLÌLÌLÌLÌLÌLÌL9ÌL6Ì%L(Ì&L6Ì2L9c              ƒ  óœ   #   • UR                  U R                   U 35      I S h  v•N nUR                  5         UR                  5       $  N$7fr   )rs   rM   Úraise_for_statusÚjson)r    rx   r]   Úresps       r   rp   ÚHttpGitHubClient._get_json§   s@   é € Ø—Z‘Z 4§9¡9 +¨d¨VÐ 4Ó5×5ˆØ×ÑÔØ�y‰y‹{Ðñ 6ùs   ‚#A¥A
¦%Ac              ƒ  óš   #   • UR                  U R                   U 3US9I S h  v•N nUR                  5         UR                  5       $  N$7f)N)r‚   )ÚpostrM   r�   r‚   )r    rx   r]   rg   rƒ   s        r   rr   ÚHttpGitHubClient._post_json¬   sE   é € Ø—[‘[ D§I¡I ;¨t¨fÐ!5¸D�[ÐA×AˆØ×ÑÔØ�y‰y‹{Ðñ Bùs   ‚"A¤A	¥%A)rM   rI   rJ   rD   rE   )NN)rD   úOptional[Settings]rE   z"Optional[httpx.AsyncBaseTransport]r'   r=   r&   )rx   úhttpx.AsyncClientr]   r   r'   Údict)rx   r‰   r]   r   rg   rŠ   r'   rŠ   )
r   r   r   r   r>   r.   r$   rp   rr   r   r   r   r   r@   r@   =   s€   † ÙMð (,Ø8<ðBà$ðBð 6ðBð 
õ	BðVXð ðVXð ð	VXð
 ðVXð ðVXð 
ôVXôp÷
r   r@   c                ó`   • U R                  SS5      nUR                  S5      =(       d    US:H  $ )NÚ\rC   z
force-app/zsfdx-project.json)ÚreplaceÚ
startswith)r]   rt   s     r   rl   rl   ²   s,   € Ø�‰�T˜3Ó€AØ�<‰<˜Ó%×A¨Ð.AÑ)AÐAr   zOptional[MockGitClient]Ú_mock_singletonc                óŒ   • U =(       d
    [        5       n U R                  S:X  a  [        U 5      $ [        c
  [	        5       q[        $ )NÚgithub)r
   Úgit_providerr@   r�   r)   )rD   s    r   Úget_git_clientr“   º   s:   € à×)œ<›>€HØ×Ñ Ó(Ü Ó)Ð)ÜÑÜ'›/ˆÜÐr   c                 ó"   • [        5       q[        $ r   )r)   r�   r   r   r   Úreset_mock_gitr•   Ä   s   € ä#“o€OÜÐr   )r]   r   r'   Úboolr   )rD   rˆ   r'   r   )r'   r)   )r>   Ú
__future__r   r7   Útypingr   r   r   r   rn   Úpydanticr   Úpackages.configr	   r
   r   r   r)   r@   rl   r�   r   r“   r•   r   r   r   Ú<module>r›      si   ðÚ =å "ã ß 1Ó 1ã Ý ç 2ô�	ô ô�ô ÷
ñ 
÷<rñ rôjBð
 ,0€Ð(Ó /öõr   