o
    h                     @   sL  d Z ddlZddlZddlZddlmZ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
rvd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# 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timezone)import_module)IOTYPE_CHECKINGAnyListOptionalcastsymbol_by_name)cached_property)_statesignals)FixupWarningImproperlyConfigured)
ModuleType)Protocol)BaseDatabaseWrapper)ConnectionHandler)Celery)Taskc                   @   s   e Zd ZU eed< dS )DjangoDBModuleconnectionsN)__name__
__module____qualname__r   __annotations__ r   r   V/var/www/html/optinet_system/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   
r0   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_INSTALLEDr0   r    install)r2   r3   SETTINGS_MODULEr,   r   r   r   r!   2   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.r2   r   c                 C   s$   || _ tjd u r| j   d | _d S r$   )r2   r   default_appset_default_worker_fixupselfr2   r   r   r   __init__C   s   


zDjangoFixup.__init__r#   c                 C   sX   t jdt  td| _| j| jj	_| jj
sd| j_tj| j tj| j | S )Nr   django.conf:settingsz%celery.contrib.django.task:DjangoTask)syspathinsertr%   getcwdr   	_settingsnowr2   loader_custom_task_cls_usedtask_clsr   import_modulesconnecton_import_modulesworker_initon_worker_initrB   r   r   r   r<   I   s   
zDjangoFixup.installDjangoWorkerFixupc                 C   s   | j d u rt| j| _ | j S r$   )r@   rT   r2   rS   r   r   r   worker_fixupY   s   
zDjangoFixup.worker_fixupvalueNc                 C   s
   || _ d S r$   )r@   )rB   rV   r   r   r   rU   _   s   
kwargsc                 K      | j   d S r$   )rU   validate_modelsrB   rW   r   r   r   rP   c   s   zDjangoFixup.on_import_modulesc                 K   rX   r$   )rU   r<   rZ   r   r   r   rR   g   s   zDjangoFixup.on_worker_initFutcc                 C   s   |rt tjS |  S r$   )r   rJ   r   r[   _now)rB   r[   r   r   r   rJ   j   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>o   s    z2DjangoFixup.autodiscover_tasks.<locals>.<listcomp>)django.appsr]   get_app_configs)rB   r]   r   r   r   autodiscover_tasksm   s   zDjangoFixup.autodiscover_tasksc                 C   s   t dS )Nzdjango.utils.timezone:nowr   rS   r   r   r   r\   q   s   zDjangoFixup._now)r2   r   )r#   r    r#   rT   )rV   rT   r#   NF)r   r   r   __doc__rC   r<   propertyrU   setterr   rP   rR   boolr   rJ   r   strrd   r   r\   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&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 )(rT   r   r2   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.cacherD   zdjango.db.utils.InterfaceErrorzdjango.db:DatabaseError)r2   confr5   db_reuse_maxr
   r   _db_cacher   rI   interface_errorsDatabaseErrorrA   r   r   r   rC   y   s   

zDjangoWorkerFixup.__init__c                 C   s   dd l }|  d S )Nr   )r,   setup)rB   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.checksru   rt   r%   r4   r5   )rB   ru   r   r   r   rY      s
   
z!DjangoWorkerFixup.validate_modelsc                 C   sL   t j| j t j| j t j| j t j| j	 |   | 
  | S r$   )r   beat_embedded_initrO   close_databasetask_prerunon_task_preruntask_postrunon_task_postrunworker_process_initon_worker_process_initclose_cacherS   r   r   r   r<      s   zDjangoWorkerFixup.installrW   c                 K   sR   t jdr
|   | jj D ]}|r|jr| | q| j	dd | 
  d S )NFORKED_BY_MULTIPROCESSINGT)force)r%   r4   r5   rY   ro   r   all
connection_maybe_close_db_fd_close_databaser   )rB   rW   cr   r   r   r      s   


z(DjangoWorkerFixup.on_worker_process_initr   r   c                 C   sR   z|j  t|j W d    W d S 1 sw   Y  W d S  | jy(   Y d S w r$   )wrap_database_errorsr+   r   rq   )rB   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requestry   rB   r   rW   r   r   r   r{      s   z DjangoWorkerFixup.on_task_prerunc                 K   s&   t |jdds|   |   d S d S )Nr   F)r   r   ry   r   r   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-   )rn   r   _db_recyclesrZ   r   r   r   ry      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)ro   r   r   r&   close_if_unusable_or_obsoleterq   rr   rk   )rB   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$   )rp   close_cachesr*   r(   rS   r   r   r   r      s
   zDjangoWorkerFixup.close_cache)r2   r   r#   N)r#   Nre   )r   r   r#   Nrf   )r   r   r   r   rC   rt   rY   r<   r   r   r   r{   r}   ry   rj   r   r   r   r   r   r   rT   v   s    



	
rT   )r,   r   r#   N)r1   )-rg   r%   rE   r9   r   r   	importlibr   typingr   r   r   r   r	   r
   kombu.utils.importsr   kombu.utils.objectsr   celeryr   r   celery.exceptionsr   r   typesr   r   django.db.backends.base.baser   django.db.utilsr   celery.app.baser   celery.app.taskr   r   __all__r;   r+   r0   rk   r!   r    rT   r   r   r   r   <module>   s4     
6