U
    g%
                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZe Ze ddZ	dd Z
dd Zdd	 ZG d
d dejZddd dddZdS )    NPackagenameversionc              	      s4   t t d jtttd  fdddD d dS )NZ_yt_dlp__identifierc                 3   s   | ]}t  |d V  qd S N)getattr).0attrmodule >/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/compat/compat_utils.py	<genexpr>   s   z#get_package_info.<locals>.<genexpr>)Z_yt_dlp__version__version__version_stringr   r   )_Packager   __name__strnextfilterr
   r   r
   r   get_package_info   s    r   c                 C   s   dt | kS )N__path__)varsr
   r   r   r   _is_package   s    r   c                 C   s   |  do| dS )N__)
startswithendswith)r   r   r   r   
_is_dunder   s    r   c                       s$   e Zd Zdd Z fddZ  ZS )EnhancedModulec                 C   s   t | ddd  S )N__bool__c                   S   s   dS )NTr   r   r   r   r   <lambda>        z)EnhancedModule.__bool__.<locals>.<lambda>)r   get)selfr   r   r   r      s    zEnhancedModule.__bool__c                    s`   zt  |}W n8 tk
rH   t|r* t| dd }|s< ||}Y nX t|tr\| S |S )N__getattr__)super__getattribute__AttributeErrorr   r   
isinstancepropertyfget)r#   r	   retgetter	__class__r   r   r&   "   s    zEnhancedModule.__getattribute__)r   
__module____qualname__r   r&   __classcell__r   r   r-   r   r      s   r   .c                 C   s   d S r   r   )_r   r   r   r    /   r!   r    )callbackc                   sP   fdd}t jdd fddtjtt_|_	S )zOPassthrough parent module into a child module, creating the parent if necessaryc              
      sl   t r:tt" td|  jW  5 Q R  S Q R X | }|tkr`tdj d|   |  |S )N.zmodule z has no attribute )	r   
contextlibsuppressModuleNotFoundError	importlibimport_moduler   _NO_ATTRIBUTEr'   )r	   r+   )r4   
from_childparentr   r   r$   1   s    &z'passthrough_module.<locals>.__getattr__N)maxsizec              
      s   |  krd kst | rtS ttr4tjtrt	t
4 tj d|  td|  jW  5 Q R  S Q R X t	t t| W  5 Q R  S Q R X tS )N.r5   )r   r;   r(   r   r9   r:   r   r   r6   r7   ImportErrorpassthrough_moduler'   r   )r	   )allowed_attributeschildr=   r   r   r<   <   s    
z&passthrough_module.<locals>.from_child)
	functools	lru_cachesysmodulesr"   types
ModuleTyper   r.   r$   )r=   rB   rA   r4   r$   r   )rA   r4   rB   r<   r=   r   r@   /   s    
r@   )r2   )collectionsr6   rC   r9   rE   rG   objectr;   
namedtupler   r   r   r   rH   r   r@   r   r   r   r   <module>   s   	