o
    Df#                     @   s   d Z ddlZddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZmZmZ dZdadZed Ze ZG dd dZdddZ dd Z!dS )zLoader base class.    N)datetimetimezone)json)cached_property)signals)reraise)DictAttributeforce_mapping)
maybe_list)NotAPackagefind_moduleimport_from_cwdsymbol_by_name)
BaseLoaderFzPError: Module '{module}' doesn't exist, or it's not a valid Python module name.
zDid you mean '{suggest}'?
c                   @   s  e Zd ZdZe ZdZi ZdZe	Z
dd Zd7ddZdd	 Zd
d Zdd Zdd Zdd Zdd Zd8ddZd9ddZdd Zdd Zdd Zdd  Zd:d!d"Zd8d#d$Zd%d& Zd'd( Zd)ed*ddfd+d,Zd;d.d/Z d<d1d2Z!e"d3d4 Z#e$d5d6 Z%dS )=r   a  Base class for loaders.

    Loaders handles,

        * Reading celery client/worker configurations.

        * What happens when a task starts?
            See :meth:`on_task_init`.

        * What happens when the worker starts?
            See :meth:`on_worker_init`.

        * What happens when the worker shuts down?
            See :meth:`on_worker_shutdown`.

        * What modules are imported to find tasks?
    Fc                 K   s   || _ t | _d S N)appsettask_modules)selfr   kwargs r   L/home/ubuntu/webapp/venv/lib/python3.10/site-packages/celery/loaders/base.py__init__;   s   zBaseLoader.__init__Tc                 C   s   |rt tjS t  S r   )r   nowr   utc)r   r   r   r   r   r   ?   s   zBaseLoader.nowc                 C      dS )z!Called before a task is executed.Nr   )r   task_idtaskr   r   r   on_task_initD       zBaseLoader.on_task_initc                 C   r   )z Called after a task is executed.Nr   r   r   r   r   on_process_cleanupG   r   zBaseLoader.on_process_cleanupc                 C   r   )z9Called when the worker (:program:`celery worker`) starts.Nr   r    r   r   r   on_worker_initJ   r   zBaseLoader.on_worker_initc                 C   r   )z=Called when the worker (:program:`celery worker`) shuts down.Nr   r    r   r   r   on_worker_shutdownM   r   zBaseLoader.on_worker_shutdownc                 C   r   )z#Called when a child process starts.Nr   r    r   r   r   on_worker_process_initP   r   z!BaseLoader.on_worker_process_initc                 C   s   | j | | |S r   )r   addr   r   moduler   r   r   import_task_moduleS   s   
zBaseLoader.import_task_moduleNc                 C   s   t j||dS N)package)	importlibimport_module)r   r'   r*   r   r   r   r,   W   s   zBaseLoader.import_modulec                 C   s"   t ||d u r| j|dS ||dS r)   )r   r,   )r   r'   impr*   r   r   r   r   Z   s   zBaseLoader.import_from_cwdc                    s@   t jj jd}|D ]\}}t|tr|q
 fdd jD S )N)senderc                    s   g | ]}  |qS r   )r(   ).0mr    r   r   
<listcomp>i       z5BaseLoader.import_default_modules.<locals>.<listcomp>)r   import_modulessendr   
isinstance	Exceptiondefault_modules)r   	responses_responser   r    r   import_default_modulesa   s   
z!BaseLoader.import_default_modulesc                 C   s$   | j sd| _ |   |   d S d S )NT)worker_initializedr;   r"   r    r   r   r   init_workerk   s
   zBaseLoader.init_workerc                 C      |    d S r   )r#   r    r   r   r   shutdown_workerq      zBaseLoader.shutdown_workerc                 C   r>   r   )r$   r    r   r   r   init_worker_processt   r@   zBaseLoader.init_worker_processc              	   C   sh   t |trz
| j|| jd}W n ttfy   |rY dS  w t|| _| jdd ur2| jd | _	dS )Nr-   Foverride_backendsT)
r5   str_smart_importr   ImportErrorAttributeErrorr	   _confgetrC   )r   objsilentr   r   r   config_from_objectw   s   

