U
    d                     @   s  d Z ddlZddlZddlmZ ddlmZ zddlmZ	 W n e
k
rX   ddl	Z	Y nX 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.    N)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-hqfrjlvz/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_environmentF   s    r   c                 C   s   dd t  | g D S )z,Return setuptools entrypoints for namespace.c                 s   s   | ]}||  fV  qd S r	   )load).0epr   r   r   	<genexpr>P   s   zentrypoints.<locals>.<genexpr>)importlib_metadataentry_pointsget)	namespacer   r   r   entrypointsN   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   r*   V   s    r*   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)r*   FILENO_ERRORSr+   r   r   r   maybe_fileno]   s    
r.   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   nestede   s.    
r9   )__doc__r(   r   
contextlibr   	functoolsr   	importlibr   r"   r   ior   Zkombu.exceptionsr   AttributeError
ValueErrorr-   Zbilliard.utilr   Zmultiprocessing.utilr   r   r   r   r&   r*   r.   r9   r   r   r   r   <module>   s6   

