
    ^j                        d dl m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
 d dlmZ d dlmZmZ d d	lmZ  ee      Zdd
ZddZy)    )annotationsN)md5)Path)copyfileobj)get)tqdm)MEDIA_ASSETSAssets)_get_loggerc                    t         j                  j                  |       syt        | d      5 }|j	                         }t        |d      }ddd       j                         |k(  S # 1 sw Y   xY w)a  
    Check if the MD5 hash of a file matches the original hash.

    Note: MD5 is used here for file integrity checking (detecting corruption),
    not for cryptographic security purposes.

    Args:
        filename: The path to the file to be checked.
        original_md5_hash: The original MD5 hash to compare against.

    Returns:
        True if the hashes match, False otherwise.
    Frb)usedforsecurityN)ospathexistsopenreadr   	hexdigest)filenameoriginal_md5_hashfilefile_contentscomputed_md5_hashs        h/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/supervision/assets/downloader.pyis_md5_hash_matchingr      sk     77>>(#	h	 F		uEF &&(,===	F Fs   A&&A/c                   t        | t              r| j                  n| }|t        v ryt	        |      j                         st        j                  d|       t        t        |   d   ddd      }|j                          t        |j                  j                  dd            }t	        |      j                         j                         }|j                  j                  dd       t!        j"                  |j$                  d|d	d
      5 }|j'                  d      5 }t)        ||       ddd       ddd       |S t+        |t        |   d         s5t        j-                  d       t/        j0                  |       t3        |      S t        j                  d|       |S dj5                  d t        j6                         D              }t9        d| d      # 1 sw Y   xY w# 1 sw Y   |S xY w)a   
    Download a specified asset if it doesn't already exist or is corrupted.

    Args:
        asset_name: The name or type of the asset to be downloaded.

    Returns:
        The filename of the downloaded asset.

    Example:
        ```pycon
        >>> from supervision.assets import download_assets, ImageAssets, VideoAssets
        >>> download_assets(VideoAssets.VEHICLES)  # doctest: +SKIP
        'vehicles.mp4'

        >>> download_assets(ImageAssets.PEOPLE_WALKING)  # doctest: +SKIP
        'people-walking.jpg'

        ```
    zDownloading %s assetsr   T   )streamallow_redirectstimeoutzContent-Length)parentsexist_okr    z#a351fb)totaldesccolourwbN   z!File corrupted. Re-downloading...z%s asset download complete.z, c              3      K   | ]  }|  y w)N ).0r   s     r   	<genexpr>z"download_assets.<locals>.<genexpr>Z   s      Nh Ns   z2Invalid asset. It should be one of the following: .)
isinstancer
   r   r	   r   r   loggerinfor   raise_for_statusintheaders
expanduserresolveparentmkdirr   wrapattrrawr   r   r   warningr   removedownload_assetsjoinkeys
ValueError)
asset_namer   response	file_sizefolder_pathraw_respr   valid_assetss           r   r<   r<   )   s   , '1V&Dz""*H<H~$$&KK/:X&q)$VXH %%'H,,001A1EFIx.335==?K$$TD$AfIBy 0 %%d+ 0t$/00$ O (,x2H2KLBC		(#&x00KK5x@ O yy N,:K:K:M NN@aP
 	
0 00$ Os$   G&G,G&G#	G&&G0)r   strr   rF   returnbool)r@   zAssets | strrG   rF   )
__future__r   r   hashlibr   pathlibr   shutilr   requestsr   	tqdm.autor   supervision.assets.listr	   r
   supervision.utils.loggerr   __name__r/   r   r<   r*       r   <module>rS      s4    " 	      8 0	X	>06rR   