o
    wvXj¶"  ã                   @   sè   d Z ddlmZm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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e ƒZ"ddd„Z#dd„ Z$dS )zLoader base class.é    )Úabsolute_importÚunicode_literalsN)Údatetime)Újson)Úcached_property)Úsignals)ÚreraiseÚstring_t)Ú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   úP/var/www/html/myproject/venv/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   C   s   zBaseLoader.nowc                 C   ó   dS )z!Called before a task is executed.Nr   )r   Útask_idÚtaskr   r   r   Úon_task_initH   ó    zBaseLoader.on_task_initc                 C   r   )z Called after a task is executed.Nr   ©r   r   r   r   Úon_process_cleanupK   r"   zBaseLoader.on_process_cleanupc                 C   r   )z9Called when the worker (:program:`celery worker`) starts.Nr   r#   r   r   r   Úon_worker_initN   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_shutdownQ   r"   zBaseLoader.on_worker_shutdownc                 C   r   )z#Called when a child process starts.Nr   r#   r   r   r   Úon_worker_process_initT   r"   z!BaseLoader.on_worker_process_initc                 C   s   | j  |¡ |  |¡S r   )r   Úaddr   ©r   Úmoduler   r   r   Úimport_task_moduleW   s   
zBaseLoader.import_task_moduleNc                 C   s   t j||d�S ©N)Úpackage)Ú	importlibÚimport_module)r   r*   r-   r   r   r   r/   [   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   ^   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>m   ó    z5BaseLoader.import_default_modules.<locals>.<listcomp>)r   Úimport_modulesÚsendr   Ú
isinstanceÚ	ExceptionÚdefault_modules)r   Ú	responsesÚ_Úresponser   r#   r   Úimport_default_modulese   s   
ÿz!BaseLoader.import_default_modulesc                 C   s$   | j sd| _ |  ¡  |  ¡  d S d S )NT)Úworker_initializedr>   r%   r#   r   r   r   Úinit_workero   s
   ýzBaseLoader.init_workerc                 C   ó   |   ¡  d S r   )r&   r#   r   r   r   Úshutdown_workeru   ó   zBaseLoader.shutdown_workerc                 C   rA   r   )r'   r#   r   r   r   Úinit_worker_processx   rC   zBaseLoader.init_worker_processc              	   C   sL   t |tƒrz
| j|| jd�}W n ttfy   |rY dS ‚ w t|ƒ| _dS )N©r0   FT)r8   r	   Ú_smart_importr   ÚImportErrorÚAttributeErrorr   Ú_conf)r   ÚobjÚsilentr   r   r   Úconfig_from_object{   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ú:rE   )r/   r   rG   )r   Úpathr0   r   r   r   rF   †   s   
þzBaseLoader._smart_importc                 C   s‚   z|   |¡ W n4 ty;   | d¡r(ttttj||d d… d�ƒt ¡ d ƒ ttttj|d�ƒt ¡ d ƒ Y d S w |  	|¡S )Nz.pyéýÿÿÿ)r*   Úsuggesté   )r*   )
r   r   Úendswithr   ÚCONFIG_WITH_SUFFIXÚformatÚsysÚexc_infoÚCONFIG_INVALID_NAMEr   )r   Únamer   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   )ÚOptionÚ
NAMESPACESc              
      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.ú=é   Ú.r<   r   NÚ z
{0!r}: {1})ÚsplitÚlowerÚreplaceÚmatchÚgroupsÚgetÚlenÚgroupÚ	to_pythonÚ
ValueErrorrT   )ÚargÚkeyÚvalueÚnsÚns_keyÚcastÚtype_Úexc)r_   Ú	namespaceÚoverride_typesÚre_typeÚtypemapr   r   Úgetarg²   s(   
ûý€þz0BaseLoader.cmdline_config_parser.<locals>.getargc                 3   s   � | ]}ˆ |ƒV  qd S r   r   )r2   rn   )rz   r   r   Ú	<genexpr>Ñ   s   € z3BaseLoader.cmdline_config_parser.<locals>.<genexpr>)r   ÚloadsÚcelery.app.defaultsr^   r_   re   r]   ry   )r   Úargsrv   rx   Úextra_typesrw   r^   r   )r_   rz   rv   rw   rx   ry   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ÚKeyErrorrY   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__)r2   Úmodr   r   r   r{   Þ   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   r:   â   s   ÿþÿzBaseLoader.default_modulesc                 C   s   | j tu r
|  ¡ | _ | j S )zLoader configuration.)rI   Úunconfiguredrˆ   r#   r   r   r   r‘   ê   s   

zBaseLoader.conf)Tr   )NN)F)r�   ©r‰   )&rŠ   Ú
__module__Ú__qualname__Ú__doc__Ú	frozensetr�   Ú
configuredÚoverride_backendsr?   r”   rI   r   r   r!   r$   r%   r&   r'   r+   r/   r   r>   r@   rB   rD   rL   rF   rY   r   ÚreÚcompiler€   rˆ   r�   r   r:   Ú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)r2   Úpkg©r�   r   r   r4   ù   r5   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yR } zt|d|ƒ}|durG||krG|‚W Y d}~dS d}~ww )zFind module in package.rb   z{0}.{1}rX   N)r.   r/   rG   Ú
rpartitionrT   Úgetattr)r-   r�   r*   r<   Úmodule_nameÚeÚimport_exc_namer   r   r   rŸ   þ   s*   
€ÿþ€ürŸ   r•   )%r˜   Ú
__future__r   r   r.   r‚   rœ   rU   r   Úkombu.utilsr   Úkombu.utils.objectsr   rZ   r   Úcelery.fiver   r	   Ú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.    
N