o
    ›¨Êhù  ã                   @   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m	Z	m
Z
mZmZ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 e	rndd
lmZ ddlmZ ddlmZ ddlmZ ddlm Z  G dd„ deƒZ!dZ"dZ#deddfdd„Z$d%dd„Z%d&ddde&ded fd d!„Z'G d"d„ dƒZ(G d#d$„ d$ƒZ)dS )'zDjango-specific customization.é    N)Údatetime)Úimport_module)ÚIOÚTYPE_CHECKINGÚAnyÚListÚOptionalÚcast©Úsymbol_by_name)Úcached_property)Ú_stateÚsignals)ÚFixupWarningÚImproperlyConfigured)Ú
ModuleType)ÚProtocol)ÚConnectionHandler)ÚCelery)ÚTaskc                   @   s   e Zd ZU eed< dS )ÚDjangoDBModuleÚconnectionsN)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__© r   r   úF/var/www/html/env/lib/python3.10/site-packages/celery/fixups/django.pyr      s   
 r   )ÚDjangoFixupÚfixupzpEnvironment variable DJANGO_SETTINGS_MODULE is defined
but Django isn't installed.  Won't apply Django fix-ups!
ÚfhÚreturnc              
   C   s0   z
t  |  ¡ ¡ W d S  tttfy   Y d S w ©N)ÚosÚcloseÚfilenoÚAttributeErrorÚOSErrorÚ	TypeError)r    r   r   r   Ú_maybe_close_fd$   s
   þr)   Údjangor   c                 C   s   | j dk r	tdƒ‚d S )N)é   é   z)Celery 5.x requires Django 1.11 or later.)ÚVERSIONr   )r*   r   r   r   Ú_verify_django_version,   s   
ÿr.   ÚDJANGO_SETTINGS_MODULEÚappr   Úenvr   c                 C   sf   t j |¡}|r1d| j ¡ vr1zddl}W n ty&   t t	t
ƒ¡ Y dS w 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)r0   r1   ÚSETTINGS_MODULEr*   r   r   r   r   1   s   ûr   c                   @   sž   e Zd ZdZddd„Zddd„Zedd
d„ƒZejddd„ƒZde	ddfdd„Z
de	ddfdd„Zd dedefdd„Zdee fdd„Zedefdd„ƒZdS )!r   z"Fixup installed when using Django.r0   r   c                 C   s$   || _ tjd u r| j  ¡  d | _d S r"   )r0   r   Údefault_appÚset_defaultÚ_worker_fixup©Úselfr0   r   r   r   Ú__init__B   s   


zDjangoFixup.__init__r!   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Únowr0   Úloaderr   Úimport_modulesÚconnectÚon_import_modulesÚworker_initÚon_worker_init©r@   r   r   r   r:   H   s   
zDjangoFixup.installÚDjangoWorkerFixupc                 C   s   | j d u rt| jƒ| _ | j S r"   )r>   rP   r0   rO   r   r   r   Úworker_fixupU   s   
zDjangoFixup.worker_fixupÚvalueNc                 C   s
   || _ d S r"   )r>   )r@   rR   r   r   r   rQ   [   s   
Úkwargsc                 K   ó   | j  ¡  d S r"   )rQ   Úvalidate_models©r@   rS   r   r   r   rL   _   s   zDjangoFixup.on_import_modulesc                 K   rT   r"   )rQ   r:   rV   r   r   r   rN   c   s   zDjangoFixup.on_worker_initFÚutcc                 C   s   |rt  ¡ S |  ¡ S r"   )r   ÚutcnowÚ_now)r@   rW   r   r   r   rH   f   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>k   s    z2DjangoFixup.autodiscover_tasks.<locals>.<listcomp>)Údjango.appsrZ   Úget_app_configs)r@   rZ   r   r   r   Úautodiscover_tasksi   s   zDjangoFixup.autodiscover_tasksc                 C   s   t dƒS )Nzdjango.utils.timezone:nowr
   rO   r   r   r   rY   m   s   zDjangoFixup._now)r0   r   )r!   r   ©r!   rP   )rR   rP   r!   N©F)r   r   r   Ú__doc__rA   r:   ÚpropertyrQ   Úsetterr   rL   rN   Úboolr   rH   r   Ústrra   r   rY   r   r   r   r   r   ?   s    

