o
    .i                     @   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   O/var/www/html/philips/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    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   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   D   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)r6   )r   r   )r1   r2   r6   r   r   r   r   _   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   )r1   reloaderr   r   r   r   k   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   s   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   r9   mainr   )appr   module_namer1   r   r   r   r   y   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   getr0   selectr   value)	namespace_entry_pointsepr   r   r   load_extension_class_names   s   
rO   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: )rO   r   r,   SyntaxErrorwarningswarn)rL   r   
class_nameclsexcr   r   r   load_extension_classes   s   rV   )NNr<   )r   r"   r$   rQ   
contextlibr   	importlibr   r   importlib.metadatar   r,   importlib_metadatakombu.utils.importsr   environrI   r   __all__	Exceptionr	   r
   r   r   r   r   r   r   r   rO   rV   r   r   r   r   <module>   s4    
	



