o
    wvXj‹  ã                   @   sê   d Z ddlmZmZ ddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlmZ ej d¡ZdZG d	d
„ d
eƒZejdkrFdd„ Zn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.é    )Úabsolute_importÚunicode_literalsN)Úcontextmanager©Úsymbol_by_name)ÚreloadÚ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   úQ/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/utils/imports.pyr	      s    r	   )é   r   c                 C   sB   t | dƒst | dƒr| j} t| ddƒ}d|vrd | j|f¡}|S )úReturn object name.r   Ú	__class__r   NÚ.)Úhasattrr   ÚgetattrÚjoinr   )ÚobjÚqr   r   r   r
   !   s   r
   c                 C   s,   t | dƒst | dƒr| j} d | j| jf¡S )r   r   r   r   )r   r   r   r   r   )r   r   r   r   r
   *   s   c                 O   s   t | ƒ|i |¤ŽS )zNInstantiate class by name.

    See Also:
        :func:`symbol_by_name`.
    r   )ÚnameÚargsÚkwargsr   r   r   r   1   s   r   c                  c   s‚   � t  ¡ } | tjv rdV  dS tj d| ¡ z| V  W z	tj | ¡ W dS  ty.   Y dS w ztj | ¡ W w  ty@   Y w w )z9Context adding the current working directory to sys.path.Nr   )ÚosÚgetcwdÚsysÚpathÚinsertÚremoveÚ
ValueError)Úcwdr   r   r   r   :   s"   €

ÿþÿr   c                 C   sØ   |du rt j}tƒ �X z|| ƒW W  d  ƒ S  tya   d| v r`|  d¡}t|dd… ƒD ]0\}}d |d|d … ¡}z||ƒ}W n
 tyN   Y  ‚ w z|j W q/ ty_   t	|ƒ‚w ‚ w 1 sew   Y  dS )z3Version of :func:`imp.find_module` supporting dots.Nr   éÿÿÿÿé   )
Ú	importlibÚimport_moduler   ÚImportErrorÚsplitÚ	enumerater   Ú__path__ÚAttributeErrorr	   )Úmoduler'   ÚimpÚpartsÚiÚpartÚpackageÚmpartr   r   r   r   K   s2   þ
ø
ÿïýr   c                 C   sD   |du rt j}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)r:   )r.   r/   r   )r5   r6   r:   r   r   r   r   f   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   )r5   Úreloaderr   r   r   r   r   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)r5   r!   r   r   r   r   z   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_namer5   r   r   r   r   €   s   þr   c                 c   sX   � zddl m} W n
 ty   Y d S w || ƒD ]}|jd |j|jd g¡fV  qd S )Nr   )Úiter_entry_pointsú:)Úpkg_resourcesrI   r0   r!   r   rH   Úattrs)Ú	namespacerI   Úepr   r   r   Úload_extension_class_names–   s   €ÿ ÿrO   c                 c   sl   � t | ƒD ].\}}zt|ƒ}W n ttfy- } zt d | ||¡¡ W Y d }~qd }~ww ||fV  qd S )Nz&Cannot load {0} extension {1!r}: {2!r})rO   r   r0   ÚSyntaxErrorÚwarningsÚwarnÚformat)rM   r!   Ú
class_nameÚclsÚexcr   r   r   Úload_extension_classes    s   €ÿÿ€ÿørW   )NNr@   )r   Ú
__future__r   r   r.   r$   r&   rQ   Ú
contextlibr   Úkombu.utils.importsr   Úcelery.fiver   ÚenvironÚgetr   Ú__all__Ú	Exceptionr	   Úversion_infor
   r   r   r   r   r   r   r   rO   rW   r   r   r   r   Ú<module>   s2   

		