c                   @   s¸   e Zd ZdZd"dd„Zd#dd	„Zd#d
d„Zd$dd„Zdeddfdd„Z	de
ddfdd„Zdddeddfdd„Zdddeddfdd„Zdeddfdd„Zd%deddfdd„Zd#d d!„ZdS )&rP   r   r0   r   r!   Nc                 C   sV   || _ | j j dd ¡| _tdtdƒƒ| _tdƒ| _tdƒ| _	tdƒf| _
tdƒ| _d S )NÚCELERY_DB_REUSE_MAXr   z	django.dbzdjango.core.cacherB   zdjango.db.utils.InterfaceErrorzdjango.db:DatabaseError)r0   Úconfr3   Údb_reuse_maxr	   r   Ú_dbÚ_cacher   rG   Úinterface_errorsÚDatabaseErrorr?   r   r   r   rA   u   s   

ÿzDjangoWorkerFixup.__init__c                 C   s   dd l }| ¡  d S )Nr   )r*   Úsetup)r@   r*   r   r   r   Údjango_setup�   s   zDjangoWorkerFixup.django_setupc                 C   s.   ddl m} |  ¡  tj d¡s|ƒ  d S d S )Nr   )Ú
run_checksÚCELERY_SKIP_CHECKS)Údjango.core.checksrr   rq   r#   r2   r3   )r@   rr   r   r   r   rU   …   s
   
ÿz!DjangoWorkerFixup.validate_modelsc                 C   sL   t j | j¡ t j | j¡ t j | j¡ t j | j	¡ |  ¡  |  
¡  | S r"   )r   Úbeat_embedded_initrK   Úclose_databaseÚtask_prerunÚon_task_prerunÚtask_postrunÚon_task_postrunÚworker_process_initÚon_worker_process_initÚclose_cacherO   r   r   r   r:   ‹   s   zDjangoWorkerFixup.installrS   c                 K   sT   t j d¡r
|  ¡  | jj ¡ D ]}|r|jr|  |j¡ q| j	dd� |  
¡  d S )NÚFORKED_BY_MULTIPROCESSINGT)Úforce)r#   r2   r3   rU   rl   r   ÚallÚ
connectionÚ_maybe_close_db_fdÚ_close_databaser}   )r@   rS   Úcr   r   r   r|   ”   s   

€z(DjangoWorkerFixup.on_worker_process_initÚfdc                 C   s&   zt |ƒ W d S  | jy   Y d S w r"   )r)   rn   )r@   r…   r   r   r   r‚   ª   s
   ÿz$DjangoWorkerFixup._maybe_close_db_fdÚsenderr   c                 K   s   t |jddƒs|  ¡  dS dS )zCalled before every task.Úis_eagerFN)ÚgetattrÚrequestrv   ©r@   r†   rS   r   r   r   rx   °   s   ÿz DjangoWorkerFixup.on_task_prerunc                 K   s&   t |jddƒs|  ¡  |  ¡  d S d S )Nr‡   F)rˆ   r‰   rv   r}   rŠ   r   r   r   rz   µ   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+   )rk   rƒ   Ú_db_recyclesrV   r   r   r   rv   »   s   z DjangoWorkerFixup.close_databaseFr   c                 C   s‚   | j j ¡ D ]8}z|r| ¡  n| ¡  W q | jy   Y q | jy> } zt|ƒ}d|vr4d|vr4‚ W Y d }~qd }~ww d S )NÚclosedznot connected)rl   r   r€   r$   Úclose_if_unusable_or_obsoletern   ro   rh   )r@   r   ÚconnÚexcÚstr_excr   r   r   rƒ   Ã   s   
€€ýøz!DjangoWorkerFixup._close_databasec              	   C   s*   z| j  ¡  W d S  ttfy   Y d S w r"   )rm   Úclose_cachesr(   r&   rO   r   r   r   r}   Ñ   s
   ÿzDjangoWorkerFixup.close_cache)r0   r   r!   N)r!   Nrb   rc   )r   r   r   rŒ   rA   rq   rU   r:   r   r|   r   r‚   rx   rz   rv   rg   rƒ   r}   r   r   r   r   rP   r   s    



	rP   )r*   r   r!   N)r/   )*rd   r#   rC   r7   r   Ú	importlibr   Útypingr   r   r   r   r   r	   Úkombu.utils.importsr   Úkombu.utils.objectsr   Úceleryr   r   Úcelery.exceptionsr   r   Útypesr   r   Údjango.db.utilsr   Úcelery.app.baser   Úcelery.app.taskr   r   Ú__all__r9   r)   r.   rh   r   r   rP   r   r   r   r   Ú<module>   s2     
3