o
    —¨Êht  ã                   @  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© úD/var/www/html/env/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}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   Ú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:    
ÿ€ý
