U
    .et                     @  s   d 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 ddlmZ ddlmZ eeefZzdd	lmZ W n> ek
r   zdd	lmZ W n ek
r   dZY nX Y nX dad
d Zdd Zdd Zdd Zdd Zdd Zedd ZdS )zPython Compatibility Utilities.    )annotationsN)contextmanagerwraps)metadata)UnsupportedOperation)reraise)register_after_forkc                   s   t   fdd}|S )z*Decorator to mark generator as co-routine.c                    s    | |}t | |S N)next)argskwargsitgen 6/tmp/pip-unpacked-wheel-48hrr5dg/kombu/utils/compat.pywind_up   s    
zcoro.<locals>.wind_upr   )r   r   r   r   r   coro   s    r   c                  C  s   dt jkrFz&dd l} ddlm} || r.W dS W n tk
rD   Y nX dt jkrz*dd l} ddlm} | j|jkrxW dS W n tk
r   Y nX dS )NZeventletr   )is_monkey_patchedgevent)socketdefault)sysmodulesr   Zeventlet.patcherr   ImportErrorr   )r   Zis_eventletZ_gsocketr   r   r   _detect_environment&   s"    



r   c                   C  s   t dkrt a t S )z=Detect the current environment: default, eventlet, or gevent.N)_environmentr   r   r   r   r   detect_environmentB   s    r   c                 C  s`   t jdkrtj| d}n:t }z|| g }W n  tk
rP   |j| d}Y nX dd |D S )z,Return setuptools entrypoints for namespace.)   
   )groupc                 s  s   | ]}||  fV  qd S r
   )load).0epr   r   r   	<genexpr>U   s   zentrypoints.<locals>.<genexpr>)r   version_infoimportlib_metadataentry_pointsgetAttributeErrorselect)	namespacer(   r   r   r   entrypointsJ   s    
r-   c                 C  s   t | tjr| S |  S )z!Get fileno from file-like object.)
isinstancenumbersIntegralfilenofr   r   r   r1   [   s    r1   c                 C  s$   z
t | W S  tk
r   Y nX dS )z3Get object fileno, or :const:`None` if not defined.N)r1   FILENO_ERRORSr2   r   r   r   maybe_filenob   s    
r5   c                  g  s   g }g }d}zzPz6| D ]&}|j}|j}||  || q|V  W n   t }Y nX W 5 |r|  }z|| rzd}W q`   t }Y q`X q`|dkrt|d |d |d  X W 5 ~X dS )zNest context managers.)NNNr         N)popr   exc_infor   __exit__	__enter__append)ZmanagersZexitsvarsexcexitZmgrZenterr   r   r   nestedj   s.    
r@   )__doc__
__future__r   r/   r   
contextlibr   	functoolsr   	importlibr   r'   ior   Zkombu.exceptionsr   r*   
ValueErrorr4   Zbilliard.utilr	   r   Zmultiprocessing.utilr   r   r   r   r-   r1   r5   r@   r   r   r   r   <module>   s2   

