U e5d()�@s�dZddlmZmZmZmZmZmZmZm Z m Z zddlm Z Wne k rXdZ YnXddl mZmZmZmZddlmZddlmZddlmZddlZddlZddlZddlZddlZddlZejd ed d �dZd Zd Z d Z!dZ"dZ#dZ$dZ%dZ&dZ'dd�Z(dd�Z)dd�Z*d8dd�Z+dd�Z,dd�Z-Gd d!�d!�Z.Gd"d#�d#�Z/Gd$d%�d%e/ej0�Z1d9d&d'�Z2Gd(d)�d)e/e�Z3d:d*d+�Z4d,d-�Z5d.d/�Z6d;d0d1�Z7d2d3�Z8d4d5�Z9e �r�dksz get_suffixes..cSsg|]}|dtf�qS)�r)� PY_SOURCEr7r!r!r"r:lscSsg|]}|dtf�qSr4)� PY_COMPILEDr7r!r!r"r:ms)r�EXTENSION_SUFFIXES�SOURCE_SUFFIXES�BYTECODE_SUFFIXES)� extensions�source�bytecoder!r!r"� get_suffixesisrDc@s eZdZdZdd�Zdd�ZdS)� NullImporterz-**DEPRECATED** Null import object. cCs2|dkrtddd��ntj�|�r.td|d��dS)N�zempty pathnamer2zexisting directory)� ImportError�osr/�isdir)�selfr/r!r!r"�__init__zs zNullImporter.__init__cCsdS)zAlways returns None.Nr!)rJ�fullnamer!r!r"� find_module�szNullImporter.find_moduleN)�__name__� __module__� __qualname__�__doc__rKrMr!r!r!r"rErsrEcs.eZdZdZd�fdd� Z�fdd�Z�ZS)�_HackedGetDatazMCompatibility support for 'file' arguments of various load_*() functions.Ncst��||�||_dS)N)�superrK�file)rJrLr/rT�� __class__r!r"rK�sz_HackedGetData.__init__c s||jrl||jkrl|jjs0|j}d|jkr0|��|jjrJt|jd�|_}|�|��W5QR�SQRXn t��|�SdS)z;Gross hack to contort loader to deal w/ load_*()'s bad API.�br5N) rTr/�closed�mode�close�open�readrS�get_data)rJr/rTrUr!r"r]�s z_HackedGetData.get_data)N)rNrOrPrQrKr]� __classcell__r!r!rUr"rR�srRc@seZdZdZdS)�_LoadSourceCompatibilityz5Compatibility support for implementing load_source().N�rNrOrPrQr!r!r!r"r_�sr_cCs\t|||�}tj|||d�}|tjkr8t|tj|�}nt|�}t�||�|_ |j |j _ |S)N��loader) r_r�spec_from_file_locationr&�modulesr rr�SourceFileLoader� __loader__�__spec__rb�r �pathnamerTrb�spec�moduler!r!r"� load_source�s   rlc@seZdZdZdS)�_LoadCompiledCompatibilityz7Compatibility support for implementing load_compiled().Nr`r!r!r!r"rm�srmcCsZt|||�}tj|||d�}|tjkr8t|tj|�}nt|�}t||�|_|j|j _ |S)r3ra) rmrrcr&rdr rrrfrgrbrhr!r!r"� load_compiled�s    rncCs�tj�|�rftjdd�tjdd�}|D]*}tj�|d|�}tj�|�r,|}qfq,td� |���t j ||gd�}|t j kr�t|t j |�St|�SdS)r3NrKz{!r} is not a package)�submodule_search_locations)rHr/rIrr?r@�join�exists� ValueError�formatrrcr&rdr r)r r/rA� extensionZ init_pathrjr!r!r"� load_package�s    � � ruc Cs$|\}}}|r0|�d�r d|kr0td�|���n�|dkrX|tthkrXd�|�}t|��n�|tkrlt|||�S|tkr�t|||�S|tkr�tdk r�|dkr�t |d��}t|||�W5QR�SQRXn t|||�SnN|t kr�t ||�S|t k�r�t |�S|tk�rt|�Sd�||�}t||d��dS) z�**DEPRECATED** Load a module, given information returned by find_module(). The module name must include the full package name, if any. )r;�U�+zinvalid file open mode {!r}Nz.file object required for import (type code {})r5z*Don't know how to import {} (type code {})r)� startswithrrrsr<r=rlrnr6� load_dynamicr[� PKG_DIRECTORYru� C_BUILTIN� init_builtin� PY_FROZENrrG) r rT�filenameZdetails�suffixrY�type_�msgZ opened_filer!r!r"� load_module�s.           r�c Cs�t|t�std�t|����n$t|td�tf�sBtd�t|����|dkr�t|�rbddddtffSt |�rzddddt ffSt j }|D]�}t j �||�}dtjdfD]>}d|}t j �||�}t j �|�r�d|ddtffSq�t�D]2\}}}||} t j �|| �}t j �|�r��q q�q��q:q�tt�|�|d��d} d |k�rnt|d ��} t�| j�d} W5QRXt||| d �} | ||||ffS) a,**DEPRECATED** Search for a module. If path is omitted or None, search for a built-in, frozen or special module and continue search in sys.path. The module name cannot contain '.'; to search for a submodule of a package, pass the submodule name and the package's __path__. z'name' must be a str, not {}Nz%'path' must be None or a list, not {}rFz.pyrrKrrWr5)�encoding)� isinstance�str� TypeErrorrs�type�list� RuntimeErrorrr{r r}r&r/rHrprr@�isfilerzrDrGr r[�tokenize�detect_encoding�readline) r r/�entryZpackage_directoryrZpackage_file_nameZ file_pathrYr�� file_namer�rTr!r!r"rM�sB �    rMcCs t�|�S)zw**DEPRECATED** Reload the module and return it. The module must have been successfully imported before. )� importlib�reload)rkr!r!r"r�2sr�cCs&z t|�WStk r YdSXdS)zl**DEPRECATED** Load and return a built-in module by name, or None is such module doesn't exist N)rrGrr!r!r"r|=s r|cCs0ddl}|j�||�}|jj|||d�}t|�S)z:**DEPRECATED** Load an extension module. rN)r rb�origin)�importlib.machineryr�ExtensionFileLoader� ModuleSpecr)r r/rTr�rbrjr!r!r"ryJs�ry)N)N)N)N)N);rQ�_imprrrrrrrr r r rGZimportlib._bootstrapr r rrZimportlib._bootstrap_externalrr�rrrHr&r�rr+�warn�DeprecationWarningZ SEARCH_ERRORr<r=r6Z PY_RESOURCErzr{r}ZPY_CODERESOURCEZIMP_HOOKr#r%r)r.r1rDrErRrer_rlrmrnrur�rMr�r|ryr!r!r!r"�sb,    �     # 4