o
    h#                     @   s   d Z ddlmZ ddlZddlmZ ddlZddlZddlZddl	m
Z
mZ ddl	mZmZ G dd	 d	eZG d
d deZdddZdddZdddZdd Zdd ZdS )z'Data downloading and reading functions
    )logN)path   )appdata_dirresource_dirs)StdoutProgressIndicatorurlopenc                   @      e Zd ZdZdS )InternetNotAllowedErrorzxPlugins that need resources can just use get_remote_file(), but
    should catch this error and silently ignore it.
    N__name__
__module____qualname____doc__ r   r   P/var/www/html/scripts/venv/lib/python3.10/site-packages/imageio/core/fetching.pyr
      s    r
   c                   @   r	   )NeedDownloadErrorzIs raised when a remote file is requested that is not locally
    available, but which needs to be explicitly downloaded by the user.
    Nr   r   r   r   r   r      s    r   FTc              	   C   s  d}||  }t | }|}|ptd}t }|d| |D ]}	t |	|}
t |
r|s[|rW||	krWtj||}t 	t 
|sMtt t 
| t|
| |  S |
  S t|trt|d}tt |
}||kr|r||	krtj||}t 	t 
|stt t 
| t|
| |  S |
  S td|   nqtdd dv rtd	|st t ||}
t 	t 
|
stt t 
|
 td
drtdD ]}z
t||
 |
W   S  ty   td Y qw t||
 |
S t||
 |
S )a  Get a the filename for the local version of a file from the web

    Parameters
    ----------
    fname : str
        The relative filename on the remote data repository to download.
        These correspond to paths on
        ``https://github.com/imageio/imageio-binaries/``.
    directory : str | None
        The directory where the file will be cached if a download was
        required to obtain the file. By default, the appdata directory
        is used. This is also the first directory that is checked for
        a local version of the file. If the directory does not exist,
        it will be created.
    force_download : bool | str
        If True, the file will be downloaded even if a local copy exists
        (and this copy will be overwritten). Can also be a YYYY-MM-DD date
        to ensure a file is up-to-date (modified date of a file on disk,
        if present, is checked).
    auto : bool
        Whether to auto-download the file if its not present locally. Default
        True. If False and a download is needed, raises NeedDownloadError.

    Returns
    -------
    fname : str
        The path to the file on the local system.
    z7https://github.com/imageio/imageio-binaries/raw/master/imageior   z%Y-%m-%dzFile older than %s, updating...IMAGEIO_NO_INTERNET )1trueyeszeWill not download resource from the internet because environment variable IMAGEIO_NO_INTERNET is set.CONTINUOUS_INTEGRATIONF   g      ?)opnormcaser   r   insertjoinisfileosr   isdirdirnamemakedirsabspathshutilcopy
isinstancestrtimestrptimegmtimegetctimeprintgetenvlowerr
   r   range_fetch_fileIOErrorsleep)fname	directoryforce_downloadauto	_url_rooturlnfnamegiven_directorydirsdirfilename	filename2ntimeftimeir   r   r   get_remote_file!   sj   






rC   c                 C   sr  t dtj|  |d }d}d}g }tdD ]}zzYt| dd}t|jd  }	t	|	}
t d	|d
 | |
f  t
|d}t|||d |jsM|  t|| |du r_tjd|  W W |duro|jsr|   dS  dS  dS  ty } z|| t dt|  W Y d}~nd}~ww W |dur|js|  q|dur|js|  w w w tdtj| )a  Load requested file, downloading it if needed or requested

    Parameters
    ----------
    url: string
        The url of file to be downloaded.
    file_name: string
        Name, along with the path, of where downloaded file will be saved.
    print_destination: bool, optional
        If true, destination of where file was saved will be printed after
        download finishes.
    resume: bool, optional
        If true, try to resume partially downloaded files.
    z?Imageio: %r was not found on your computer; downloading it now.z.partNr      g      @)timeoutContent-LengthzTry %i. Download from %s (%s)r   wb)initial_sizeTzFile saved as %s.
zError while fetching file: %s.zhUnable to download %r. Perhaps there is no internet connection? If there is, please report this problem.)r-   r    r   basenamer0   r   intheadersstrip_sizeof_fmtopen_chunk_readclosedcloser%   movesysstdoutwrite	Exceptionappendr(   r2   )r9   	file_nameprint_destinationtemp_file_name
local_filerH   errorstriesremote_file	file_sizesize_strer   r   r   r1      s`   




r1       c                 C   sn   |}t | jd  }||7 }td}|dd| 	 | |}|t|7 }|s)nt||| q|d dS )a  Download a file chunk by chunk and show advancement

    Can also be used when resuming downloads over http.

    Parameters
    ----------
    response: urllib.response.addinfourl
        Response to the download request in order to get file size.
    local_file: file
        Hard disk file where data should be written.
    chunk_size: integer, optional
        Size of downloaded chunks. Default: 8192
    initial_size: int, optional
        If resuming, indicate the initial size of the file.
    rF   Downloadingr   bytesTDoneN)	rJ   rK   rL   r   startreadlen_chunk_writefinish)responser[   
chunk_sizerH   bytes_so_far
total_sizeprogresschunkr   r   r   rO      s   
rO   c                 C   s&   | |  |t|  td dS )z1Write a chunk to file and update the progress barr   N)rU   increase_progressrh   r)   r3   )rp   r[   ro   r   r   r   ri      s   
ri   c                 C   sz   g d}g d}	 | dkr5t tt| dt|d }t| d|  }|| }|| }d| }|||S | dkr;dS dS )	z,Turn number of bytes into human-readable str)rd   kBMBGBTBPB)r   r   r   r   r   r   r   i   z{0:.%sf} {1}r   z0 bytesz1 byte)minrJ   r   rh   floatformat)numunitsdecimalsexponentquotientunitnum_decimalsformat_stringr   r   r   rM      s   rM   )NFT)T)rb   r   )r   mathr   r    r   r   rS   r%   r)   r   r   r   r   r   r2   r
   r   rC   r1   rO   ri   rM   r   r   r   r   <module>   s    

c
;%