
    `f                     d   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	r,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e          Z!dZ"dZ#deddfdZ$d"dZ%d#ddde&ded         fdZ' G d d          Z( G 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                       e Zd ZU eed<   dS )DjangoDBModuleconnectionsN)__name__
__module____qualname__r   __annotations__     F/var/www/html/env/lib/python3.11/site-packages/celery/fixups/django.pyr   r      s         &&&&&&r   r   )DjangoFixupfixupzpEnvironment variable DJANGO_SETTINGS_MODULE is defined
but Django isn't installed.  Won't apply Django fix-ups!
fhreturnc                     	 t          j        |                                            d S # t          t          t
          f$ r Y d S w xY wN)osclosefilenoAttributeErrorOSError	TypeError)r#   s    r    _maybe_close_fdr-   $   sN    
GY/   s   &* AAdjangor   c                 :    | j         dk     rt          d          d S )N)      z)Celery 5.x requires Django 1.11 or later.)VERSIONr   )r.   s    r    _verify_django_versionr3   ,   s&    ~"#NOOO  r   DJANGO_SETTINGS_MODULEappr   envr!   c                 T   t           j                            |          }|rd| j                                        vrk	 ddl}t          |           t          |                                           S # t          $ r) t          j        t          t                               Y nw xY wdS )z;Install Django fixup if settings module environment is set.r.   r   N)r'   environget
loader_clslowerr.   r3   r!   installImportErrorwarningswarnr   ERR_NOT_INSTALLED)r5   r6   SETTINGS_MODULEr.   s       r    r"   r"   1   s    jnnS))O .83>+?+?+A+AAA	.MMM #6***s##++---	  	; 	; 	;M,'899:::::	;
 4s   A2 20B%$B%c                       e Zd ZdZddZddZedd            Zej        dd            Zde	dd
fdZ
de	dd
fdZddedefdZdee         fdZedefd            Zd
S )r!   z"Fixup installed when using Django.r5   r   c                 l    || _         t          j        | j                                          d | _        d S r&   )r5   r   default_appset_default_worker_fixupselfr5   s     r    __init__zDjangoFixup.__init__B   s4    %H  """<@r   r$   c                 L   t           j                            dt          j                               t          d          | _        | j        | j        j	        _        t          j                            | j                   t          j                            | j                   | S )Nr   django.conf:settings)syspathinsertr'   getcwdr   	_settingsnowr5   loaderr   import_modulesconnecton_import_modulesworker_initon_worker_initrH   s    r    r<   zDjangoFixup.installH   sw     	29;;''''(>??"h&&t'=>>>##D$7888r   DjangoWorkerFixupc                 P    | j         t          | j                  | _         | j         S r&   )rF   rY   r5   rX   s    r    worker_fixupzDjangoFixup.worker_fixupU   s&    %!248!<!<D!!r   valueNc                     || _         d S r&   )rF   )rH   r\   s     r    r[   zDjangoFixup.worker_fixup[   s    "r   kwargsc                 8    | j                                          d S r&   )r[   validate_modelsrH   r^   s     r    rU   zDjangoFixup.on_import_modules_   s    ))+++++r   c                 8    | j                                          d S r&   )r[   r<   ra   s     r    rW   zDjangoFixup.on_worker_initc   s    !!#####r   Futcc                 T    |rt          j                    n|                                 S r&   )r   utcnow_now)rH   rc   s     r    rQ   zDjangoFixup.nowf   s"    $'8x   TYY[[8r   c                 J    ddl m} d |                                D             S )Nr   )appsc                     g | ]	}|j         
S r   )name).0configs     r    
<listcomp>z2DjangoFixup.autodiscover_tasks.<locals>.<listcomp>k   s    AAAAAAr   )django.appsrh   get_app_configs)rH   rh   s     r    autodiscover_taskszDjangoFixup.autodiscover_tasksi   s4    $$$$$$AA$*>*>*@*@AAAAr   c                      t          d          S )Nzdjango.utils.timezone:nowr   rX   s    r    rf   zDjangoFixup._nowm   s    9:::r   )r5   r   )r$   r!   r$   rY   )r\   rY   r$   NF)r   r   r   __doc__rI   r<   propertyr[   setterr   rU   rW   boolr   rQ   r   strrp   r   rf   r   r   r    r!   r!   ?   s@       ,,A A A A    " " " X"
 # # # #,# ,$ , , , ,$s $t $ $ $ $9 9t 9 9 9 9 9BDI B B B B ;h ; ; ; _; ; ;r   c                       e Zd ZdZddZddZddZdd	Zd
eddfdZ	de
ddfdZddd
eddfdZddd
eddfdZd
eddfdZddeddfdZddZdS )rY   r   r5   r   r$   Nc                 D   || _         | 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.cacherK   zdjango.db.utils.InterfaceErrorzdjango.db:DatabaseError)r5   confr9   db_reuse_maxr
   r   _db_cacher   rP   interface_errorsDatabaseErrorrG   s     r    rI   zDjangoWorkerFixup.__init__u   s     HM--.CTJJ(-*D*DEE#$788'(>?? ;<<!
 ,,EFFr   c                 6    dd l }|                                 d S )Nr   )r.   setup)rH   r.   s     r    django_setupzDjangoWorkerFixup.django_setup   s    r   c                     ddl m} |                                  t          j                            d          s |             d S d S )Nr   )
run_checksCELERY_SKIP_CHECKS)django.core.checksr   r   r'   r8   r9   )rH   r   s     r    r`   z!DjangoWorkerFixup.validate_models   sV    111111z~~233 	JLLLLL	 	r   c                 v   t           j                            | j                   t           j                            | j                   t           j                            | j                   t           j                            | j	                   |                                  | 
                                 | S r&   )r   beat_embedded_initrT   close_databasetask_prerunon_task_preruntask_postrunon_task_postrunworker_process_initon_worker_process_initclose_cacherX   s    r    r<   zDjangoWorkerFixup.install   s    "**4+>???##D$7888$$T%9:::#++D,GHHHr   r^   c                 H   t           j                            d          r|                                  | j        j                                        D ]%}|r!|j        r|                     |j                   &| 	                    d           | 
                                 d S )NFORKED_BY_MULTIPROCESSINGT)force)r'   r8   r9   r`   r~   r   all
