
    rhru                        U d dl Z d dlZd dlZd dlZd dl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mZmZmZ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mZm Z m!Z! ddlm"Z"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rddl.m/Z/  ej`                  e1      Z2dZ3dZ4g dZ5ee6   e7d<   dZ8dZ9dZ:dZ;dZ<dZ=dee   ddfdZ>ddddddddd d!d"e?d#ee?ef   d$e?d%ee?   d&ee@   d'eeee?   e?f      d(eeee?   e?f      d)ee6   d*e@d+e6fd,ZA G d- d.e j                        ZCeeef   ZD G d/ d0      ZEd1eEd d!d"e?d$e?d%e?f
d2ZFd1eEdeeeCeeD   f      fd3ZGd4eDddfd5ZHd6eeD   d d!d"e?d$e?d%e?ddfd7ZId6eeD   d d!d"e?d$e?d%e?ddfd8ZJd6eeD   d d!d"e?d$e?d%e?ddfd9ZK G d: d;e      ZLd4eDdeLfd<ZMd=d>deeD   fd?ZNd=d>d@e6deeD   fdAZOdBe?ddfdCZPy)D    N)datetime)Path)Lock)TYPE_CHECKINGAnyDictListOptionalTupleUnion)quote   )	constants)CommitOperationAdd
UploadInfo_fetch_upload_modes)LocalUploadFileMetadataLocalUploadFilePathsget_local_upload_pathsread_upload_metadata)DEFAULT_REVISION
REPO_TYPES)DEFAULT_IGNORE_PATTERNSfilter_repo_objectstqdm)_format_size)is_xet_available)sha_fileobj)HfApi
   d   )
   2   K   r!   }         i  iX  i  COMMIT_SIZE_SCALE   i i'  r#   r"   
paths_listreturnc                    t         j                  d       t        |       t        kD  r+t         j	                  dt        |       ddt        dd       ddlm}  |d       }| D ]  }t        |j                        }|j                  }t        |j                        d	k7  rt        |j                        nd	}||   d
xx   dz  cc<   t        |dd       D ]7  \  }}|dk(  rd	ndj                  |d|       }||   d   j                  |       9  |j                         D ]]  \  }	}
|
d
   }t        |
d         }||z   }|t         kD  s(|	d	k(  rdn|	}t         j	                  d| d|dd|dd|ddt         dd       _ g }g }| D ]y  }|j"                  j%                         j&                  }|dz  }|t(        kD  r|j+                  |j                  |f       S|t,        kD  s]|j+                  |j                  |f       { |rkdj                  d |dd D              }t        |      dkD  rdt        |      dz
   dnd}t         j	                  dt        |       dt(         d | | d!       |rkdj                  d" |dd D              }t        |      dkD  rdt        |      dz
   dnd}t         j	                  dt        |       d#t,         d$| | d%       t         j                  d&       y)'au  
    Validate upload against repository limits and warn about potential issues.

    Args:
        paths_list: List of file paths to be uploaded

    Warns about:
        - Too many files in the repository (>100k)
        - Too many entries (files or subdirectories) in a single folder (>10k)
        - Files exceeding size limits (>20GB recommended, >50GB hard limit)
    z/Running validation checks on files to upload...zYou are about to upload ,z. files. This exceeds the recommended limit of z files per repository.
Consider:
  - Splitting your data into multiple repositories
  - Using fewer, larger files (e.g., parquet files)
  - See: https://huggingface.co/docs/hub/repositories-recommendationsr   )defaultdictc                      dt               dS )Nr   )filessubdirs)set     w/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/huggingface_hub/_upload_large_folder.py<lambda>z)_validate_upload_limits.<locals>.<lambda>X   s    qUXUZ=[ r4   .r0   r   N/r1   rootzFolder 'z' contains z
 entries (z files and z/ subdirectories). This exceeds the recommended z< entries per folder.
Consider reorganising into sub-folders.i ʚ;z
  - c              3   4   K   | ]  \  }}| d |dd  ywz: z.1fGBNr3   .0pathsizes      r5   	<genexpr>z*_validate_upload_limits.<locals>.<genexpr>   s#     !ajdDTF"T#Jb"9!a      z
  ... and z more files Found z files exceeding the zGB hard limit:
  - zM
These files may fail to upload. Consider splitting them into smaller chunks.c              3   4   K   | ]  \  }}| d |dd  ywr<   r3   r>   s      r5   rB   z*_validate_upload_limits.<locals>.<genexpr>   s#     !\jdDTF"T#Jb"9!\rC   z files larger than zGB (recommended limit):
  - z2
Large files may slow down loading and processing.zValidation checks complete.)loggerinfolenMAX_FILES_PER_REPOwarningcollectionsr.   r   path_in_repopartsstrparent	enumeratejoinadditemsMAX_FILES_PER_FOLDER	file_pathstatst_sizeMAX_FILE_SIZE_GBappendRECOMMENDED_FILE_SIZE_GB)r*   r.   entries_per_folderpathsr@   rO   rQ   ichildfolderdata
file_countsubdir_counttotal_entriesfolder_displaylarge_filesvery_large_filesrA   size_gb	files_strmore_strs                        r5   _validate_upload_limitsrl   ;   s\    KKAB :++&s:q&9 :55G4J KTU	
 ()45[)\ =E&&'

 &)%5%<T[[!#6"7+q0+ "%*- 	=HAuFSr(;Fv&y155e<	== +002 ']
4	?+"\1//'-}V&NNN>*+mA5F Gq>\!,< =00DQ/G H:: K >##%--&%%##U%7%7$AB// 2 2G<=> MM!aL\]_^_L`!aa	LOP`LadeLe\#&6"7!";!<KHkmS)*++@AQ@R S+hZ ([\	
 MM!\KXZYZO!\\	GJ;GWZ[G[\#k"2Q"6!7{CacS%&&9:R9S T+hZ (@A	
 KK-.r4   T<   )revisionprivateallow_patternsignore_patternsnum_workersprint_reportprint_report_everyapir   repo_idfolder_path	repo_typern   ro   rp   rq   rr   rs   rt   c                   |t        d      |t        vrt        dt               |t        }t              j	                         j                         j                         st        d d      |g }nt        |t              r|g}|t        z  }|'t        j                         xs d}t        |dz
  d      }| j                  |||d	      }t        j                  d
|        |j                   }t#               xr | j%                  |||d      j&                  }|rt(        nt*        }t-        fdj/                  d      D        ||      }|D cg c]  }t1        |       }}t        j                  dt3        |       d       t5        |       t        j                  d       t7        |d      D cg c]  }|t9        |j:                        f }}t=        ||      }t?        |      D cg c]#  }tA        jB                  tD        || |||d      % }}|D ]  }|jG                           |	rtI        d|jK                         z          tM        jL                         }	 tM        jN                  d       tM        jL                         |z
  |
k\  r/|	rtQ        |jK                                tM        jL                         }|jS                         rtU        j                  d       n|D ]  }|jW                           t        j                  |jK                                tU        j                  d       yc c}w c c}w c c}w )zUpload a large folder to the Hub in the most resilient way possible.

    See [`HfApi.upload_large_folder`] for the full documentation.
    NzFor large uploads, `repo_type` is explicitly required. Please set it to `model`, `dataset` or `space`. If you are using the CLI, pass it as `--repo-type=model`.z"Invalid repo type, must be one of zProvided path: 'z' is not a directoryr      T)rv   rx   ro   exist_okzRepo created: 
xetEnabled)rv   rx   rn   expandc              3   ~   K   | ]4  }|j                         s|j                        j                          6 y wN)is_filerelative_toas_posix)r?   r@   rw   s     r5   rB   z/upload_large_folder_internal.<locals>.<genexpr>   s1     idZ^ZfZfZh		+	&	/	/	1is   =$=z**/*)rp   rq   rF   z candidate files to uploadzStarting upload...zRecovering from metadata files)desc)statusru   rv   rx   rn   )targetkwargsz

zIs done: exiting main loopzUpload is complete!),
ValueErrorr   r   r   
expanduserresolveis_dir
isinstancerP   r   os	cpu_countmaxcreate_reporH   rI   rv   r   	repo_infoxet_enabledUPLOAD_BATCH_SIZE_XETUPLOAD_BATCH_SIZE_LFSr   globr   rJ   rl   r   r   rN   LargeUploadStatusrange	threadingThread_worker_jobstartprintcurrent_reporttimesleep_print_overwriteis_doneloggingrS   )ru   rv   rw   rx   rn   ro   rp   rq   rr   rs   rt   nb_coresrepo_urlis_xet_enabledupload_batch_sizefiltered_paths_listrelpathr*   r^   rU   r   _threadsthreadlast_report_tss     `                      r5   upload_large_folder_internalr      sE   & I
 	
 
"=j\JKK#{#..088:K+K=8LMNN	OS	)*+..O<<>&Q(Q,* w)W_cdH
KK.
+,G 	 	MM	  

 +  2@-EZ .ik>N>Nv>Vi%'
 Obb7(g>bJb
KK&Z))CDE J'
KK$%
 *+KL 
