o
    .i                     @   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   O/var/www/html/philips/venv/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