zBaseLoader.config_from_objectc                 C   sP   |d u r| j n|}d|v rt||dS z||W S  ty'   t||d Y S w )N:rB   )r,   r   rF   )r   pathr-   r   r   r   rE      s   
zBaseLoader._smart_importc                 C   sx   z|  | W n/ ty6 } z#|dr)ttttj||d d dt d  ttj|d|d }~ww | 	|S )Nz.py)r'   suggest   )r'   )
r   r   endswithr   CONFIG_WITH_SUFFIXformatsysexc_infoCONFIG_INVALID_NAMEr   )r   nameexcr   r   r   _import_config_module   s   



z BaseLoader._import_config_modulec                 C   s   t |S r   )r   r&   r   r   r   r      s   zBaseLoader.find_moduleceleryz	\((\w+)\)c                    s~   |r|ndt ji}rnddddddlm m} o  t|jfi | fddtfdd|D S )	Nr   )tuplelistdictr   )
NAMESPACESOptionc              
      s   |  dd\}}| dd}|d dkr |dd }}n| dd\}}|r.|d p/d| }|}|rY| d }||}|t| d }| |}||fS z |  | |}W ||fS  t	y~ } z	t	|d| d}~ww )	z-Parse single configuration from command-line.=   .r9   r   N z: )
splitlowerreplacematchgroupsrI   lengroup	to_python
ValueError)argkeyvaluensns_keycasttype_rY   )r_   	namespaceoverride_typesre_typetypemapr   r   getarg   s(   
z0BaseLoader.cmdline_config_parser.<locals>.getargc                 3   s    | ]} |V  qd S r   r   )r/   rn   )ry   r   r   	<genexpr>   s    z3BaseLoader.cmdline_config_parser.<locals>.<genexpr>)r   loadscelery.app.defaultsr_   r`   rf   r^   rx   )r   argsru   rw   extra_typesrv   r`   r   )r_   ry   ru   rv   rw   rx   r   cmdline_config_parser   s   z BaseLoader.cmdline_config_parserCELERY_CONFIG_MODULEc                 C   s>   zt j| }W n
 ty   Y d S w |r| |}t|S d S r   )osenvironKeyErrorrZ   r   )r   envcustom_configusercfgr   r   r   read_configuration   s   
zBaseLoader.read_configurationtasksc                 C   s$   | j dd t|p
d|D  d S )Nc                 s   s    | ]}|r|j V  qd S r   )__name__)r/   modr   r   r   rz      s    
z0BaseLoader.autodiscover_tasks.<locals>.<genexpr>r   )r   updateautodiscover_tasks)r   packagesrelated_namer   r   r   r      s
   zBaseLoader.autodiscover_tasksc                 C   s.   t | jt t| jjj t t| jjj S r   )r\   builtin_modulesr
   r   confimportsincluder    r   r   r   r7      s   zBaseLoader.default_modulesc                 C   s   | j tu r
|  | _ | j S )zLoader configuration.)rH   unconfiguredr   r    r   r   r   r      s   

zBaseLoader.conf)Tr   )NN)F)r   r   )&r   
__module____qualname____doc__	frozensetr   
configuredrC   r<   r   rH   r   r   r   r!   r"   r#   r$   r(   r,   r   r;   r=   r?   rA   rL   rE   rZ   r   recompiler   r   r   r   r7   propertyr   r   r   r   r   r   !   sH    







/


r   r   c                    s,   t rdS da z fdd| D W da S da w )Nr   Tc                    s   g | ]}t | qS r   )find_related_module)r/   pkgr   r   r   r1      r2   z&autodiscover_tasks.<locals>.<listcomp>F)_RACE_PROTECTION)r   r   r   r   r   r      s   r   c              
   C   s   zt | }|s|r|W S W n ty"   | d\} }}| s  Y nw |  d| }zt |W S  tyQ } zt|dd}|rK||krKW Y d}~dS |d}~ww )zFind module in package.rc   rX   N)r+   r,   ModuleNotFoundError
rpartitiongetattr)r*   r   r'   r9   module_nameeimport_exc_namer   r   r   r      s*   
r   r   )"r   r+   r   r   rU   r   r   kombu.utilsr   kombu.utils.objectsr   r[   r   celery.exceptionsr   celery.utils.collectionsr   r	   celery.utils.functionalr
   celery.utils.importsr   r   r   r   __all__r   rW   rS   objectr   r   r   r   r   r   r   r   <module>   s,     
O