a
    ŠxdÄ  ã                   @   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 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	Zd
Zdd„ Zdd„ Zddd„ZG dd„ dƒZG dd„ dƒZdS )zDjango-specific customization.é    N)Údatetime)Úimport_module©Úsymbol_by_name)Úcached_property)Ú_stateÚsignals)ÚFixupWarningÚImproperlyConfigured)ÚDjangoFixupÚfixupzpEnvironment variable DJANGO_SETTINGS_MODULE is defined
but Django isn't installed.  Won't apply Django fix-ups!
c              
   C   s0   zt  |  ¡ ¡ W n tttfy*   Y n0 d S ©N)ÚosÚcloseÚfilenoÚAttributeErrorÚOSErrorÚ	TypeError)Úfh© r   úL/var/www/html/Ranjet/env/lib/python3.9/site-packages/celery/fixups/django.pyÚ_maybe_close_fd   s    r   c                 C   s   | j dk rtdƒ‚d S )N)é   é   z)Celery 5.x requires Django 1.11 or later.)ÚVERSIONr
   )Údjangor   r   r   Ú_verify_django_version   s    
r   ÚDJANGO_SETTINGS_MODULEc                 C   sd   t j |¡}|r`d| j ¡ vr`zddl}W n  tyJ   t t	t
ƒ¡ Y n0 t|ƒ t| ƒ ¡ S dS )z;Install Django fixup if settings module environment is set.r   r   N)r   ÚenvironÚgetÚ
loader_clsÚlowerr   ÚImportErrorÚwarningsÚwarnr	   ÚERR_NOT_INSTALLEDr   r   Úinstall)ÚappÚenvZSETTINGS_MODULEr   r   r   r   r   #   s    r   c                   @   sh   e Zd ZdZdd„ Zdd„ Zedd„ ƒZejdd„ ƒZd	d
„ Z	dd„ Z
ddd„Zdd„ Zedd„ ƒZdS )r   z"Fixup installed when using Django.c                 C   s$   || _ tjd u r| j  ¡  d | _d S r   )r'   r   Zdefault_appÚset_defaultÚ_worker_fixup©Úselfr'   r   r   r   Ú__init__3   s    

zDjangoFixup.__init__c                 C   sH   t j dt ¡ ¡ tdƒ| _| j| jj	_t
j | j¡ t
j | j¡ | S )Nr   údjango.conf:settings)ÚsysÚpathÚinsertr   Úgetcwdr   Ú	_settingsÚnowr'   Úloaderr   Zimport_modulesÚconnectÚon_import_modulesZworker_initÚon_worker_init©r,   r   r   r   r&   9   s    
zDjangoFixup.installc                 C   s   | j d u rt| jƒ| _ | j S r   )r*   ÚDjangoWorkerFixupr'   r9   r   r   r   Úworker_fixupF   s    
zDjangoFixup.worker_fixupc                 C   s
   || _ d S r   )r*   )r,   Úvaluer   r   r   r;   L   s    c                 K   s   | j  ¡  d S r   )r;   Úvalidate_models©r,   Úkwargsr   r   r   r7   P   s    zDjangoFixup.on_import_modulesc                 K   s   | j  ¡  d S r   )r;   r&   r>   r   r   r   r8   T   s    zDjangoFixup.on_worker_initFc                 C   s   |rt  ¡ S |  ¡ S r   )r   ÚutcnowÚ_now)r,   Úutcr   r   r   r4   W   s    zDjangoFixup.nowc                 C   s   ddl m} dd„ | ¡ D ƒS )Nr   )Úappsc                 S   s   g | ]
}|j ‘qS r   )Úname)Ú.0Úconfigr   r   r   Ú
<listcomp>\   ó    z2DjangoFixup.autodiscover_tasks.<locals>.<listcomp>)Zdjango.appsrC   Zget_app_configs)r,   rC   r   r   r   Úautodiscover_tasksZ   s    zDjangoFixup.autodiscover_tasksc                 C   s   t dƒS )Nzdjango.utils.timezone:nowr   r9   r   r   r   rA   ^   s    zDjangoFixup._nowN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r&   Úpropertyr;   Úsetterr7   r8   r4   rI   r   rA   r   r   r   r   r   0   s   


