o
    Df                     @   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   M/home/ubuntu/webapp/venv/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 )zImport 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    
	



