o
    ;i                  	   @   s  d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ dZdeeegdf  de	eef ddfdd	Zde	eef defd
dZde	eef defddZde	eef defddZejG dd dZ	dde	eef dee dee defddZdS )    N)BinaryIOCallableOptionalSequenceUnion)loggeri   hashersdatareturnc                 C   s   t |tr| D ]}|| qd S t |ttfrJ | }	 |t}t |ts2tdt| d|s5n
| D ]}|| q7q|	| d S )NTz/Only accepts bytes or byte buffer objects, not z buffers)

isinstancebytes	bytearray
memoryviewtellreadHASH_CHUNK_SIZE
ValueErrortypeseek)r   r	   hasherposchunk r   K/home/ubuntu/.local/lib/python3.10/site-packages/modal/_utils/hash_utils.py_update   s    




r   c                 C   s:   t  }t }t|jg|  tdt  |  | S )Nzget_sha256_hex took %.3fs)	time	monotonichashlibsha256r   updater   debug	hexdigestr	   t0r   r   r   r   get_sha256_hex   s
   r$   c                 C   F   t  }t }t|jg|  tdt  |  t	|
 dS )Nzget_sha256_base64 took %.3fsascii)r   r   r   r   r   r   r   r    base64	b64encodedigestdecoder"   r   r   r   get_sha256_base64'   
   r+   c                 C   r%   )Nzget_md5_base64 took %.3fszutf-8)r   r   r   md5r   r   r   r    r'   r(   r)   r*   r"   r   r   r   get_md5_base64/   r,   r.   c                   @   s:   e Zd ZU eed< eed< defddZdefddZdS )	UploadHashes
md5_base64sha256_base64r
   c                 C      t | j S N)r'   	b64decoder0   hexselfr   r   r   md5_hex<      zUploadHashes.md5_hexc                 C   r2   r3   )r'   r4   r1   r5   r6   r   r   r   
sha256_hex?   r9   zUploadHashes.sha256_hexN)__name__
__module____qualname__str__annotations__r8   r:   r   r   r   r   r/   7   s
   
 r/   r:   r8   c                 C   s   t  }i }|st }||d< |st }||d< |r*dd | D }t||  |r8tt	
|d}nt|d  d}|rRtt	
|d}	nt|d  d}	t|	|d}
tdt  | |  |
S )Nr   r-   c                 S   s   g | ]}|j qS r   )r   ).0hr   r   r   
<listcomp>Q   s    z%get_upload_hashes.<locals>.<listcomp>r&   )r0   r1   z!get_upload_hashes took %.3fs (%s))r   r   r   r   r-   valuesr   r'   r(   r   fromhexr*   r)   r/   r   r    keys)r	   r:   r8   r#   r   r   r-   updatersr1   r0   hashesr   r   r   get_upload_hashesC   s.   
rH   )NN)r'   dataclassesr   r   typingr   r   r   r   r   modal.configr   r   r   r   r>   r$   r+   r.   	dataclassr/   rH   r   r   r   r   <module>   s.   ,
