
    +j                     Z   S SK r S SKrS SKJr  S SKJr  S SKJrJrJ	r	J
r
  S SKr S SKJr  Sr\	/ \4   r\ " S S	5      5       r\S
\\\   -  S\
\\\   \4      4S j5       r\SS4S
\\\   -  S\S\S-  S\S-  S\\S-  \S-  4   4
S jjrg! \ a    \R                  " S5         N}f = f)    N)contextmanager)	dataclass)IOAnyCallableIterator)blake3z%WARNING: blake3 package not installedi   c                   J    \ rS rSr% Sr\\S'   \\S'   Sr\\S'   Sr	\\S'   Sr
g	)
HashCheckpoint   z9Saved state for resuming an interrupted hash computation.bytes_processedhasherr   mtime_ns	file_size N)__name__
__module____qualname____firstlineno____doc__int__annotations__r   r   r   __static_attributes__r       ;/home/wildlama/comfy/ComfyUI/app/assets/services/hashing.pyr   r      s$    CKHcIsr   r   fpreturnc              #     #    [        U S5      (       aa  [        U SS 5      " 5       nSnU(       a(   U R                  5       nUS:w  a  U R                  S5         U S4v   Ub  U R                  U5        gg[        [        R                  " U 5      S5       nUS4v   SSS5        g! [        R
                   a    Sn Nef = f! Ub  U R                  U5        f f = f! , (       d  f       g= f7f)	z=Yield (file_object, is_path) with appropriate setup/teardown.readseekablec                      g)NFr   r   r   r   <lambda>#_open_for_hashing.<locals>.<lambda>    s    5r   Nr   FrbT)	hasattrgetattrtellseekioUnsupportedOperationopenosfspath)r   r    orig_posfs       r   _open_for_hashingr0      s      r62z=9; 779q=GGAJ	"e)O#! $ "))B-&!T'M '& **   
 #! $ '&sR   .C,'B% C 6C,C	C,%B>;C,=B>>C,CC,
C)%C,
chunk_sizeinterrupt_check
checkpointc                    US::  a  [         n[        U 5       u  pEUb;  U(       a4  UR                  UR                  5        UR                  nUR                  nO[        5       nSn Ub2  U" 5       (       a&  U(       a  S[        UUS94sSSS5        $  SSS5        gUR                  U5      nU(       d  O!UR                  U5        U[        U5      -  nMo  UR                  5       S4sSSS5        $ ! , (       d  f       g= f)a  Compute BLAKE3 hash of a file, with optional checkpoint support.

Args:
    fp: File path or file-like object
    chunk_size: Size of chunks to read at a time
    interrupt_check: Optional callable that returns True if the operation
        should be interrupted (e.g. paused or cancelled). Must be
        non-blocking so file handles are released immediately. Checked
        between chunk reads.
    checkpoint: Optional checkpoint to resume from (file paths only)

Returns:
    Tuple of (hex_digest, None) on completion, or
    (None, checkpoint) on interruption (file paths only), or
    (None, None) on interruption of a file object
r   N)r   r   )NN)DEFAULT_CHUNKr0   r(   r   r   r	   r   r   updatelen	hexdigest)	r   r1   r2   r3   r/   is_pathhr   chunks	            r   compute_blake3_hashr<   3   s    , Q"
	2	,1!gFF:--.!!A(88OAO*/@/@(7 "  
	  "! 
	" FF:&EHHUOs5z)O  {{}d"/ 
		s   A/C0C0AC00
C>)r)   r,   
contextlibr   dataclassesr   typingr   r   r   r   loggingr	   ModuleNotFoundErrorwarningr5   boolInterruptCheckr   strbytestupler0   r   r<   r   r   r   <module>rH      s   	 	 % ! . . =  "d(#    #5	/ huRY_7M.N  0 $-1(,	0#bi0#0# $d*0# %	0#
 3:~,,-0#S  =OO;<=s   B B*)B*