
    Ng                     j   d dl Z d dlZd dlmZmZ d dlmZ d dlZd dlZd dl	m
Z
 d dl	mZ d dl	mZmZ d dlmZ dd	lmZ d
did
didZddddddd didZg dZdedefdZd Zd Z G d de          Z G d de
          Z ej         e                        ej         e                       dS )    N)AnyOptional)urlparse)PathHandler)HTTPURLHandler)get_cache_dir	file_lock)download   )PathManagerppyolov2_r50vd_dcn_365ezdhttps://paddle-model-ecology.bj.bcebos.com/model/layout-parser/ppyolov2_r50vd_dcn_365e_publaynet.tarzihttps://paddle-model-ecology.bj.bcebos.com/model/layout-parser/ppyolov2_r50vd_dcn_365e_tableBank_word.tar)	PubLayNet	TableBankTextTitleListTableFigure)r      r         )zinference.pdiparamszinference.pdiparams.infozinference.pdmodeltar_filereturnc                    t           j                            |           }t           j                            t           j                            |                     d         }t           j                            ||          }|S )Nr   )ospathdirnamesplitextbasenamejoin)r   	base_path	file_nametarget_folders       g/var/www/html/ai-engine/env/lib/python3.11/site-packages/layoutparser/models/paddledetection/catalog.py_get_untar_directoryr%   A   sZ    ))I  !1!1(!;!;<<Q?IGLLI66M    c                 2   t          |           }t          j                            t          j                            |t
          d                             rHt          j                            t          j                            |t
          d                             st          j        |d           t          j        | d          5 }|	                                D ]}d}t
          D ]}||j
        v r|}||                    |          }t          t          j                            ||          d          5 }|                    |                                           ddd           n# 1 swxY w Y   	 ddd           n# 1 swxY w Y   |S )zuntar model filesr   r   T)exist_okrNwb)r%   r   r   existsr    _TAR_FILE_NAME_LISTmakedirstarfileopen
getmembersnameextractfilewriteread)	model_tar	model_dirtarobjmemberfilenametar_file_namefile
model_files           r$   _untar_model_weightsr=   J   s    %Y//I7>>
Y 3A 677  2W^^BGLL4G4JKKLL2 	I----\)S)) 
	2V ++-- 	2 	2%8 1 1M$33#0#))&11"',,y(;;TBB 2j$$TYY[[1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	2
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 s7   A4F?(E3'F3E77F:E7;FFFc                     t          |           }t          j                            |          sdS t          D ]B}t          j                            t          j                            ||                    s dS CdS )NFT)r%   r   r   r+   r,   r    )cachedpossible_extracted_model_folderr   s      r$   !is_cached_folder_exists_and_validrA   b   ss    &:6&B&B#7>>9:: u'  w~~bgll+JHUUVV 	55	4r&   c                   P    e Zd ZdZdZd Zd Z	 	 ddeded	e	e         d
e
def
dZdS )PaddleModelURLHandlerz@
    Supports download and file check for Baidu Cloud links
       c                     dgS )Nz*https://paddle-model-ecology.bj.bcebos.com selfs    r$   _get_supported_prefixesz-PaddleModelURLHandler._get_supported_prefixess   s    <==r&   c                     || j         v S N)	cache_map)rH   r   s     r$   _isfilezPaddleModelURLHandler._isfilev   s    t~%%r&   FNr   force	cache_dirkwargsr   c                     |                      |           |s4|| j        vs+t          j                            | j        |                   s7t          j        t                    }t          |          }t          j        	                    t          |          t          j                            |j                            d                              }|                    d          d         }t          |          | j        k    r&|dd         dz   t!          j                    j        z   }t          j        	                    ||          }	t'          |	          rt)          |	          | j        |<   nt+          |	          5  t          j                            |	          s:|                    d                    |                     t3          |||          }	|                    d          rDt7          |	          }
	 t          j        |	           n#  |                    d	|	            Y nxY wddd           n# 1 swxY w Y   |                    d
                    ||
                     |
