§
    }Štj0  ã                   ó   — d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZ ddlmZ d	d
lmZ d	dlmZ  ej        e¦  «        Zdee ed¬¦  «        f         ddfd„Zdefd„Zdedz  fd„Zdd„ZdS )a  
Implementation of a custom transfer agent for the transfer type "multipart" for
git-lfs.

Inspired by:
github.com/cbartz/git-lfs-swift-transfer-agent/blob/master/git_lfs_swift_transfer.py

Spec is: github.com/git-lfs/git-lfs/blob/master/docs/custom-transfers.md


To launch debugger while developing:

``` [lfs "customtransfer.multipart"]
path = /path/to/huggingface_hub/.venv/bin/python args = -m debugpy --listen 5678
--wait-for-client
/path/to/huggingface_hub/src/huggingface_hub/commands/huggingface_cli.py
lfs-multipart-upload ```é    N)Ú	Annotated)ÚCLIError)ÚLFS_MULTIPART_UPLOAD_COMMANDé   )Úget_sessionÚhf_raise_for_statusÚlogging)ÚSliceFileObjé   )ÚArgument)ÚoutÚpathz/Local path to repository you want to configure.)ÚhelpÚreturnc                 ó€  — t           j                             | ¦  «        }t           j                             |¦  «        st	          d¦  «        ‚t          j        d                     ¦   «         d|¬¦  «         t          j        dt          › �                     ¦   «         d|¬¦  «         t          j
        d|¬¦  «         dS )	zÑ
    Configure your repository to enable upload of files > 5GB.

    This command sets up git-lfs to use the custom multipart transfer agent
    which enables efficient uploading of large files in chunks.
    z)This does not look like a valid git repo.z/git config lfs.customtransfer.multipart.path hfT)ÚcheckÚcwdz-git config lfs.customtransfer.multipart.args z Local repo set up for largefiles)r   N)Úosr   ÚabspathÚisdirr   Ú
subprocessÚrunÚsplitr   r   Úresult)r   Ú
local_paths     úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/huggingface_hub/cli/lfs.pyÚlfs_enable_largefilesr   %   sÂ   € õ ”—’ Ñ&Ô&€JÝŒ7�=Š=˜Ñ$Ô$ð DÝÐBÑCÔCÐCÝ„NØ9×?Ò?ÑAÔAØØðñ ô ð õ
 „NØVÕ8TÐVÐV×\Ò\Ñ^Ô^ØØðñ ô ð õ
 „JÐ1¸
ÐCÑCÔCÐCÐCÐCó    Úmsgc                 ó®   — t          j        | ¦  «        dz   }t          j                             |¦  «         t          j                             ¦   «          dS )z-Write out the message in Line delimited JSON.ú
N)ÚjsonÚdumpsÚsysÚstdoutÚwriteÚflush)r   Úmsg_strs     r   Ú	write_msgr)   C   sD   € åŒj˜‰oŒo Ñ$€GÝ„J×Ò�WÑÔÐÝ„J×ÒÑÔÐÐÐr   c                  óp  — t          j        t          j                             ¦   «                              ¦   «         ¦  «        } d|                      d¦  «        |                      d¦  «        fv rdS |                      d¦  «        dvr.t                               d¦  «         t          j	        d¦  «         | S )z$Read Line delimited JSON from stdin.Ú	terminateÚtypeÚeventN)ÚdownloadÚuploadzReceived unexpected messager   )
r"   Úloadsr$   ÚstdinÚreadlineÚstripÚgetÚloggerÚcriticalÚexit)r   s    r   Úread_msgr8   J   s“   € å
Œ*•S”Y×'Ò'Ñ)Ô)×/Ò/Ñ1Ô1Ñ
2Ô
2€Cà�s—w’w˜v‘”¨¯ª°Ñ(8Ô(8Ð9Ð9Ð9àˆtà
‡w‚wˆwÑÔÐ5Ð5Ð5Ý�ŠÐ5Ñ6Ô6Ð6ÝŒ�‰Œˆà€Jr   c            
      ó  — t          j        t          j                             ¦   «                              ¦   «         ¦  «        } |                      d¦  «        dk    r|                      d¦  «        dk    s(t          ddddœi¦  «         t          j        d	¦  «         t          i ¦  «         	 t          ¦   «         }|€t          j        d¦  «         |d         }|d         }|d         d         }|d         d         }t          |                     d¦  «        ¦  «        }t          |                     ¦   «         ¦  «        }t          d|d	ddœ¦  «         g }t          |d¦  «        5 }	t          |¦  «        D ]±\  }
}t!          |	|
|z  |¬¦  «        5 }t#          ¦   «                              ||¬¦  «        }t'          |¦  «         |                     |j                             d¦  «        |
d	z   dœ¦  «         t          d||
d	z   |z  |dœ¦  «         ddd¦  «         n# 1 swxY w Y   Œ²	 ddd¦  «         n# 1 swxY w Y   t#          ¦   «                              |||dœ¬¦  «        }t'          |¦  «         t          d|dœ¦  «         �ŒÜ)zÜInternal git-lfs custom transfer agent for multipart uploads.

    This function implements the custom transfer protocol for git-lfs multipart uploads.
    Handles chunked uploads of large files to Hugging Face Hub.
    r-   ÚinitÚ	operationr/   Úerroré    zWrong lfs init operation)ÚcodeÚmessager   TNr   Úoidr   ÚactionÚhrefÚheaderÚ
