
     h                         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 Zd ZddZ G d d          Z G 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                     	 t          j        |                                            d S # t          t          t
          f$ r Y d S w xY wN)osclosefilenoAttributeErrorOSError	TypeError)fhs    P/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/celery/fixups/django.py_maybe_close_fdr      sN    
GY/   s   &* AAc                 :    | j         dk     rt          d          d S )N)      z)Celery 5.x requires Django 1.11 or later.)VERSIONr   )djangos    r   _verify_django_versionr      s&    ~"#NOOO      DJANGO_SETTINGS_MODULEc                 Z   t           j                            |          }|rd| j                                        vrn	 ddl}t          |           t          |                                           S # t          $ r* t          j        t          t                               Y dS w xY wdS dS )z;Install Django fixup if settings module environment is set.r   r   N)r   environget
loader_clslowerr   r   r   installImportErrorwarningswarnr
   ERR_NOT_INSTALLED)appenvSETTINGS_MODULEr   s       r   r   r   #   s    jnnS))O .83>+?+?+A+AAA	.MMM #6***s##++---	  	; 	; 	;M,'899::::::	;. .AAs   A2 20B&%B&c                       e Zd ZdZd Zd Zed             Zej        d             Zd Z	d Z
dd	Zd
 Zed             ZdS )r   z"Fixup installed when using Django.c                 l    || _         t          j        | j                                          d | _        d S r   )r+   r   default_appset_default_worker_fixupselfr+   s     r   __init__zDjangoFixup.__init__3   s4    %H  """!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nowr+   loaderr	   import_modulesconnecton_import_modulesworker_initon_worker_initr4   s    r   r&   zDjangoFixup.install9   sw     	29;;''''(>??"h&&t'=>>>##D$7888r   c                 P    | j         t          | j                  | _         | j         S r   )r2   DjangoWorkerFixupr+   rD   s    r   worker_fixupzDjangoFixup.worker_fixupF   s&    %!248!<!<D!!r   c                     || _         d S r   )r2   )r4   values     r   rG   zDjangoFixup.worker_fixupL   s    "r   c                 8    | j                                          d S r   )rG   validate_modelsr4   kwargss     r   rA   zDjangoFixup.on_import_modulesP   s    ))+++++r   c                 8    | j                                          d S r   )rG   r&   rL   s     r   rC   zDjangoFixup.on_worker_initT   s    !!#####r   Fc                 T    |rt          j                    n|                                 S r   )r   utcnow_now)r4   utcs     r   r=   zDjangoFixup.nowW   s"    $'8x   TYY[[8r   c                 J    ddl m} d |                                D             S )Nr   )appsc                     g | ]	}|j         
S  )name).0configs     r   
<listcomp>z2DjangoFixup.autodiscover_tasks.<locals>.<listcomp>\   s    AAAAAAr   )django.appsrT   get_app_configs)r4   rT   s     r   autodiscover_taskszDjangoFixup.autodiscover_tasksZ   s4    $$$$$$AA$*>*>*@*@AAAAr   c                      t          d          S )Nzdjango.utils.timezone:nowr   rD   s    r   rQ   zDjangoFixup._now^   s    9:::r   NF)__name__
__module____qualname____doc__r5   r&   propertyrG   setterrA   rC   r=   r]   r   rQ   rV   r   r   r   r   0   s        ,," " "   " " X"
 # # #, , ,$ $ $9 9 9 9B B B ; ; _; ; ;r   r   c                   \    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZd Zd ZdS )rF   r   c                 (   || _         | j         j                            dd           | _        t	          d          | _        t	          d          | _        t          d          | _        t          d          f| _	        t          d          | _
        d S )NCELERY_DB_REUSE_MAXz	django.dbzdjango.core.cacher7   zdjango.db.utils.InterfaceErrorzdjango.db:DatabaseError)r+   confr#   db_reuse_maxr   _db_cacher   r<   interface_errorsDatabaseErrorr3   s     r   r5   zDjangoWorkerFixup.__init__f   s     HM--.CTJJ --#$788'(>?? ;<<!
 ,,EFFr   c                 6    dd l }|                                 d S )Nr   )r   setup)r4   r   s     r   django_setupzDjangoWorkerFixup.django_setupr   s    r   c                 N    ddl m} |                                   |             d S )Nr   )
run_checks)django.core.checksrs   rq   )r4   rs   s     r   rK   z!DjangoWorkerFixup.validate_modelsv   s5    111111
r   c                    t           j                            | j                   t           j                            | j                   t           j                            | j                   t           j                            | j	                   t           j
                            | j                   |                                  |                                  | S r   )r	   beat_embedded_initr@   close_databaseworker_readyon_worker_readytask_prerunon_task_preruntask_postrunon_task_postrunworker_process_initon_worker_process_initclose_cacherD   s    r   r&   zDjangoWorkerFixup.install{   s    "**4+>???$$T%9:::##D$7888$$T%9:::#++D,GHHHr   c                 H   t           j                            d          r|                                  | j        j                                        D ]%}|r!|j        r|                     |j                   &| 	                    d           | 
                                 d S )NFORKED_BY_MULTIPROCESSINGT)force)r   r"   r#   rK   rk   connectionsall
connection_maybe_close_db_fd_close_databaser   )r4   rM   cs      r   r   z(DjangoWorkerFixup.on_worker_process_init   s     :>>566 	#  """ %))++ 	6 	6A 6Q\ 6''555 	4(((r   c                 H    	 t          |           d S # | j        $ r Y d S w xY wr   )r   rm   )r4   fds     r   r   z$DjangoWorkerFixup._maybe_close_db_fd   s@    	B$ 	 	 	DD	s    
!!c                 ^    t          |j        dd          s|                                  dS dS )zCalled before every task.is_eagerFN)getattrrequestrw   r4   senderrM   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   rw   r   r   s      r   r}   z!DjangoWorkerFixup.on_task_postrun   sN     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   r   )rj   r   _db_recyclesrL   s     r   rw   z DjangoWorkerFixup.close_database   si      	*''))) 1A 555 !D  """Qr   Fc                    | 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)rk   r   r   r   close_if_unusable_or_obsoleterm   rn   str)r4   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   )rl   close_cachesr   r   rD   s    r   r   zDjangoWorkerFixup.close_cache   sH    	K$$&&&&&>* 	 	 	DD	s    22c                 J    | j         j        rt          j        d           d S d S )NzkUsing settings.DEBUG leads to a memory
            leak, never use this setting in production environments!)r<   DEBUGr(   r)   rL   s     r   ry   z!DjangoWorkerFixup.on_worker_ready   sE    > 	IM H I I I I I	I 	Ir   Nr_   )r`   ra   rb   r   r5   rq   rK   r&   r   r   r{   r}   rw   r   r   ry   rV   r   r   rF   rF   c   s        L
G 
G 
G    
    ,  " " "
         I I I I Ir   rF   )r    )rc   r   r8   r(   r   	importlibr   kombu.utils.importsr   kombu.utils.objectsr   celeryr   r	   celery.exceptionsr
   r   __all__r*   r   r   r   r   rF   rV   r   r   <module>r      sO   $ $ 				 



        # # # # # # . . . . . . / / / / / / " " " " " " " " @ @ @ @ @ @ @ @
"   P P P

. 
. 
. 
.0; 0; 0; 0; 0; 0; 0; 0;fiI iI iI iI iI iI iI iI iI iIr   