o
    ›¨Êh  ã                   @   sò   d Z ddlZddlZddlZddlmZ ddlmZmZ zddl	m
Z
 W n ey3   ddlm
Z
 Y nw ddlmZ ej d¡ZdZG d	d
„ d
eƒZdd„ Zdd„ Zedd„ ƒZddd„Zddd„Zd dd„Zdd„ Zdd„ Zdd„ Zdd„ ZdS )!z;Utilities related to importing modules and symbols by name.é    N)Úcontextmanager)Úimport_moduleÚreload)Úentry_points©Úsymbol_by_nameÚMP_MAIN_FILE)
ÚNotAPackageÚqualnameÚinstantiater   Úcwd_in_pathÚfind_moduleÚimport_from_cwdÚreload_from_cwdÚmodule_fileÚgen_task_namec                   @   s   e Zd ZdZdS )r	   z8Raised when importing a package, but it's not a package.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úF/var/www/html/env/lib/python3.10/site-packages/celery/utils/imports.pyr	      s    r	   c                 C   sB   t | dƒst | dƒr| j} t| ddƒ}d|vrd | j|f¡}|S )zReturn object name.r   Ú	__class__r   NÚ.)Úhasattrr   ÚgetattrÚjoinr   )ÚobjÚqr   r   r   r
       s   r
   c                 O   s   t | ƒ|i |¤ŽS )zNInstantiate class by name.

    See Also:
        :func:`symbol_by_name`.
    r   )ÚnameÚargsÚkwargsr   r   r   r   *   s   r   c                  c   s¬   � zt  ¡ } W n ty   d} Y nw | sdV  dS | tjv r$dV  dS tj d| ¡ z| V  W z	tj | ¡ W dS  tyC   Y dS w ztj | ¡ W w  tyU   Y w w )z9Context adding the current working directory to sys.path.Nr   )ÚosÚgetcwdÚFileNotFoundErrorÚsysÚpathÚinsertÚremoveÚ
ValueError)Úcwdr   r   r   r   3   s.   €ÿ


ÿþÿr   c                 C   sÖ   |du rt }tƒ �X z|| ƒW W  d  ƒ S  ty`   d| v r_|  d¡}t|dd… ƒD ]0\}}d |d|d … ¡}z||ƒ}W n
 tyM   Y  ‚ w z|j W q. ty^   t|ƒ‚w ‚ w 1 sdw   Y  dS )z3Version of :func:`imp.find_module` supporting dots.Nr   éÿÿÿÿé   )	r   r   ÚImportErrorÚsplitÚ	enumerater   Ú__path__ÚAttributeErrorr	   )Úmoduler&   ÚimpÚpartsÚiÚpartÚpackageÚmpartr   r   r   r   I   s2   þ
ø
ÿïýr   c                 C   sB   |du rt }tƒ � || |d�W  d  ƒ S 1 sw   Y  dS )z°Import module, temporarily including modules in the current directory.

    Modules located in the current directory has
    precedence over modules located in `sys.path`.
    N)r7   )r   r   )r2   r3   r7   r   r   r   r   d   s
   
$ÿr   c                 C   s>   |du rt }tƒ � || ƒW  d  ƒ S 1 sw   Y  dS )z1Reload module (ensuring that CWD is in sys.path).N)r   r   )r2   Úreloaderr   r   r   r   p   s
   $ÿr   c                 C   s    | j }| d¡r|dd… S |S )z2Return the correct original file name of a module.z.pycNr+   )Ú__file__Úendswith)r2   r   r   r   r   r   x   s   r   c                 C   s„   |pd}zt j| }W n ty   d}Y nw |dur'|j}tr'|jtkr'd}|dkr6| jr6d | j|g¡S d dd„ ||fD ƒ¡S )z)Generate task name from name/module pair.Ú__main__Nr   c                 s   s   � | ]}|r|V  qd S ©Nr   )Ú.0Úpr   r   r   Ú	<genexpr>‘   s   € z gen_task_name.<locals>.<genexpr>)r%   ÚmodulesÚKeyErrorr   r   r:   Úmainr   )Úappr   Úmodule_namer2   r   r   r   r   ~   s   þr   c                 c   sh   � t jdkrt| d�}nz	tƒ  | g ¡}W n ty%   tƒ j| d�}Y nw |D ]	}|j|jfV  q(d S )N)é   é
   )Úgroup)r%   Úversion_infor   Úgetr1   Úselectr   Úvalue)Ú	namespaceÚ_entry_pointsÚepr   r   r   Úload_extension_class_names”   s   €
ÿÿrP   c                 c   st   � t | ƒD ]2\}}zt|ƒ}W n" ttfy1 } zt d| › d|›d|›�¡ W Y d }~qd }~ww ||fV  qd S )NzCannot load z extension z: )rP   r   r-   ÚSyntaxErrorÚwarningsÚwarn)rM   r   Ú
class_nameÚclsÚexcr   r   r   Úload_extension_classes    s   €ÿ€ÿùrW   )NNr=   )r   r"   r%   rR   Ú
contextlibr   Ú	importlibr   r   Úimportlib.metadatar   r-   Úimportlib_metadataÚkombu.utils.importsr   ÚenvironrJ   r   Ú__all__Ú	Exceptionr	   r
   r   r   r   r   r   r   r   rP   rW   r   r   r   r   Ú<module>   s4    ÿ
	