r   c                   @   sr   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zddd„Zdd„ Zdd„ ZdS )r:   r   c                 C   sP   || _ | j j dd ¡| _tdƒ| _tdƒ| _tdƒ| _tdƒf| _	tdƒ| _
d S )NZCELERY_DB_REUSE_MAXz	django.dbzdjango.core.cacher.   zdjango.db.utils.InterfaceErrorzdjango.db:DatabaseError)r'   Úconfr   Údb_reuse_maxr   Ú_dbÚ_cacher   r3   Úinterface_errorsÚDatabaseErrorr+   r   r   r   r-   f   s    


ÿzDjangoWorkerFixup.__init__c                 C   s   dd l }| ¡  d S )Nr   )r   Úsetup)r,   r   r   r   r   Údjango_setupr   s    zDjangoWorkerFixup.django_setupc                 C   s   ddl m} |  ¡  |ƒ  d S )Nr   )Ú
run_checks)Zdjango.core.checksrX   rW   )r,   rX   r   r   r   r=   v   s    z!DjangoWorkerFixup.validate_modelsc                 C   sZ   t j | j¡ t j | j¡ t j | j¡ t j | j	¡ t j
 | j¡ |  ¡  |  ¡  | S r   )r   Zbeat_embedded_initr6   Úclose_databaseZworker_readyÚon_worker_readyZtask_prerunÚon_task_prerunZtask_postrunÚon_task_postrunZworker_process_initÚon_worker_process_initÚclose_cacher9   r   r   r   r&   {   s    zDjangoWorkerFixup.installc                 K   sT   t j d¡r|  ¡  | jj ¡ D ]}|r |jr |  |j¡ q | j	dd |  
¡  d S )NZFORKED_BY_MULTIPROCESSINGT)Úforce)r   r   r   r=   rR   ÚconnectionsÚallÚ
connectionÚ_maybe_close_db_fdÚ_close_databaser^   )r,   r?   Úcr   r   r   r]   …   s    

z(DjangoWorkerFixup.on_worker_process_initc                 C   s&   zt |ƒ W n | jy    Y n0 d S r   )r   rT   )r,   Úfdr   r   r   rc   ›   s    z$DjangoWorkerFixup._maybe_close_db_fdc                 K   s   t |jddƒs|  ¡  dS )zCalled before every task.Úis_eagerFN)ÚgetattrÚrequestrY   ©r,   Zsenderr?   r   r   r   r[   ¡   s    z DjangoWorkerFixup.on_task_prerunc                 K   s"   t |jddƒs|  ¡  |  ¡  d S )Nrg   F)rh   ri   rY   r^   rj   r   r   r   r\   ¦   s    z!DjangoWorkerFixup.on_task_postrunc                 K   s>   | j s|  ¡ S | j| j d kr,d| _|  ¡  |  jd7  _d S )Né   r   r   )rQ   rd   Ú_db_recyclesr>   r   r   r   rY   ­   s    z DjangoWorkerFixup.close_databaseFc                 C   s„   | j j ¡ D ]r}z|r | ¡  n| ¡  W q | jy>   Y q | jy| } z&t|ƒ}d|vrhd|vrh‚ W Y d }~qd }~0 0 qd S )NÚclosedznot connected)rR   r`   ra   r   Zclose_if_unusable_or_obsoleterT   rU   Ústr)r,   r_   ÚconnÚexcZstr_excr   r   r   rd   µ   s    
z!DjangoWorkerFixup._close_databasec              	   C   s*   z| j  ¡  W n ttfy$   Y n0 d S r   )rS   Zclose_cachesr   r   r9   r   r   r   r^   Ã   s    zDjangoWorkerFixup.close_cachec                 K   s   | j jrt d¡ d S )NzkUsing settings.DEBUG leads to a memory
            leak, never use this setting in production environments!)r3   ÚDEBUGr#   r$   r>   r   r   r   rZ   É   s    z!DjangoWorkerFixup.on_worker_readyN)F)rJ   rK   rL   rl   r-   rW   r=   r&   r]   rc   r[   r\   rY   rd   r^   rZ   r   r   r   r   r:   c   s   

r:   )r   )rM   r   r/   r#   r   Ú	importlibr   Zkombu.utils.importsr   Zkombu.utils.objectsr   Zceleryr   r   Zcelery.exceptionsr	   r
   Ú__all__r%   r   r   r   r   r:   r   r   r   r   Ú<module>   s    
3