$[%2D2DEFE  u&78F {#  	 "&$		
G    fv,,../YY[N


199;'+== !6!6!89!YY[N>>LL56    KK%%'(LL&'g cs   MM=(Mc                       e Zd Z ej                         Z ej                         Z ej                         Z ej                         Z ej                         Z	y)	WorkerJobN)
__name__
__module____qualname__enumautoSHA256GET_UPLOAD_MODEPREUPLOAD_LFSCOMMITWAITr3   r4   r5   r   r     sC    TYY[FdiikODIIKMTYY[F499;Dr4   r   c                   d    e Zd ZdZddee   defdZdefdZde	ded	e
dd
fdZdefdZde	fdZy
)r   zBContains information, queues and tasks for a large upload process.rU   r   c                    || _         t        j                         | _        t        j                         | _        t        j                         | _        t        j                         | _        t               | _        d| _	        d| _
        d| _        || _        d| _        d| _        d | _        t!        j"                         | _        d| _        t               | _        | j                   D ]  }|\  }}|j*                  | j                  j-                  |       0|j.                  | j                  j-                  |       X|j.                  dk(  r(|j0                  s| j
                  j-                  |       |j2                  s| j                  j-                  |       t4        j7                  d|j8                   d        y )Nr   r   lfszSkipping file z! (already uploaded and committed))rU   queueQueuequeue_sha256queue_get_upload_modequeue_preupload_lfsqueue_commitr   locknb_workers_sha256nb_workers_get_upload_modenb_workers_preupload_lfsr   nb_workers_commitnb_workers_waitinglast_commit_attemptr   now_started_at
_chunk_idx_chunk_locksha256putupload_modeis_uploadedis_committedrH   debugrN   )selfrU   r   itemr^   metadatas         r5   __init__zLargeUploadStatus.__init__%  sc   
7<{{}@E">Ckkm 7<{{}F	&'/0'-.%&7&''(48 #<<> !% JJ 	eD"OE8&!!%%d+%%-**..t4%%.x7K7K((,,T2**!!%%d+~e.@.@-AAbcd	er4   r+   c                 l    | j                   5  t        | j                     cd d d        S # 1 sw Y   y xY wr   )r   r(   r   r   s    r5   target_chunkzLargeUploadStatus.target_chunkG  s,     	6$T__5	6 	6 	6s   *3successnb_itemsdurationNc           
         | j                   5  |s/t        j                  d| d       | xj                  dz  c_        nI|t        | j                     k\  r3|dk  r.t        j                  d| d       | xj                  dz  c_        t        dt        | j                  t        t              dz
              | _        d d d        y # 1 sw Y   y xY w)NzFailed to commit z9 files at once. Will retry with less files in next batch.r   (   zSuccessfully committed z. at once. Increasing the limit for next batch.r   )	r   rH   rL   r   r(   rI   r   minrJ   )r   r   r   r   s       r5   update_chunkzLargeUploadStatus.update_chunkK  s     	W!28*<uvw1$.t??HrM5hZ?mno1$!!S#>O:PST:T%UVDO	W 	W 	Ws   B0CCc                    d}d}d}d}d}d}d}d}d}	d}
d}| j                   5  | j                  D ]  \  }}|j                  r|
dz  }
|	|j                  z  }	|dz  }|j                  |dz  }||j                  z  }|j
                  dk(  r|dz  }|j
                  |dz  }|j                  r|dz  }||j                  z  }|j                  s|dz  }||j                  z  } t        |	      }t        j                         }|j                  d      }|| j                  z
  }t        |      j                  d      d   }d}|d| d	| d