| j        |<   | j        |         S )a  
        As paddle model stores all files in tar files, we need to extract them
        and get the newly extracted folder path. This function rewrites the base
        function to support the following situations:

        1. If the tar file is not downloaded, it will download the tar file,
            extract it to the target folder, delete the downloaded tar file,
            and return the folder path.
        2. If the extracted target folder is present, and all the necessary model
            files are present (specified in _TAR_FILE_NAME_LIST), it will
            return the folder path.
        3. If the tar file is downloaded, but the extracted target folder is not
            present (or it doesn't contain the necessary files in _TAR_FILE_NAME_LIST),
            it will extract the tar file to the target folder, delete the tar file,
            and return the folder path.

        /Nd   _zDownloading {} ...)r9   z.tarz'Not able to remove the cached tar file zURL {} cached in {})_check_kwargsrL   r   r   r+   logging	getLogger__name__r   r    r   r   lstripsplitlenMAX_FILENAME_LENuuiduuid4hexrA   r%   r	   isfileinfoformatr
   endswithr=   removewarning)rH   r   rN   rO   rP   logger
parsed_urlr   r9   r?   r6   s              r$   _get_local_pathz%PaddleModelURLHandler._get_local_pathy   s   0 	6"""&	14>))7>>$."677 * &x00F!$Jglli(("'//*/:P:PQT:U:U*V*V G zz#r*H8}}t444#DSD>C/$*,,2BBW\\'844F088 1 (<F'C'Ct$$ v&&  7>>&11 L$8$?$?$E$EFFF!)$(!K!K!K}}V,, $8$@$@	If----"NN R& R R                   188yIIJJJ'0t$~d##s+   A>IHIH64II	I	)FN)rY   
__module____qualname____doc__r]   rI   rM   strboolr   r   ri   rF   r&   r$   rC   rC   l   s          > > >& & & #'	A$ A$A$ A$ C=	A$
 A$ 
A$ A$ A$ A$ A$ A$r&   rC   c                   *    e Zd ZdZdZd Zd ZddZdS )	LayoutParserPaddleModelHandlerz<
    Resolve anything that's in LayoutParser model zoo.
    zlp://paddledetection/c                     | j         gS rK   )PREFIXrG   s    r$   rI   z6LayoutParserPaddleModelHandler._get_supported_prefixes   s    }r&   c                    |t          | j                  d          }|                    d          ^}}}|dk    r't          |         d                    |                   }nt          d|           t          j        |fi |S )NrR   weightzUnknown data_type )r\   rr   r[   MODEL_CATALOGr    
ValueErrorr   get_local_path)rH   r   rP   
model_namedataset_name	data_type	model_urls          r$   ri   z.LayoutParserPaddleModelHandler._get_local_path   s    #dk**,,-
/9/?/?/D/D,z9  %l3CHHZ4H4HIII=)==>>>))>>v>>>r&   r)   c                 N    t          j        |                     |          |fi |S rK   )r   r/   ri   )rH   r   moderP   s       r$   _openz$LayoutParserPaddleModelHandler._open   s+     4 4T : :DKKFKKKr&   N)r)   )rY   rj   rk   rl   rr   rI   ri   r~   rF   r&   r$   rp   rp      s]          %F  ? ? ?L L L L L Lr&   rp   )r   rW   typingr   r   urllib.parser   r.   r^   iopath.common.file_ior   r   r   r	   iopath.common.downloadr
   base_catalogr   ru   LABEL_MAP_CATALOGr,   rm   r%   r=   rA   rC   rp   register_handlerrF   r&   r$   <module>r      s    
			                  ! ! ! ! ! !   - - - - - - 0 0 0 0 0 0 : : : : : : : : + + + + + + & & & & & & 	"  $J 	"  $O		 	   	
7
 
     3 3      0  N$ N$ N$ N$ N$N N$ N$ N$bL L L L L[ L L L0  2244 5 5 5  ;;== > > > > >r&   