o
    wvXj	  ã                   @   sn  d Z ddlmZm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y3   ddlZY nw ddlmZ zddlmZ eeefZW n eyT   eefZY nw zdd	lmZ W n eyz   zdd	lmZ W n eyw   dZY nw Y nw zdd
lmZ W n ey”   ddlZdd„ Z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.é    )Úabsolute_importÚunicode_literalsN©Úwraps)Úcontextmanager)Úmetadata)Úreraise)ÚUnsupportedOperation)Úregister_after_fork)Ú
NamedTuplec                 C   s   t  | dd„ |D ƒ¡S )z(Typed version of collections.namedtuple.c                 S   s   g | ]\}}|‘qS © r   )Ú.0ÚkÚ_r   r   úO/var/www/html/myproject/venv/lib/python3.10/site-packages/kombu/utils/compat.pyÚ
<listcomp>(   s    zNamedTuple.<locals>.<listcomp>)ÚcollectionsÚ
namedtuple)ÚnameÚfieldsr   r   r   r   &   s   r   c                    s   t ˆ ƒ‡ fdd„ƒ}|S )z*Decorator to mark generator as co-routine.c                     s   ˆ | i |¤Ž}t |ƒ |S ©N)Únext)ÚargsÚkwargsÚit©Úgenr   r   Ú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m}  dd l}| |ƒrW dS W n	 ty!   Y nw dt jv rHzddlm} dd l}|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ÚmodulesÚeventlet.patcherr    r"   ÚImportErrorr!   )Úis_eventletr"   Ú_gsocketr   r   r   Ú_detect_environment7   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_environmentQ   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)r   Úepr   r   r   Ú	<genexpr>[   s
   € 
ÿ
ÿzentrypoints.<locals>.<genexpr>)Úimportlib_metadataÚentry_pointsÚget)Ú	namespacer   r   r   ÚentrypointsY   s   þr4   c                 C   s   t | tjƒr| S |  ¡ S )z!Get fileno from file-like object.)Ú
isinstanceÚnumbersÚIntegralÚfileno©Úfr   r   r   r8   a   s   r8   c                 C   s    zt | ƒW S  ty   Y dS w )z3Get object fileno, or :const:`None` if not defined.N)r8   ÚFILENO_ERRORSr9   r   r   r   Úmaybe_filenoh   s
   
ÿr<   c                  g   s  � g }g }d}z‚zVz| 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r‰t|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   Únestedp   sT   €

€€
úúó€
úürK   )#Ú__doc__Ú
__future__r   r   r6   r$   Ú	functoolsr   Ú
contextlibr   Ú	importlibr   r0   r'   Ú
kombu.fiver   Úior	   ÚAttributeErrorÚ
ValueErrorr;   Úbilliard.utilr
   Úmultiprocessing.utilÚtypingr   r   r+   r   r*   r,   r4   r8   r<   rK   r   r   r   r   Ú<module>   sV    ÿþÿ€ýý
