o
    ›¨Êhy"  ã                   @   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	 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)Ú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   úE/var/www/html/env/lib/python3.10/site-packages/celery/loaders/base.pyÚ__init__;   s   zBaseLoader.__init__Tc                 C   s   |rt  ¡ S t  ¡ S r   )r   ÚutcnowÚnow)r   Úutcr   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yS } zt|d|ƒ}|durH||krH|‚W Y d}~dS d}~ww )zFind module in package.rc   rX   N)r+   r,   rF   Ú
rpartitionÚgetattr)r*   rŽ   r'   r9   Úmodule_nameÚeÚimport_exc_namer   r   r   r�   û   s*   
€ÿþ€ür�   r”   )!r—   r+   r�   rš   rU   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