Ë
    Q^(hm`  ã                   óz  — 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 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) erddl*m+Z+  ejX                  e-«      Z.dZ/dZ0dZ1g d¢Z2ee3   e4d<   ddddddddœddde5dee5ef   de5dee5   dee6   deeee5   e5f      d eeee5   e5f      d!ee3   d"e6d#e3fd$„Z7 G d%„ d&e jp                  «      Z9eeef   Z: G d'„ d(«      Z;d)e;ddde5de5de5f
d*„Z<d)e;d+eee9ee:   f      fd,„Z=d-e:d+dfd.„Z>d/ee:   ddde5de5de5d+dfd0„Z?d-e:ddde5de5de5d+dfd1„Z@d/ee:   ddde5de5de5d+dfd2„ZA G d3„ d4e«      ZBd-e:d+eBfd5„ZCd6d7d+ee:   fd8„ZDd6d7d9e3d+ee:   fd:„ZEd6d7d+ee:   fd;„ZFd<e5d+dfd=„ZGy)>é    N)Údatetime)ÚPath)ÚLock)ÚTYPE_CHECKINGÚ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)Úsha_fileobj)ÚHfApié
   éK   é–   )
é   é2   r   éd   é}   éÈ   éú   i�  iX  iè  ÚCOMMIT_SIZE_SCALETé<   )ÚrevisionÚprivateÚallow_patternsÚignore_patternsÚnum_workersÚprint_reportÚprint_report_everyÚapir   Úrepo_idÚfolder_pathÚ	repo_typer(   r)   r*   r+   r,   r-   r.   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#        ˆfd„‰j%                  d«      D «       ||¬«      }|D �cg c]  }t'        ‰|«      ‘Œ }}t        j                  dt)        |«      › d�«       t+        |d¬«      D �cg c]  }|t-        ‰|j.                  «      f‘Œ }}t1        |«      }t3        |«      D �cg c]#  }t5        j6                  t8        || |||dœ¬«      ‘Œ% }}|D ]  }|j;                  «        Œ |	rt=        d|j?                  «       z   «       tA        j@                  «       }	 tA        jB                  d«       tA        j@                  «       |z
  |
k\  r/|	rtE        |j?                  «       «       tA        j@                  «       }|jG                  «       rtI        j                  d«       nŒ…|D ]  }|jK                  «        Œ t        j                  |j?                  «       «       tI        j                  d«       yc c}w c c}w c c}w )zŒUpload a large folder to the Hub in the most resilient way possible.

    See [`HfApi.upload_large_folder`] for the full documentation.
    Nz For 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)r0   r2   r)   Úexist_okzRepo created: c              3   ó~   •K  — | ]4  }|j                  «       sŒ|j                  ‰«      j                  «       –— Œ6 y ­w©N)Úis_fileÚrelative_toÚas_posix)Ú.0Úpathr1   s     €úb/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/huggingface_hub/_upload_large_folder.pyú	<genexpr>z/upload_large_folder_internal.<locals>.<genexpr>d   s1   øè ø€ Òi°dÐZ^×ZfÑZfÕZhˆ×	Ñ	˜+Ó	&×	/Ñ	/×	1Ñiùs   ƒ=™$=z**/*)r*   r+   zFound z candidate files to uploadzRecovering from metadata files)Údesc)Ústatusr/   r0   r2   r(   )ÚtargetÚkwargsz

zIs done: exiting main loopzUpload is complete!)&Ú
ValueErrorr   r   r   Ú
expanduserÚresolveÚis_dirÚ
isinstanceÚstrr   ÚosÚ	cpu_countÚmaxÚcreate_repoÚloggerÚinfor0   r   Úglobr   Úlenr   r   Úpath_in_repoÚLargeUploadStatusÚrangeÚ	threadingÚThreadÚ_worker_jobÚstartÚprintÚcurrent_reportÚtimeÚsleepÚ_print_overwriteÚis_doneÚloggingÚjoin)r/   r0   r1   r2   r(   r)   r*   r+   r,   r-   r.   Únb_coresÚrepo_urlÚfiltered_paths_listÚrelpathÚ
paths_listÚpathsÚitemsr@   Ú_ÚthreadsÚthreadÚlast_report_tss     `                    r=   Úupload_large_folder_internalrk   2   sæ  ø€ ð& ÐÜðIó
ð 	
ð œ
Ñ"ÜÐ=¼j¸\ÐJÓKÐKØÐÜ#ˆä�{Ó#×.Ñ.Ó0×8Ñ8Ó:€KØ×ÑÔÜÐ+¨K¨=Ð8LÐMÓNÐNàÐØ‰Ü	�O¤SÔ	)Ø*Ð+ˆØÔ.Ñ.€OàÐÜ—<‘<“>Ò& QˆÜ˜( Q™,¨Ó*ˆð �‰ w¸)ÈWÐ_cˆÓd€HÜ
‡K�K�.  
Ð+Ô,Ø×Ñ€Gô .Ûi¸k×>NÑ>NÈvÓ>VÔiØ%Ø'ôÐð
 ObÖbÀ7Ô(¨°gÕ>Ðb€JÐbÜ
‡K�K�&œ˜Z›Ð)Ð)CÐDÔEô
 ˜*Ð+KÔLöàð 