z  }|dz  }|dz  }|d| d| d	t        |       d| d	z  }|d| d| d	t        |       d| d	z  }|dkD  r	|d| dz  }|d| d| d	t        |       d| d	z  }|d|
 dz  }|dz  }|d| j                   dz  }|d| j                    dz  }|d| j"                   dz  }|d| j$                   dz  }|d| j&                   dz  }|dz  }|cddd       S # 1 sw Y   yxY w)z<Generate a report of the current status of the large upload.r   r   Nr   z%Y-%m-%d %H:%M:%Sr7   z
---------- z (z) z----------
z	Files:   zhashed r9   z) | zpre-uploaded: )z (+z unsure)z | committed: z | ignored: 
z	Workers: z	hashing: z | zget upload mode: zpre-uploading: zcommitting: z	waiting: z3---------------------------------------------------)r   rU   should_ignorerA   r   r   r   r   r   r   r   strftimer   rP   splitr   r   r   r   r   )r   	nb_hashedsize_hashednb_preuploadednb_lfsnb_lfs_unsuresize_preuploadednb_committedsize_committed
total_sizeignored_filestotal_filesr   r   total_size_strr   now_strelapsedelapsed_strmessages                       r5   r   z LargeUploadStatus.current_reportV  s   	
YY /	#zz 48))!Q&Mhmm+
q ??.NI8==0K''50aKF''/!Q&M''"a'N$5$(( A%L"hmm3N%4& **5N,,.Cll#67GD,,,Gg,,,S1!4K%G7)2k]"55G&G{"G1[ML<U;VVWXfWggkllG'7q<P`CaBbbcdrcsstuuGq Sx88~Q{m2lSaFbEccdesdttuvvGm_B77G{"G4#9#9":#>>G*4+J+J*K3OOG)F)F(GsKKGd&<&<%=SAAG4#:#:";2>>GxG_/	 /	 /	s   B*H4EH44H=c                 ~    | j                   5  t        d | j                  D              cd d d        S # 1 sw Y   y xY w)Nc              3   V   K   | ]!  \  }}|j                   xs |j                   # y wr   r   r   r?   r   r   s      r5   rB   z,LargeUploadStatus.is_done.<locals>.<genexpr>  s(     e;1hx,,F0F0FFe   '))r   allrU   r   s    r5   r   zLargeUploadStatus.is_done  s7    YY 	feZ^ZdZdee	f 	f 	fs   3<)r   )r   r   r   __doc__r	   
JOB_ITEM_Tintr   r   boolfloatr   rP   r   r   r3   r4   r5   r   r   "  sn    L ed:.  e3  eD6c 6	WD 	WC 	W5 	WT 	W= =~f fr4   r   r   c                 P	   	 d}t        |       }|y|\  }}|t        j                  k(  rX|d   }	 t        |       | j                  j                  |       | j                  5  | xj                  dz  c_        ddd       nT|t        j                  k(  r	 t!        |||||       |D ]  }|\  }
}|j"                  r|j$                  dk(  r| j&                  j                  |       @|j$                  d	k(  r| j(                  j                  |       k| j                  j                  |        | j                  5  | xj*                  dz  c_        ddd       nz|t        j,                  k(  r`	 t/        |||||       |D ]  }| j(                  j                  |        	 | j                  5  | xj0                  dz  c_        ddd       n|t        j2                  k(  rt5        j4                         }d}	 t7        |||||       t5        j4                         |z
  }| j9                  |t;        |      |       | j                  5  t5        j4                         | _        | xj>                  dz  c_        ddd       nV|t        j@                  k(  rCt5        jB                  tD               | j                  5  | xjF                  dz  c_#        ddd       # t        $ r  t        $ rR}	t        j                  d|	        t        j                          | j                  j                  |       Y d}	~	d}	~	ww xY w# 1 sw Y   rxY w# t        $ r  t        $ r7}	t        j                  d|	        t        j                          Y d}	~	d}	~	ww xY w# 1 sw Y   xY w# t        $ r  t        $ rY}	t        j                  d
|	        t        j                          |D ]  }| j&                  j                  |        Y d}	~	fd}	~	ww xY w# 1 sw Y   ExY w# t        $ r  t        $ r[}	t        j                  d|	        t        j                          |D ]  }| j(                  j                  |        d}Y d}	~	}d}	~	ww xY w# 1 sw Y   xY w# 1 sw Y   xY w)a  
    Main process for a worker. The worker will perform tasks based on the priority list until all files are uploaded
    and committed. If no tasks are available, the worker will wait for 10 seconds before checking again.

    If a task fails for any reason, the item(s) are put back in the queue for another worker to pick up.

    Read `upload_large_folder` docstring for more information on how tasks are prioritized.
    TNr   zFailed to compute sha256: r   )ru   rv   rx   rn   zFailed to get upload mode: r   regularzFailed to preupload LFS: zFailed to commit: F)$_determine_next_jobr   r   _compute_sha256r   r   KeyboardInterrupt	ExceptionrH   error	traceback