chunk_sizeÚprogress)r-   r@   Ú
bytesSoFarÚbytesSinceLastÚrb)Ú	seek_fromÚ
read_limit)ÚdataÚetag)rL   Ú
partNumber)r@   Úparts)r"   Úcomplete)r-   r@   )r"   r0   r$   r1   r2   r3   r4   r)   r7   r8   ÚintÚpopÚlistÚvaluesÚopenÚ	enumerater
   r   Úputr   ÚappendÚheadersÚpost)Úinit_msgr   r@   ÚfilepathÚcompletion_urlrC   rD   Úpresigned_urlsrN   ÚfileÚiÚpresigned_urlrK   Úrs                 r   Úlfs_multipart_uploadrb   Y   s0  € õ Œz�#œ)×,Ò,Ñ.Ô.×4Ò4Ñ6Ô6Ñ7Ô7€HØ�LŠL˜Ñ!Ô! VÒ+Ð+°·²¸[Ñ0IÔ0IÈXÒ0UÐ0UÝ�7 RÐ4NÐOÐOÐPÑQÔQÐQÝŒ�‰Œˆõ ˆb�M„M€Mð@5Ý‰jŒjˆØˆ;õ
 ŒH�Q‰KŒKˆKà�%ŒjˆØ�v”;ˆØ˜Xœ vÔ.ˆØ�X”˜xÔ(ˆÝ˜Ÿš LÑ1Ô1Ñ2Ô2ˆ
Ý$(¨¯ª©¬Ñ$9Ô$9ˆõ
 	à#ØØØ"#ð	ð ñ	
ô 	
ð 	
ð ˆÝ�(˜DÑ!Ô!ð 	 TÝ$-¨nÑ$=Ô$=ð ð Ñ ��=Ý!ØØ *™nØ)ðñ ô ð ð Ý#™œ×)Ò)¨-¸dÐ)ÑCÔC�AÝ'¨Ñ*Ô*Ð*Ø—L’Là$%¤I§M¢M°&Ñ$9Ô$9Ø*+¨a©%ðð ñô ð õ à%/Ø#&Ø+,¨q©5°JÑ*>Ø.8ð	ð ñô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ4 ‰MŒM×ÒØàØðð ð ñ 
ô 
ˆõ 	˜AÑÔÐå˜J¨sÐ3Ð3Ñ4Ô4Ð4ñA@5s7   Å&*H5ÆB HÈH5ÈH È H5È#H È$H5È5H9È<H9)r   N)Ú__doc__r"   r   r   r$   Útypingr   Úhuggingface_hub.errorsr   Úhuggingface_hub.lfsr   Úutilsr   r   r	   Ú
utils._lfsr
   Ú
_frameworkr   Ú_outputr   Ú
get_loggerÚ__name__r5   Ústrr   Údictr)   r8   rb   © r   r   ú<module>rp      s„  ððð ð$ €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ð Ð à +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <à =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø %Ð %Ð %Ð %Ð %Ð %Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð ð 
ˆÔ	˜HÑ	%Ô	%€ðDØ
ØØˆØBð	
ñ 	
ô 	
ð	ôðDð 
ðDð Dð Dð Dð<�4ð ð ð ð ð�$˜‘+ð ð ð ð ðV5ð V5ð V5ð V5ð V5ð V5r   