Ô$ [°%×2DÑ2DÓEÒFð€Eð ô ˜uÓ%€Fô �{Ó#öð ô 	×ÑÜà ØØ"Ø&Ø$ñö		
ð€Gð ð ò ˆØ�‰�ðñ Üˆf�v×,Ñ,Ó.Ñ.Ô/Ü—Y‘Y“[€NØ
Ü�
‰
�1ŒÜ�9‰9‹;˜Ñ'Ð+=Ò=ÙÜ  ×!6Ñ!6Ó!8Ô9Ü!ŸY™Y›[ˆNØ�>‰>ÔÜ�L‰LÐ5Ô6Øð ð ò ˆØ�‰�ðô ‡K�K�×%Ñ%Ó'Ô(Ü‡L�LÐ&Õ'ùò] cùòùòs   Ä$K,Å*K1Æ#(K6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ÚWAIT© ó    r=   rm   rm   ž   sC   „ ØˆT�Y‰Y‹[€FØ�d—i‘i“k€OØ�D—I‘I“K€MØˆT�Y‰Y‹[€FØˆ4�9‰9‹;�Dry   rm   c                   ó^   — e Zd ZdZde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	)rR   zBContains information, queues and tasks for a large upload process.rf   c                 óz  — || _         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(|j.                  s| j
                  j+                  |«       Œ�|j0                  s| j                  j+                  |«       Œ·t2        j5                  d|j6                  › d�«       ŒÛ y )Nr   r   ÚlfszSkipping file z! (already uploaded and committed))rf   Ú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_lfsÚnb_workers_commitÚnb_workers_waitingÚlast_commit_attemptr   ÚnowÚ_started_atÚ
_chunk_idxÚ_chunk_lockÚsha256ÚputÚupload_modeÚis_uploadedÚis_committedrM   ÚdebugrQ   )Úselfrf   Úitemre   Úmetadatas        r=   Ú__init__zLargeUploadStatus.__init__¬   s[  € ØˆŒ
Ü7<·{±{³}ˆÔÜ@EÇÁÃˆÔ"Ü>C¿k¹k»mˆÔ Ü7<·{±{³}ˆÔÜ“FˆŒ	à&'ˆÔØ/0ˆÔ'Ø-.ˆÔ%Ø&'ˆÔØ'(ˆÔØ48ˆÔ ä#Ÿ<™<›>ˆÔØ ˆŒÜ!%£ˆÔð —J‘Jò 	eˆDØ"‰OˆE�8Ø�‰Ð&Ø×!Ñ!×%Ñ% dÕ+Ø×%Ñ%Ð-Ø×*Ñ*×.Ñ.¨tÕ4Ø×%Ñ%¨Ò.°x×7KÒ7KØ×(Ñ(×,Ñ,¨TÕ2Ø×*Ò*Ø×!Ñ!×%Ñ% dÕ+ä—‘˜~¨e×.@Ñ.@Ð-AÐAbÐcÕdñ	ery   Úreturnc                 ól   — | j                   5  t        | j                     cd d d «       S # 1 sw Y   y xY wr7   )r�   r&   rŒ   ©r”   s    r=   Útarget_chunkzLargeUploadStatus.target_chunkÍ   s,   € Ø×Ññ 	6Ü$ T§_¡_Ñ5÷	6÷ 	6ò 	6ús   �*ª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�   rM   ÚwarningrŒ   r&   rN   rK   ÚminrP   )r”   rœ   r�   rž   s       r=   Úupdate_chunkzLargeUploadStatus.update_chunkÑ   s®   € Ø×Ññ 	WÙÜ—‘Ð!2°8°*Ð<uÐvÔwØ—’ 1Ñ$–ØÔ.¨t¯©Ñ?Ò?ÀHÈrÂMÜ—‘Ð5°h°ZÐ?mÐnÔoØ—’ 1Ñ$•ä! !¤S¨¯©¼#Ô>OÓ:PÐSTÑ:TÓ%UÓVˆDŒO÷	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:%Sú.z
----------ú z (z) z----------
z	Files:   zhashed ú/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ƒ   rf   Úshould_ignoreÚsizerŽ   r�   r‘   r’   r   r   rŠ   Ústrftimer‹   rH   Ú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_filesrg   r–   Útotal_size_strrŠ   Únow_strÚelapsedÚelapsed_strÚmessages                       r=   rY   z LargeUploadStatus.current_reportÜ   s  € àˆ	ØˆØˆØˆØˆØÐØˆØˆØˆ
ØˆØˆà�Y‰Yñ /	Ø#Ÿz™zò 4‘��8Ø×)Ò)Ø! QÑ&�MØØ˜hŸm™mÑ+�
Ø˜qÑ �Ø—?‘?Ð.Ø ‘N�IØ 8§=¡=Ñ0�KØ×'Ñ'¨5Ò0Ø˜a‘K�FØ×'Ñ'Ð/Ø! QÑ&�MØ×'Ò'Ø" aÑ'�NØ$¨¯©Ñ5Ð$Ø×(Ó(Ø  AÑ%�LØ" h§m¡mÑ3‘Nð%4ô& *¨*Ó5ˆNä—,‘,“.ˆCØ—l‘lÐ#6Ó7ˆGØ˜D×,Ñ,Ñ,ˆGÜ˜g›,×,Ñ,¨SÓ1°!Ñ4ˆKà%ˆGØ˜˜7˜) 2 k ]°"Ð5Ñ5ˆGØ�Ñ&ˆGà�{Ñ"ˆGØ˜  ¨1¨[¨M¸¼LÈÓ<UÐ;VÐVWÐXfÐWgÐgkÐlÑlˆGØ˜¨Ð'7°q¸¸ÀÄ<ÐP`ÓCaÐBbÐbcÐdrÐcsÐstÐuÑuˆGØ˜qÒ Ø˜S  ¨xÐ8Ñ8�Ø˜¨ ~°Q°{°mÀ2ÄlÐSaÓFbÐEcÐcdÐesÐdtÐtuÐvÑvˆGØ˜ m _°BÐ7Ñ7ˆGà�{Ñ"ˆGØ˜ 4×#9Ñ#9Ð":¸#Ð>Ñ>ˆGØÐ*¨4×+JÑ+JÐ*KÈ3ÐOÑOˆGØ˜¨×)FÑ)FÐ(GÀsÐKÑKˆGØ˜ d×&<Ñ&<Ð%=¸SÐAÑAˆGØ˜ 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r7   ©r’   rª   ©r;   rg   r–   s      r=   r>   z,LargeUploadStatus.is_done.<locals>.<genexpr>  s(   è ø€ ÒeÉ;È1Èh�x×,Ñ,ÒF°×0FÑ0FÓFÑeùó   ‚'))rƒ   Úallrf   rš   s    r=   r]   zLargeUploadStatus.is_done  s7   € Ø�Y‰Yñ 	fÜÑeÐZ^×ZdÑZdÔeÓe÷	f÷ 	fò 	fús   �3³<)rn   ro   rp   Ú__doc__r   Ú
JOB_ITEM_Tr—   Úintr›   ÚboolÚfloatr£   rH   rY   r]   rx   ry   r=   rR   rR   ©   sf   „ ÙLðe˜d :Ñ.ó eðB6˜có 6ð	W Dð 	W°Cð 	WÀ5ð 	WÈTó 	Wð= ó =ð~f˜ô fry   rR   r@   c                 ó<	  — 	 d}t        | «      }|€y|\  }}|t        j                  k(  rX|d   }	 t        |«       | j                  j                  |«       | j                  5  | xj                  dz  c_        ddd«       �nQ|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«       �nw|t        j,                  k(  r]|d   }	 t/        |||||¬«       | j(                  j                  |«       | j                  5  | xj0                  dz  c_        ddd«       �n|t        j2                  k(  ržt5        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        $ rR}	t        j                  d
|	› �«       t        j                  «        | j&                  j                  |«       Y d}	~	�Œ_d}	~	ww xY w# 1 sw Y   �Œ>xY w# t        $ r ‚ t        $ r[}	t        j                  d|	› �«       t        j                  «        |D ]  }| j(                  j                  |«       Œ d}Y d}	~	�Œvd}	~	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   )r/   r0   r2   r(   zFailed to get upload mode: r|   ÚregularzFailed to preupload LFS: zFailed to commit: F)$Ú_determine_next_jobrm   rs   Ú_compute_sha256r€   r�   ÚKeyboardInterruptÚ	ExceptionrM   ÚerrorÚ	tracebackÚ
format_excr   rƒ   r„   rt   Ú_get_upload_moderª   r�   r�   r‚   r…   ru   Ú_preupload_lfsr†   rv   rZ   Ú_commitr£   rP   r‰   r‡   rw   r[   ÚWAITING_TIME_IF_NO_TASKSrˆ   )r@   r/   r0   r2   r(   Únext_jobÚjobrf   r•   Úerg   r–   Ústart_tsrœ   rž   s                  r=   rV   rV      s  € ð ØAEˆô ' vÓ.ˆØÐØØ‰
ˆˆUð ”)×"Ñ"Ò"Ø˜‘8ˆDð.Ü Ô%Ø×,Ñ,×0Ñ0°Ô6ð —‘ñ .Ø×(Ò(¨AÑ-Õ(÷.ñ .ð ”I×-Ñ-Ò-ð'Ü  ¨C¸ÈIÐ`hÕið ò 	;�Ø"‘��8Ø×)Ò)ØØ×'Ñ'¨5Ò0Ø×.Ñ.×2Ñ2°4Õ8Ø×)Ñ)¨YÒ6Ø×'Ñ'×+Ñ+¨DÕ1à×0Ñ0×4Ñ4°TÕ:ð	;ð —‘ñ 7Ø×1Ò1°QÑ6Õ1÷7ñ 7ð ”I×+Ñ+Ò+Ø˜‘8ˆDð5Ü˜t¨°gÈÐ]eÕfØ×#Ñ#×'Ñ'¨Ô-ð —‘ñ 5Ø×/Ò/°1Ñ4Õ/÷5ñ 5ð ”I×$Ñ$Ò$Ü—y‘y“{ˆHØˆGð	 Ü˜ 3°À9ÐW_Õ`ô —y‘y“{ XÑ-ˆHØ×Ñ ¬¨U«°XÔ>Ø—‘ñ .Ü-1¯Y©Y«[�Ô*Ø×(Ò(¨AÑ-Õ(÷.ð .ð ”I—N‘NÒ"Ü�J‰JÔ/Ô0Ø—‘ñ /Ø×)Ò)¨QÑ.Õ)÷/ñs øô %ò ØÜò .Ü—‘Ð9¸!¸Ð=Ô>Ü×$Ñ$Ô&Ø×#Ñ#×'Ñ'¨×-Ò-ûð.ú÷
.ð .ûô %ò ØÜò 'Ü—‘Ð:¸1¸#Ð>Ô?Ü×$Ñ$×&Ò&ûð'ú÷(7ð 7ûô %ò ØÜò 5Ü—‘Ð8¸¸Ð<Ô=Ü×$Ñ$Ô&Ø×*Ñ*×.Ñ.¨t×4Ò4ûð5ú÷
5ñ 5ûô %ò ØÜò  Ü—‘Ð1°!°Ð5Ô6Ü×$Ñ$Ô&Ø!ò 2�DØ×'Ñ'×+Ñ+¨DÕ1ð2à–ûð ú÷.ñ .ú÷/ñ /úsž   °&K Á"L<ÂM Ä<NÅ5+N  Æ,PÇ6P É/RÊ5RËL9Ë'AL4Ì4L9Ì<MÍNÍ,NÎNÎNÎ PÎ2AO?Ï?PÐPÐRÐ&AQ<Ñ<RÒRÒRr˜   c                 ó„  — | j                   5  | j                  dk(  r¥| j                  j                  «       dkD  rˆ| j                  �|t        j
                  «       | j                  z
  dkD  rX| xj                  dz  c_        t        j                  d«       t        j                  t        | j                  «      fcd d d «       S | j                  dk(  ru| j                  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k\  rg| 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  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  rv| 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                  «       dkD  rw| j"                  dk(  st.        j0                  sX| xj"                  dz  c_        t        j                  d«       t        j$                  t'        | 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  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                  �|t        j
                  «       | j                  z
  dkD  rX| xj                  dz  c_        t        j                  d«       t        j                  t        | 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(  rv| j                  dk(  rg| j"                  dk(  rX| xj                  dz  c_        t        j                  d«       t        j                  t        | j                  «      fcd d d «       S t3        d„ | j4                  D «       «      rt        j7                  d«       	 d d d «       y | xj8                  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)r   zJob: commit (>100 files ready)r   z&Job: get upload mode (>10 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 moder'   z-Job: commit (1 min since last commit attempt)zJob: commitc              3   óV   K  — | ]!  \  }}|j                   xs |j                  –— Œ# y ­wr7   rÀ   rÁ   s      r=   r>   z&_determine_next_job.<locals>.<genexpr>è  s(   è ø€ ÒaÁ[ÀQÈ�×&Ñ&Ò@¨(×*@Ñ*@Ó@ÑaùrÂ   z.All files have been processed! Exiting worker.zNo task available, waiting... (zs))rƒ   r‡   r‚   Úqsizer‰   rZ   rM   r“   rm   rv   Ú_get_items_to_commitr€   r…   rt   Ú_get_nr›   r�   r†   ru   Ú_get_oner   r„   rs   r   ÚHF_HUB_ENABLE_HF_TRANSFERrÃ   rf   rN   rˆ   rÕ   rw   )r@   s    r=   rË   rË   Œ  sç  € Ø	�‰ñ c(ð ×$Ñ$¨Ò)Ø×#Ñ#×)Ñ)Ó+¨aÒ/Ø×*Ñ*Ð6Ü—	‘	“˜f×8Ñ8Ñ8¸6ÒAà×$Ò$¨Ñ)Õ$Ü�L‰LÐVÔWÜ×$Ñ$Ô&:¸6×;NÑ;NÓ&OÐP÷c(ñ c(ð ×%Ñ%¨Ò*¨v×/BÑ/B×/HÑ/HÓ/JÈcÒ/QØ×$Ò$¨Ñ)Õ$Ü�L‰LÐ9Ô:Ü×$Ñ$Ô&:¸6×;NÑ;NÓ&OÐP÷!c(ñ c(ð& ×)Ñ)×/Ñ/Ó1°RÒ7Ø×-Ò-°Ñ2Õ-Ü�L‰LÐAÔBÜ×-Ñ-¬v°f×6RÑ6RÐTZ×TgÑTgÓTiÓ/jÐk÷-c(ñ c(ð2 ×'Ñ'×-Ñ-Ó/°!Ò3¸×8WÑ8WÐ[\Ò8\Ø×+Ò+¨qÑ0Õ+Ü�L‰LÐPÔQÜ×+Ñ+¬X°f×6PÑ6PÓ-QÐR÷9c(ñ c(ð> × Ñ ×&Ñ&Ó(¨1Ò,°×1IÑ1IÈQÒ1NØ×$Ò$¨Ñ)Õ$Ü�L‰LÐIÔJÜ×$Ñ$¤h¨v×/BÑ/BÓ&CÐD÷Ec(ñ c(ðJ ×)Ñ)×/Ñ/Ó1°AÒ5¸&×:[Ñ:[Ð_`Ò:`Ø×-Ò-°Ñ2Õ-Ü�L‰LÐUÔVÜ×-Ñ-¬v°f×6RÑ6RÐTZ×TgÑTgÓTiÓ/jÐk÷Qc(ñ c(ðX ×'Ñ'×-Ñ-Ó/°!Ò3Ø×+Ñ+¨qÒ0¼	×8[Ò8[à×+Ò+¨qÑ0Õ+Ü�L‰LÐ-Ô.Ü×+Ñ+¬X°f×6PÑ6PÓ-QÐR÷cc(ñ c(ðh × Ñ ×&Ñ&Ó(¨1Ò,Ø×$Ò$¨Ñ)Õ$Ü�L‰L˜Ô'Ü×$Ñ$¤h¨v×/BÑ/BÓ&CÐD÷oc(ñ c(ðt ×)Ñ)×/Ñ/Ó1°AÒ5Ø×-Ò-°Ñ2Õ-Ü�L‰LÐ/Ô0Ü×-Ñ-¬v°f×6RÑ6RÐTZ×TgÑTgÓTiÓ/jÐk÷{c(ñ c(ðB ×$Ñ$¨Ò)Ø×#Ñ#×)Ñ)Ó+¨aÒ/Ø×*Ñ*Ð6Ü—	‘	“˜f×8Ñ8Ñ8¸6ÒAà×$Ò$¨Ñ)Õ$Ü�L‰LÐHÔIÜ×$Ñ$Ô&:¸6×;NÑ;NÓ&OÐP÷Qc(ñ c(ðZ ×$Ñ$¨Ò)Ø×#Ñ#×)Ñ)Ó+¨aÒ/Ø×#Ñ#×)Ñ)Ó+¨qÒ0Ø×,Ñ,×2Ñ2Ó4¸Ò9Ø×*Ñ*×0Ñ0Ó2°aÒ7Ø×(Ñ(¨AÒ-Ø×1Ñ1°QÒ6Ø×/Ñ/°1Ò4à×$Ò$¨Ñ)Õ$Ü�L‰L˜Ô'Ü×$Ñ$Ô&:¸6×;NÑ;NÓ&OÐP÷qc(ñ c(ôv ÑaÐTZ×T`ÑT`ÔaÔaÜ�K‰KÐHÔIØ÷{c(ð c(ðB ×%Ò%¨Ñ*Õ%Ü�L‰LÐ:Ô;SÐ:TÐTVÐWÔXÜ—N‘N BÐ'÷Gc(÷ c(ò c(ús_   �B+\6ÃA:\6ÅA:\6Ç
A:\6ÉA:\6ËB	\6Í%B
\6Ï9A+\6Ñ.A:\6Ó2B*\6Ö&C>\6Ú.2\6Û)A\6Ü6\?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Ž   Ú	file_pathÚopenr   ÚhexÚsave)r•   re   r–   Úfs       r=   rÌ   rÌ   ø  s^   € à�O€Eˆ8Ø‡�ÐØ�_‰_×!Ñ! $Ó'ð 	3¨1Ü)¨!›n×0Ñ0Ó2ˆHŒO÷	3à‡M�M�%Õ÷	3ð 	3ús   ­A&Á&A/rf   c           
      ó(  — | D �cg c]  }t        |«      ‘Œ }}t        ||||j                  «       t        |d¬«      ¬«       t	        | |«      D ]=  \  }}|\  }}	|j
                  |	_        |j                  |	_        |	j                  |«       Œ? yc c}w )zmGet upload mode for each file and update metadata.

    Also receive info if the file should be ignored.
    Ú )Úsafe)Ú	additionsr2   r0   Úheadersr(   N)
