
    {-j7                       d dl mZ d dl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
Z
d dlZd dlmZ d dlmZ d dlZ	 d dlmZ n#   G d d          ZY nxY wd dlZ ej        e          ZdgZ ej        d	          Zd
Zd+dZd,d-dZd Zd Z	 	 	 	 d.d/dZd ZdeiZ d0dZ!d,d Z"d! Z#d" Z$d# Z%d$ Z&d,d%Z'd1d'Z(d( Z)d) Z*d* Z+dS )2    )annotationsN)Path)Literal)tqdmc                  (    e Zd ZddZd Zd Zd ZdS )r   Nc                "    || _         d| _        d S )Nr   )totaln)selfr	   s     U/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/utils/download.py__init__ztqdm.__init__#   s    DJDFFF    c                F   | xj         |z  c_         | j        *t          j                            d| j         dd           nAt          j                            dd| j         z  t          | j                  z  dd           t          j                                         d S )Nz.1fz bytesd   %)r
   r	   sysstderrwritefloatflush)r   r
   s     r   updateztqdm.update'   s    FFaKFFz!
  !8df!8!8!8!89999
  !McDFlU4:5F5F&F!M!M!M!MNNNJr   c                    | S N )r   s    r   	__enter__ztqdm.__enter__/   s    Kr   c                D    t           j                            d           d S )N
)r   r   r   )r   exc_typeexc_valexc_tbs       r   __exit__ztqdm.__exit__2   s    JT"""""r   r   )__name__
__module____qualname__r   r   r   r"   r   r   r   r   r   "   sU        	 	 	 		 	 		 	 		# 	# 	# 	# 	#r   r   get_weights_path_from_urlz~/.cache/paddle/hapi/weights   pathstrreturnboolc                V    |                      d          p|                      d          S )zR
    Whether path is URL.
    Args:
        path (string): URL string or not.
    zhttp://zhttps://)
startswith)r(   s    r   is_urlr.   A   s'     ??9%%D)D)DDr   urlmd5sum
str | Nonec                2    t          | t          |          }|S )a:  Get weights path from WEIGHT_HOME, if not exists,
    download it from url.

    Args:
        url (str): download url
        md5sum (str): md5 sum of download package

    Returns:
        str: a local path to save downloaded weights.

    Examples:
        .. code-block:: python

            >>> from paddle.utils.download import get_weights_path_from_url

            >>> resnet18_pretrained_weight_url = 'https://paddle-hapi.bj.bcebos.com/models/resnet18.pdparams'
            >>> local_weight_path = get_weights_path_from_url(resnet18_pretrained_weight_url)

    )get_path_from_urlWEIGHTS_HOME)r/   r0   r(   s      r   r&   r&   J   s    ( S,77DKr   c                d    t          j        |           d         }|}t          j        ||          S )N)ospsplitjoin)r/   root_dirfnamefpaths       r   	_map_pathr=   b   s+    IcNN2EE8He$$$r   c                >   |                                   t                      }t                      }| D ]L}|                    d          d         }||v r"|                    |           |                    |           Mt                              d|            |S )N:r   zunique_endpoints )sortsetr8   addloggerinfo)trainer_endpointsipsunique_endpointsendpointips        r   _get_unique_endpointsrJ   i   s    
%%Cuu% ' '^^C  #99X&&&&
KK6$466777r   Tgetr:   check_exist
decompressmethodLiteral['wget', 'get']c                   ddl m} t          |           sJ d|  d            t          | |          }t	           |            j        dd                   }t          j        |          r0|r.t          ||          rt          
                    d|            nw |            j        |v rt          | |||          }nRt          j                            |          s3t          j        d           t          j                            |          3 |            j        |v r9|r7t#          j        |          st'          j        |          rt+          |          }|S )	a  Download from given url to root_dir.
    if file or directory specified by url is exists under
    root_dir, return the path directly, otherwise download
    from url and decompress it, return the path.

    Args:
        url (str): download url
        root_dir (str): root dir for downloading, it should be
                        WEIGHTS_HOME or DATASET_HOME
        md5sum (str|None, optional): md5 sum of download package
        decompress (bool, optional): decompress zip or tar file. Default is `True`
        method (str, optional): which download method to use. Support `wget` and `get`. Default is `get`.

    Returns:
        str: a local path to save downloaded models & weights & datasets.
    r   )ParallelEnvzdownloading from z
 not a urlNzFound )rN      )paddle.distributedrQ   r.   r=   rJ   rE   r7   exists	_md5checkrC   rD   current_endpoint	_downloadosr(   timesleeptarfile
is_tarfilezipfile
is_zipfile_decompress)	r/   r:   r0   rL   rM   rN   rQ   fullpathrG   s	            r   r3   r3   x   su   2 /.....#;;;;;C;;;;;;h''H -[[]]-LQQQ-OPP
z(  	(F0K0K 'X''((((;==)-=== hvFFFHHgnnX.. 
1 gnnX..  {}}%)999 	-x((	-,3,>x,H,H	- #8,,HOr   c           	     r   t          j        |          }	 t          j        d| d d          5 }|j        dk    rt          d|  d|j         d          |dz   }|j                            d	          }t          |d
          5 }|rt          t          |          dz   dz            5 }|                    d          D ],}|                    |           |                    d           -	 d d d            n# 1 swxY w Y   n0|                    d          D ]}|r|                    |           d d d            n# 1 swxY w Y   t          j        ||           |cd d d            S # 1 swxY w Y   d S # t           $ r.}	t"                              d| d|  d|	            Y d }	~	dS d }	~	ww xY w)NGETT)timeoutfollow_redirects   zDownloading from z failed with code !_tmpzcontent-lengthwbi  i   )r	   )
chunk_sizerR   Downloading  from z failed with exception F)r7   basenamehttpxstreamstatus_codeRuntimeErrorheadersrK   openr   int
iter_bytesr   r   shutilmove	ExceptionrC   rD   )
r/   fullnamer;   reqtmp_fullname
total_sizefpbarchunkes
             r   _get_downloadr      s   L""E\3t
 
 
 	#%%"* * ** * *  
 $f,L)9::JlD)) 	+Q +S__t%;$DEEE +%(^^t^%D%D + +EGGENNN KKNNNN++ + + + + + + + + + + + + + +
 "%4!@!@ + +  +GGENNN	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ Kh///-	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	0    O5OOOOAOOPPPuuuuus   E> AE1&E*AC;/E;C??EC?4E7E1E	E1
E	E1$E> 1E55E> 8E59E> >
F6#F11F6c                   |t           v sJ d| d            t          j        |          st          j        |           t          j        |           d         }t          j        ||          }d}t                              d| d|             t          j        |          rt          ||          st                              d| d|            |t          k     r|d	z  }nt          d
|  d          t          |         | |          st          j        d	           t          j        |          t          ||          |S )z
    Download from url, save to path.

    url (str): download url
    path (str): download to given path
    md5sum (str): md5 sum of download package
    method (str): which download method to use. Support `wget` and `get`. Default is `get`.

    zmake sure `z` implementedr6   r   rj   rk   z	md5check z and rR   zDownload from z failed. Retry limit reached)_download_methodsr7   rT   rX   makedirsr8   r9   rC   rD   rU   DOWNLOAD_RETRY_LIMITrp   rY   rZ   )r/   r(   r0   rN   r;   rx   	retry_cnts          r   rW   rW      si    &&&&(Kf(K(K(K&&&:d 
DIcNN2Exe$$HI
KK1u11C11222z(## 	(F(C(C 777v77888+++NIIBBBB   !(h77 	JqMMM z(## 	(F(C(C  Or   c           	        |dS t                               d|  d           t          j                    }t	          | d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                }||k    r&t                               d|  d| d| d	           d
S dS )NTzFile z md5 checking...rbc                 .                          d          S )Ni   )read)r|   s   r   <lambda>z_md5check.<locals>.<lambda>   s    !&&,, r   r   z md5 check failed, z
(calc) != z(base)F)rC   rD   hashlibmd5rr   iterr   	hexdigest)rx   r0   r   r~   calc_md5sumr|   s        @r   rU   rU      s@   ~t
KK2222333
+--C	h		 ....44 	 	EJJu	               --//KfH      	
 	
 	
 u4s   ,B  BBc                    t                               d|  d           t          j        |           rt	          |           }n6t          j        |           rt          |           }nt          d|            |S )z)
    Decompress for zip and tar file
    zDecompressing z...zUnsupported compress file type )	rC   rD   r[   r\   _uncompress_file_tarr]   r^   _uncompress_file_zip	TypeError)r;   uncompressed_paths     r   r_   r_     s     KK++++,,, %   C077		E	"	" C077A%AABBBr   c                   t          j        | d          5 }|                                }g }|D ]+}|                    |                    dd                     ,t
          j                            |           }t          |          r?|d         }t
          j        	                    ||          }|
                    |           n~t          |          rt
          j                            |d                             t
          j                            d                             t
          j                  d         }t
          j        	                    ||          }|
                    |           nt
          j                            |           d                             t
          j                  d         }t
          j        	                    ||          }t
          j                            |          st          j        |           |
                    t
          j        	                    ||                     |cd d d            S # 1 swxY w Y   d S )Nrz../ r   r6   )r]   ZipFilenamelistappendreplacerX   r(   dirname_is_a_single_filer9   
extractall_is_a_single_dirsplitextstripsepr8   rT   r   )filepathfilesfile_list_tmp	file_listfilefile_dirrootpathr   s           r   r   r     s4   	3	'	' !5((	! 	6 	6DT\\%4455557??8,,Y'' 	? |H "Xx @ @X&&&&i(( 	?w''	!(:(:26(B(BCCAFLL H !#Xx @ @X&&&&w''11!4::26BB2FH "Xx @ @7>>"344 /-...RW\\(H==>>> 9! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   H1IIIc                    t          |                                           }t          |                                          }	 |                    |           dS # t          $ r Y dS w xY w)z7Check if the target path is within the given directory.TF)r   resolverelative_to
ValueError)	directorytargetabs_directory
abs_targets       r   _is_within_directoryr   =  sp    OO++--Mf%%''J}---t   uus   A 
A)(A)c                    t          |           }|                                rt          d|            d|j        v rt          d|            dS )z
    Validate tar member name for security.

    Raises ValueError if the name contains unsafe patterns:
    - Absolute paths (Unix: /path, Windows: C:\path, UNC: \\server\share)
    - Path traversal components ('..')
    zUnsafe absolute path in tar: z..z#Unsafe path traversal '..' in tar: N)r   is_absoluter   parts)name	name_paths     r   _validate_tar_member_namer   H  si     T

I A???@@@ yEtEEFFF r   c                   ||n|                                  }g }|D ]}t          |          |j        z  }t          ||          st	          d|j                   |                                r#t                              d|j                    x|                                r#t                              d|j                    |	                                s7|
                                s#t                              d|j                    |                    |           |                     ||           dS )a   
    Safely extract tar files to prevent path traversal attacks.

    Security measures:
    1. Verify resolved paths are within target directory
    2. Skip symlinks, hardlinks and other special files
    3. Only extract regular files and directories
    Nz&Attempted path traversal in tar file: z,Skipping symbolic link in tar for security: z(Skipping hard link in tar for security: z+Skipping special file in tar for security: )members)
getmembersr   r   r   r   issymrC   warningislnkisfileisdirr   r   )tarr(   r   members_to_checkextract_membersmembermember_paths          r   _safe_extractr   Z  s`    #*"5ww3>>;K;KO" ' '4jj6;.#D+66 	FFF  
 <<>> 	NNLv{LL   \\^^ 		NNH6;HH   --// 	V\\^^ 	NNKfkKK   v&&&&NN4N11111r   r:*c                l   t          j        | |          5 }|                                }t          j                            |           }|D ]}t          |           t          |          r:|d         }t          j                            ||          }t          ||           ntt          |          rt          j                            |d                             t          j                            d                             t          j                  d         }t          j                            ||          }t          ||           nt          j                            |           d                             t          j                  d         }t          j                            ||          }t          j                            |          st          j        |           t          |t          j                            ||                     |cd d d            S # 1 swxY w Y   d S )Nr   r6   )r[   rr   getnamesrX   r(   r   r   r   r9   r   r   r   r   r   r8   rT   r   )r   moder   r   r   r   r   r   s           r   r   r     s   	h	%	% !NN$$	7??8,,  	, 	,D%d++++Y'' 	C |H "Xx @ @%****i(( 	Cw''	!(:(:26(B(BCCAFLL H !#Xx @ @%****w''11!4::26BB2FH "Xx @ @7>>"344 /-...%h!A!ABBB 3! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   HH))H-0H-c                    t          |           dk    r+| d                             t          j                  dk     rdS dS )NrR   r   TF)lenfindrX   r   )r   s    r   r   r     s;    
9~~y|00881<<t5r   c                   g }| D ]`}d|v r!|                     dt          j                  }n$d|v r |                     dt          j                  }|                    |           a|d                             t          j                  d         }t          dt          |                    D ]4}|||                             t          j                  d         k    r dS 5dS )N/\r   rR   FT)r   rX   r   r   r8   ranger   )r   new_file_list	file_path	file_nameis        r   r   r     s    M ( (	)!))#rv66IIY!))$77IY''''a &&rv..q1I1c-(())  a(..rv66q99955 :4r   c                j   | d S t          | t                    s
J d            t          j                            |           r4t          j                            |           st          d|  d          d S 	 t          j        |            d S # t          $ r}t          d|  d|           d }~ww xY w)Nzpath must be string typez path:'z' must be directory zCreate 'z' failed : )

isinstancer)   rX   r(   rT   r   NotADirectoryErrorr   rw   OSError)r(   r   s     r   check_and_create_dirr     s    |dC  <<"<<< 	w~~d ;w}}T"" 	K$%It%I%I%IJJJ	K 	K	;K 	; 	; 	;9T99a99:::	;s   8B 
B2B--B2)r(   r)   r*   r+   r   )r/   r)   r0   r1   r*   r)   )NTTrK   )r/   r)   r:   r)   r0   r1   rL   r+   rM   r+   rN   rO   r*   r)   )NrK   )r   ),
__future__r   r   rX   os.pathr(   r7   ru   r   r[   rY   r]   pathlibr   typingr   rm   r   logging	getLoggerr#   rC   __all__
expanduserr4   r   r.   r&   r=   rJ   r3   r   r   rW   rU   r_   r   r   r   r   r   r   r   r   r   r   r   <module>r      s   # " " " " "  				        



                ### # # # # # # # # #( 		8	$	$&
's~<== E E E E    0% % %  $ %*1 1 1 1 1h  B M* ! ! ! !H   (  *! ! !@  G G G$'2 '2 '2 '2T! ! ! !:     ; ; ; ; ;s   A A