o
    Dft                     @  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yX   zdd	lmZ W n eyU   dZY nw Y nw 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    | i |}t | |S N)next)argskwargsitgen K/home/ubuntu/webapp/venv/lib/python3.10/site-packages/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v r"zdd l} ddlm} || rW dS W n	 ty!   Y nw dt jv rHzdd l} ddlm} | j|ju r;W dS W dS  tyG   Y dS w dS )Neventletr   )is_monkey_patchedgevent)socketdefault)sysmodulesr   eventlet.patcherr   ImportErrorr   )r   is_eventlet_gsocketr   r   r   _detect_environment&   s.   

r    c                   C  s   t du 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y'   |j| d}Y nw 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   
r1   c                 C  s   t | tjr| S |  S )z!Get fileno from file-like object.)
isinstancenumbersIntegralfilenofr   r   r   r5   [   s   r5   c                 C  s    zt | W S  ty   Y dS w )z3Get object fileno, or :const:`None` if not defined.N)r5   FILENO_ERRORSr6   r   r   r   maybe_filenob   s
   
r9   c                  g  s   g }g }d}zzVz| D ]}|j }|j}||  || q|V  W n   t }Y W |rG| }z|| r;d}W n   t }Y |s0|dkr[t|d |d |d  W ~dS W ~dS |rx| }z|| rld}W n   t }Y |sa|dkrt|d |d |d  w w ~w )zNest context managers.)NNNr         N)__exit__	__enter__appendr   exc_infopopr   )managersexitsvarsexcmgrexitenterr   r   r   nestedj   sT   



rH   )__doc__
__future__r   r3   r   
contextlibr   	functoolsr   	importlibr   r+   ior   kombu.exceptionsr   r.   
ValueErrorr8   billiard.utilr	   r   multiprocessing.utilr!   r   r    r"   r1   r5   r9   rH   r   r   r   r   <module>   s:    