Ú_build_hacky_operationr   Ú_build_hf_headersr   ÚzipÚ_upload_moder�   Ú_should_ignorerª   ræ   )
rf   r/   r0   r2   r(   r•   rë   Úadditionre   r–   s
             r=   rÒ   rÒ     s˜   € ð
 ;@Ö@°$Ô'¨Õ-Ð@€IÐ@ÜØØØØ×%Ñ%Ó'Ü�x bÔ)õô ˜e YÓ/ò ‰ˆˆhØ‰ˆˆxØ'×4Ñ4ˆÔØ!)×!8Ñ!8ˆÔØ�‰�eÕñ	ùò As   …Bc                 ó€   — | \  }}t        | «      }|j                  ||||g¬«       d|_        |j                  |«       y)z'Preupload LFS file and update metadata.)r0   r2   r(   rë   TN)rí   Úpreupload_lfs_filesr‘   ræ   )r•   r/   r0   r2   r(   re   r–   rò   s           r=   rÓ   rÓ     sL   € à�O€Eˆ8Ü% dÓ+€HØ×ÑØØØØ�*ð	 ô ð  €HÔØ‡M�M�%Õry   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)r0   r2   r(   Ú
operationsÚcommit_messageTN)rí   Úcreate_commitr’   ræ   )	rf   r/   r0   r2   r(   r•   rë   re   r–   s	            r=   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 r7   )rG   Úpath_or_fileobjr   rH   rš   s    r=   Ú__post_init__z%HackyCommitOperationAdd.__post_init__9  s*   € Ü�d×*Ñ*¬DÔ1Ü#& t×';Ñ';Ó#<ˆDÕ ð 2ry   )r˜   N)rn   ro   rp   rý   rx   ry   r=   rú   rú   8  s   „ ô=ry   rú   c                 ó|  — | \  }}t        |j                  |j                  ¬«      }|j                  j                  d«      5 }|j	                  d«      d d }d d d «       |j
                  €t        d«      ‚t        t        j                  |j
                  «      |j                  ¬«      |_        |S # 1 sw Y   Œ\xY w)N)rQ   rü   râ   i   z&sha256 must have been computed by now!)rŽ   r«   Úsample)rú   rQ   rã   rä   ÚpeekrŽ   rC   r   ÚbytesÚfromhexr«   Úupload_info)r•   re   r–   Ú	operationÚfilerÿ   s         r=   rí   rí   >  s£   € Ø�O€Eˆ8Ü'°U×5GÑ5GÐY^×YhÑYhÔi€IØ	�‰×	Ñ	˜dÓ	#ð & tØ—‘˜3“  Ð%ˆ÷&à‡�ÐÜÐAÓBÐBÜ&¬e¯m©m¸H¿O¹OÓ.LÐS[×S`ÑS`ÐioÔp€IÔØÐ÷&ð &ús   ÁB2Â2B;r}   zqueue.Queue[JOB_ITEM_T]c                 ó&   —  | j                   «       gS r7   )Úget)r}   s    r=   rß   rß   N  s   € ØˆE�I‰I‹Kˆ=Ðry   Únc                 óŽ   — t        t         | j                  «       |«      «      D �cg c]  } | j                  «       ‘Œ c}S c c}w r7   )rS   r¢   rÜ   r  )r}   r  rg   s      r=   rÞ   rÞ   R  s2   € Ü!&¤s¨;¨5¯;©;«=¸!Ó'<Ó!=Ö>˜AˆIˆE�I‰I�KÒ>Ð>ùÒ>s   §Ac                 óê   — g }d\  }}	  | j                   «       dk(  r|S |t        k\  s	|t        k\  r|S  | j                  «       }|j	                  |«       |\  }}|j
                  dk(  r|dz  }n|dz  }Œl)zXSpecial case for commit job: the number of items to commit depends on the type of files.)r   r   r   r|   r   )rÜ   ÚMAX_NB_LFS_FILES_PER_COMMITÚMAX_NB_REGULAR_FILES_PER_COMMITr  Úappendr�   )r}   rf   r±   Ú