format_excr   r   r   r   _get_upload_moder   r   r   r   r   r   _preupload_lfsr   r   r   _commitr   rJ   r   r   r   r   WAITING_TIME_IF_NO_TASKSr   )r   ru   rv   rx   rn   next_jobjobrU   r   er   r   start_tsr   r   s                  r5   r   r     s/    AE 'v.
U )"""8D.%,,006  .((A-(. . I---' CI`hi  	;"8))''50..2248))Y6''++D10044T:	;  711Q617 7 I+++
9u#w)^fg! 2D''++D12  5//14/5 5 I$$$yy{HG	 39W_` yy{X-HUX> .-1YY[*((A-(. . INN"JJ/0 /))Q.)/u  %  .9!=>$$&##''--.
. . %  ':1#>?$$&&'(7 7 %  98<=$$&! 9D..2248995 5 %   1!56$$&! 2D''++D12 . ./ /s   &K "L?M <N02N# /P9P /R8RL<*AL77L<?MN,NNN #P5AP		PPR0ARRRR%c                 .   | j                   5  | j                  dk(  r| j                  j                         dkD  r| j                  t        j
                         | j                  z
  dkD  rg| xj                  dz  c_        t        j                  d       t        j                  t        | j                  | j                               fcd d d        S | j                  dk(  r| j                  j                         dk\  rg| xj                  dz  c_        t        j                  d       t        j                  t        | j                  | j                               fcd d d        S | j                  j                         t        k\  re| xj                  dz  c_        t        j                  dt         d       t        j                  t        | j                  t              fcd d d        S | j                   j                         | j"                  k\  rr| j$                  dk(  rc| xj$                  dz  c_        t        j                  d	       t        j&                  t        | j                   | j"                        fcd d d        S | j(                  j                         dkD  rg| j*                  dk(  rX| xj*                  dz  c_        t        j                  d
       t        j,                  t/        | j(                        fcd d d        S | j                  j                         dkD  rl| j                  dk(  r]| xj                  dz  c_        t        j                  d       t        j                  t        | j                  t              fcd d d        S | j                   j                         | j"                  k\  r| j$                  dk(  st0        j2                  sc| xj$                  dz  c_        t        j                  d       t        j&                  t        | j                   | j"                        fcd d d        S | j(                  j                         dkD  rX| xj*                  dz  c_        t        j                  d       t        j,                  t/        | j(                        fcd d d        S | j                  j                         dkD  r]| xj                  dz  c_        t        j                  d       t        j                  t        | j                  t              fcd d d        S | j                   j                         dkD  rc| xj$                  dz  c_        t        j                  d       t        j&                  t        | j                   | j"                        fcd d d        S | j                  dk(  r| j                  j                         dkD  r| j                  t        j
                         | j                  z
  dkD  rg| xj                  dz  c_        t        j                  d       t        j                  t        | j                  | j                               fcd d d        S | j                  dk(  r| j                  j                         dkD  r| j(                  j                         dk(  r| j                  j                         dk(  r| j                   j                         dk(  r| j*                  dk(  r| j                  dk(  rv| j$                  dk(  rg| xj                  dz  c_        t        j                  d       t        j                  t        | j                  | j                               fcd d d        S t5        d | j6                  D              rt        j9                  d       	 d d d        y | xj:                  dz  c_        t        j                  dt<         d       t        j>                  g fcd d d        S # 1 sw Y   y xY w)Nr   i,  r   z;Job: commit (more than 5 minutes since last commit attempt)   zJob: commit (>100 files ready)zJob: get upload mode (>z files ready)z5Job: preupload LFS (no other worker preuploading LFS)z.Job: sha256 (no other worker computing sha256)z:Job: get upload mode (no other worker getting upload mode)zJob: preupload LFSzJob: sha256zJob: get upload moderm   z-Job: commit (1 min since last commit attempt)zJob: commitc              3   V   K   | ]!  \  }}|j                   xs |j                   # y wr   r   r   s      r5   rB   z&_determine_next_job.<locals>.<genexpr>i  s(     a[Q&&@(*@*@@ar   z.All files have been processed! Exiting worker.zNo task available, waiting... (zs)) r   r   r   qsizer   r   rH   r   r   r   _get_nr   r   MAX_NB_FILES_FETCH_UPLOAD_MODEr   r   r   r   r   r   r   r   r   _get_oner   HF_HUB_ENABLE_HF_TRANSFERr   rU   rI   r   r  r   )r   s    r5   r  r    s   	 i( $$)##))+a/**6		f8886A$$)$LLVW$$fV-@-@&BUBUBW&XYi( i( %%*v/B/B/H/H/Jc/Q$$)$LL9:$$fV-@-@&BUBUBW&XY!i( i(& ))//15SS--2-LL23Q2RR_`a--vf6R6RTr/st-i( i(2 ''--/63K3KKPVPoPostPt++q0+LLPQ++VF4N4NPVPhPh-ij9i( i(>   &&(1,1I1IQ1N$$)$LLIJ$$hv/B/B&CDEi( i(J ))//1A5&:[:[_`:`--2-LLUV--vf6R6RTr/stQi( i(X ''--/63K3KK++q0	8[8[++q0+LL-.++VF4N4NPVPhPh-ijci( i(h   &&(1,$$)$LL'$$hv/B/B&CDoi( i(t ))//1A5--2-LL/0--vf6R6RTr/st{i( i(@ ''--/!3++q0+LL-.++VF4N4NPVPhPh-ijGi( i(N $$)##))+a/**6		f8886A$$)$LLHI$$fV-@-@&BUBUBW&XY]i( i(f $$)##))+a/##))+q0,,2249**002a7((A-11Q6//14$$)$LL'$$fV-@-@&BUBUBW&XY}i( i(B aTZT`T`aaKKHIGi( i(N %%*%LL:;S:TTVWXNNB'Si( i( i(sf   B:`B	`$A<`*B`A:`A?`B`9A+`.A0`(A6`(B9`+D`2`>A``r   c                     | \  }}|j                   B|j                  j                  d      5 }t        |      j	                         |_         ddd       |j                  |       y# 1 sw Y   xY w)z1Compute sha256 of a file and save it in metadata.Nrb)r   rW   openr   hexsave)r   r^   r   fs       r5   r  r  y  s^    OE8__!!$' 	31)!n002HO	3MM%	3 	3s   A&&A/rU   c           
      `   | D cg c]  }t        |       }}t        ||||j                         t        |d      |j                         t        | |      D ]N  \  }}|\  }}	|j                  |	_        |j                  |	_	        |j                  |	_        |	j                  |       P yc c}w )zmGet upload mode for each file and update metadata.

    Also receive info if the file should be ignored.
    rE   )safe)	additionsrx   rv   headersrn   endpointN)_build_hacky_operationr   _build_hf_headersr   r&  zip_upload_moder   _should_ignorer   _remote_oid
remote_oidr   )
rU   ru   rv   rx   rn   r   r$  additionr^   r   s
             r5   r  r    s    
 ;@@$'-@I@%%'xb) eY/ hx'44!)!8!8&22e As   B+c                     | D cg c]  }t        |       }}|j                  ||||       | D ]  \  }}d|_        |j                  |        yc c}w )z(Preupload LFS files and update metadata.)rv   rx   rn   r$  TN)r'  preupload_lfs_filesr   r   	rU   ru   rv   rx   rn   r   r$  r^   r   s	            r5   r  r    si    :?@$'-@I@	   ! x#e As   Ac                     | D cg c]  }t        |       }}|j                  ||||d       | D ]  \  }}d|_        |j                  |        yc c}w )zCommit files to the repo.z(Add files using upload-large-folder tool)rv   rx   rn   
operationscommit_messageTN)r'  create_commitr   r   r1  s	            r5   r  r    sl    :?@$'-@I@A   ! x $e As   Ac                       e Zd ZddZy)HackyCommitOperationAddNc                 n    t        | j                  t              rt        | j                        | _        y y r   )r   path_or_fileobjr   rP   r   s    r5   __post_init__z%HackyCommitOperationAdd.__post_init__  s*    d**D1#&t';';#<D  2r4   )r+   N)r   r   r   r:  r3   r4   r5   r7  r7    s    =r4   r7  c                    | \  }}t        |j                  |j                        }|j                  j                  d      5 }|j	                  d      d d }d d d        |j
                  t        d      t        t        j                  |j
                        |j                        |_        |j                  |_        |j                  |_        |j                   |_        |S # 1 sw Y   xY w)N)rN   r9  r  i   z&sha256 must have been computed by now!)r   rA   sample)r7  rN   rW   r  peekr   r   r   bytesfromhexrA   upload_infor   r*  r   r+  r-  r,  )r   r^   r   	operationfiler<  s         r5   r'  r'    s    OE8'U5G5GY^YhYhiI			d	# &t3%&ABB&emmHOO.LS[S`S`iopI%11I'55I$//I& &s   C%%C.r   zqueue.Queue[JOB_ITEM_T]c                 &     | j                          gS r   )get)r   s    r5   r  r    s    EIIK=r4   nc                     t        t         | j                         |            D cg c]  } | j                          c}S c c}w r   )r   r   r  rD  )r   rE  r   s      r5   r  r    s2    !&s;5;;=!'<!=>AIEIIK>>>s   Areportc                 $   | dz  } t        j                         j                  t        fd| j	                         D              }t        |      D ]@  }t        j                  j                  d       t        j                  j                  d       B t        j                  j                  |        t        j                  j                  dt        | j	                         d         z
  z         t        j                  j                          y)zPrint a report, overwriting the previous lines.

    Since tqdm in using `sys.stderr` to (re-)write progress bars, we need to use `sys.stdout`
    to print the report.

    Note: works well only if no other process is writing to `sys.stdout`!
    r   c              3   @   K   | ]  }t        |      z  d z     yw)r   N)rJ   )r?   lineterminal_widths     r5   rB   z#_print_overwrite.<locals>.<genexpr>  s     St3t9.2Ss   z[Kz[Fr   r8   N)shutilget_terminal_sizecolumnssum
splitlinesr   sysstdoutwriterJ   flush)rG  nb_linesr   rK  s      @r5   r   r     s     dNF--/77N Sv?P?P?RSSH 8_ #

$

"#
 JJVJJSNS1B1B1DR1H-IIJKJJr4   )Qr   r   r   r   rL  rQ  r   r   r
  r   pathlibr   r   typingr   r   r   r	   r
   r   r   urllib.parser   rE   r   _commit_apir   r   r   _local_folderr   r   r   r   r   r   utilsr   r   r   utils._cache_managerr   utils._runtimer   	utils.shar   hf_apir   	getLoggerr   rH   r  r  r(   r   __annotations__r   r   rK   rV   rZ   r\   rl   rP   r  r   Enumr   r   r   r   r  r  r  r  r  r7  r'  r  r  r   r3   r4   r5   <module>rc     sZ     	   
       I I I   L L v v 3 E E . , " 			8	$ !$ O 49 O       ]/-A(B ]/t ]/L #"6:7;!% t(	t(t( sDy!t(
 t( smt( d^t( U49c>23t( eDIsN34t( #t( t( t(x		  ')@@A
uf ufpj/j/	j/ j/ 	j/
 j/Zj( 1 j(huYPTU_P`E`?a6b j(d*  D, 7 S UX dg lp ,$z*  3 SV be jn 4
# ' C C [^ cg (=0 = 0G &- $z2B ?+ ? ?Z8H ?S T r4   