connection_maybe_close_db_fd_close_databaser   )rH   r^   cs      r    r   z(DjangoWorkerFixup.on_worker_process_init   s     :>>566 	#  """ %))++ 	6 	6A 6Q\ 6''555 	4(((r   fdc                 H    	 t          |           d S # | j        $ r Y d S w xY wr&   )r-   r   )rH   r   s     r    r   z$DjangoWorkerFixup._maybe_close_db_fd   s@    	B$ 	 	 	DD	s    
!!senderr   c                 ^    t          |j        dd          s|                                  dS dS )zCalled before every task.is_eagerFN)getattrrequestr   rH   r   r^   s      r    r   z DjangoWorkerFixup.on_task_prerun   s:    v~z599 	"!!!!!	" 	"r   c                     t          |j        dd          s*|                                  |                                  d S d S )Nr   F)r   r   r   r   r   s      r    r   z!DjangoWorkerFixup.on_task_postrun   sL    v~z599 	!!!	 	r   c                     | j         s|                                 S | j        | j         dz  k    rd| _        |                                  | xj        dz  c_        d S )N   r   r0   )r}   r   _db_recyclesra   s     r    r   z DjangoWorkerFixup.close_database   si      	*''))) 1A 555 !D  """Qr   Fr   c                    | j         j                                        D ]h}	 |r|                                 n|                                 /# | j        $ r Y ;| j        $ r"}t          |          }d|vrd|vr Y d }~ad }~ww xY wd S )Nclosedznot connected)r~   r   r   r(   close_if_unusable_or_obsoleter   r   rx   )rH   r   connexcstr_excs        r    r   z!DjangoWorkerFixup._close_database   s    H(,,.. 	 	D
 9JJLLLL66888(   %   c((7**g/M/M	 	s   +A
B	B#B  Bc                 j    	 | j                                          d S # t          t          f$ r Y d S w xY wr&   )r   close_cachesr,   r*   rX   s    r    r   zDjangoWorkerFixup.close_cache   sH    	K$$&&&&&>* 	 	 	DD	s    22)r5   r   r$   N)r$   Nrr   rs   )r   r   r   r   rI   r   r`   r<   r   r   r   r   r   r   r   rw   r   r   r   r   r    rY   rY   r   s`       L
G 
G 
G 
G         s t    ,R D    "V "s "t " " " "
f      s t     T d         r   rY   )r.   r   r$   N)r4   )*rt   r'   rL   r>   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__r@   r-   r3   rx   r"   r!   rY   r   r   r    <module>r      s;   $ $ 				 



        # # # # # # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? . . . . . . / / / / / / " " " " " " " " @ @ @ @ @ @ @ @ 
'      111111&&&&&&$$$$$$' ' ' ' ' ' ' ' #  t    P P P P
 x c -AX    0; 0; 0; 0; 0; 0; 0; 0;fc c c c c c c c c cr   