nb_regularr•   rg   r–   s          r=   rÝ   rÝ   V  sŒ   € ð !€EØÑ€FˆJØ
àˆ5�;‰;‹=˜AÒØˆLð Ô0Ò0°JÔBaÒ4aØˆLð ˆu�y‰y‹{ˆØ�‰�TÔØ‰ˆˆ8Ø×Ñ 5Ò(Ø�a‰K‰Fà˜!‰OˆJð! ry   Ú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)z÷Print 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)rP   )r;   ÚlineÚterminal_widths     €r=   r>   z#_print_overwrite.<locals>.<genexpr>{  s   øè ø€ ÒS°t”3�t“9 Ñ.°Õ2ÑSùs   ƒz[Kz[Fr¦   éÿÿÿÿN)ÚshutilÚget_terminal_sizeÚcolumnsÚsumÚ
splitlinesrS   ÚsysÚstdoutÚwriterP   Úflush)r  Únb_linesrg   r  s      @r=   r\   r\   n  sÉ   ø€ ð ˆd�N€Fä×-Ñ-Ó/×7Ñ7€Nô ÓS¸v×?PÑ?PÓ?RÔSÓS€Hô �8‹_ò #ˆÜ�
‰
×Ñ˜Ô$Ü�
‰
×Ñ˜Õ"ð#ô
 ‡J�J×Ñ�VÔÜ‡J�J×Ñ�S˜N¬S°×1BÑ1BÓ1DÀRÑ1HÓ-IÑIÑJÔKÜ‡J�J×ÑÕry   )Hrq   r^   rI   r}   r  r  rT   rZ   rÐ   r   Úpathlibr   r   Útypingr   r   r   r	   r
   Úurllib.parser   ré   r   Ú_commit_apir   r   r   Ú_local_folderr   r   r   r   r   r   Úutilsr   r   r   Úutils._cache_managerr   Ú	utils.shar   Úhf_apir   Ú	getLoggerrn   rM   rÕ   r  r  r&   rÆ   Ú__annotations__rH   rÇ   rk   ÚEnumrm   rÅ   rR   rV   rË   rÌ   rÒ   rÓ   rÔ   rú   rí   rß   rÞ   rÝ   r\   rx   ry   r=   ú<module>r+     s*  ðô Û Û 	Û Û Û 
