a
    xd                     @   s   d 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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)reload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   L/var/www/html/Ranjet/env/lib/python3.9/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   t  } | tjv rdV  ndtjd|  z.| V  W ztj|  W q~ tyT   Y q~0 n&ztj|  W n tyz   Y n0 0 dS )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  z|| W W  d   S  ty   d| v r| d}t|dd D ]j\}}d|d|d  }z||}W n ty   Y  qY n0 z
|j W q^ ty   t	|Y q^0 q^ Y n0 W d   n1 s0    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packageZmpartr   r   r   r   @   s&    

r   c                 C   sD   |du rt j}t  || |dW  d   S 1 s60    Y  dS )zImport module, temporarily including modules in the current directory.

    Modules located in the current directory has
    precedence over modules located in `sys.path`.
    N)r6   )r*   r+   r
   )r1   r2   r6   r   r   r   r   [   s    r   c                 C   s>   |du rt }t  || W  d   S 1 s00    Y  dS )z1Reload module (ensuring that CWD is in sys.path).N)r   r
   )r1   Zreloaderr   r   r   r   g   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)r1   r   r   r   r   r   o   s    r   c                 C   s   |pd}zt j| }W n ty,   d}Y n0 |durN|j}trN|jtkrNd}|dkrl| jrld| 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>       z gen_task_name.<locals>.<genexpr>)r"   modulesKeyErrorr   r   r7   mainr   )Zappr   module_namer1   r   r   r   r   u   s    
r   c                 c   sV   zddl m} W n ty$   Y d S 0 || D ]"}|jd|j|jd gfV  q.d S )Nr   )iter_entry_points:)pkg_resourcesrB   r,   r   r   rA   attrs)	namespacerB   epr   r   r   load_extension_class_names   s    rH   c                 c   sr   t | D ]d\}}zt|}W nD ttfy` } z(td|  d|d| W Y d }~qd }~0 0 ||fV  qd S )NzCannot load z extension z: )rH   r   r,   SyntaxErrorwarningswarn)rF   r   
class_nameclsexcr   r   r   load_extension_classes   s    rO   )NN)NN)N)r   r*   r    r"   rJ   
contextlibr   r   Zkombu.utils.importsr   environgetr   __all__	Exceptionr   r   r	   r
   r   r   r   r   r   rH   rO   r   r   r   r   <module>   s*   
	