Û Û Û Ý Ý Ý ß >Õ >Ý å ß LÑ Lß vÓ vß 3ß EÑ EÝ .Ý "ñ Ýà	ˆ×	Ñ	˜8Ó	$€àÐ Ø"$Ð Ø!Ð ÚOÐ �4˜‘9Ó Oð #Ø"Ø6:Ø7;Ø!%ØØ òd(Ø	ðd(àðd(ð �s˜D�yÑ!ðd(ð
 ðd(ð �s‰mðd(ð �d‰^ðd(ð ˜U 4¨¡9¨c >Ñ2Ñ3ðd(ð ˜e D¨¡I¨s NÑ3Ñ4ðd(ð ˜#‘ðd(ð ðd(ð ód(ôX�—	‘	ô ð Ð'Ð)@Ð@ÑA€
÷tfñ tfðni/Øði/à	ði/ð ði/ð ð	i/ð
 ói/ðXd(Ð 1ð d(°h¸uÀYÐPTÐU_ÑP`ÐE`Ñ?aÑ6bó d(ðX˜*ð ¨ó ð˜D Ñ,ð °7ð ÀSð ÐUXð Ðdgð Ðlpó ð(˜ð ¨'ð ¸Cð ÈCð Ð[^ð Ðcgó ð�4˜
Ñ#ð ¨'ð ¸Cð ÈCð Ð[^ð Ðcgó ô(=Ð0ô =ð ð Ð0Gó ð Ð-ð °$°zÑ2Bó ð?Ð+ð ?°ð ?¸¸ZÑ8Hó ?ðÐ 9ð ¸dÀ:Ñ>Nó ð0˜Sð  Tô ry   