
    D6i                     N   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
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*y)!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)ConnectionHandler)Celery)Taskc                       e Zd ZU eed<   y)DjangoDBModuleconnectionsN)__name__
__module____qualname__r   __annotations__     W/home/azureuser/techstart-app/venv/lib/python3.12/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                  | j                                y # t        t        t
        f$ r Y y w xY wN)osclosefilenoAttributeErrorOSError	TypeError)r$   s    r!   _maybe_close_fdr.   $   s2    
GY/ s   #& ==c                 8    | j                   dk  rt        d      y )N)      z)Celery 5.x requires Django 1.11 or later.)VERSIONr   )djangos    r!   _verify_django_versionr4   ,   s    ~~"#NOO  r    appr   envr"   c                 2   t         j                  j                  |      }|rEd| j                  j	                         vr)	 ddl}t        |       t        |       j                         S y# t        $ r% t        j                  t        t                     Y yw xY w)z;Install Django fixup if settings module environment is set.r3   r   N)r(   environget
loader_clslowerr3   r4   r"   installImportErrorwarningswarnr   ERR_NOT_INSTALLED)r5   r6   SETTINGS_MODULEr3   s       r!   r#   r#   1   s|    jjnnS)O83>>+?+?+AA	. #6*s#++--  	;MM,'89: 	;s   A( (+B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y)r"   z"Fixup installed when using Django.c                 t    || _         t        j                  | j                   j                          d | _        y r'   )r5   r   default_appset_default_worker_fixupselfr5   s     r!   __init__zDjangoFixup.__init__B   s-    %HH  "<@r    r%   c                    t         j                  j                  dt        j                                t        d      | _        | j                  | j                  j                  _        | j                  j                  sd| j                  _        t        j                  j                  | j                         t        j                   j                  | j"                         | S )Nr   django.conf:settingsz%celery.contrib.django.task:DjangoTask)syspathinsertr(   getcwdr   	_settingsnowr5   loader_custom_task_cls_usedtask_clsr   import_modulesconnecton_import_modulesworker_initon_worker_initrH   s    r!   r<   zDjangoFixup.installH   s     	299;''(>?"hhxx-- GDHH&&t'='=>##D$7$78r    c                 f    | j                   t        | j                        | _         | j                   S r'   )rF   DjangoWorkerFixupr5   rZ   s    r!   worker_fixupzDjangoFixup.worker_fixupX   s+    %!2488!<D!!!r    Nc                     || _         y r'   )rF   )rH   values     r!   r]   zDjangoFixup.worker_fixup^   s
    "r    kwargsc                 8    | j                   j                          y r'   )r]   validate_modelsrH   r`   s     r!   rW   zDjangoFixup.on_import_modulesb   s    ))+r    c                 8    | j                   j                          y r'   )r]   r<   rc   s     r!   rY   zDjangoFixup.on_worker_initf   s    !!#r    utcc                 l    |r#t        j                  t        j                        S | j	                         S r'   )r   rQ   r   re   _now)rH   re   s     r!   rQ   zDjangoFixup.nowi   s"    -0x||HLL)AdiikAr    c                 h    ddl m} |j                         D cg c]  }|j                   c}S c c}w )Nr   )apps)django.appsri   get_app_configsname)rH   ri   configs      r!   autodiscover_taskszDjangoFixup.autodiscover_tasksl   s&    $*.*>*>*@AAAAs   /c                     t        d      S )Nzdjango.utils.timezone:nowr   rZ   s    r!   rg   zDjangoFixup._nowp   s    9::r    )r5   r   )r%   r"   r%   r\   )r_   r\   r%   NF)r   r   r   __doc__rI   r<   propertyr]   setterr   rW   rY   boolr   rQ   r	   strrn   r   rg   r   r    r!   r"   r"   ?   s    ,A  " "
 # #,# ,$ ,$s $t $Bt B BBDI 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y)r\   r   r%   Nc                    || _         | j                   j                  j                  dd       | _        t	        dt        d            | _        t        d      | _        t        d      | _	        t        d      f| _
        t        d      | _        y )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__x   sz     HHMM--.CTJ(-*DE#$78'(>? ;<!
 ,,EFr    c                 ,    dd l }|j                          y )Nr   )r3   setup)rH   r3   s     r!   django_setupzDjangoWorkerFixup.django_setup   s    r    c                 ~    ddl m} | j                          t        j                  j                  d      s |        y y )Nr   )
run_checksCELERY_SKIP_CHECKS)django.core.checksr   r   r(   r8   r9   )rH   r   s     r!   rb   z!DjangoWorkerFixup.validate_models   s,    1zz~~23L 4r    c                    t         j                  j                  | j                         t         j                  j                  | j
                         t         j                  j                  | j                         t         j                  j                  | j                         | j                          | j                          | S r'   )r   beat_embedded_initrV   close_databasetask_prerunon_task_preruntask_postrunon_task_postrunworker_process_initon_worker_process_initclose_cacherZ   s    r!   r<   zDjangoWorkerFixup.install   s    ""**4+>+>?##D$7$78$$T%9%9:##++D,G,GHr    r`   c                 N   t         j                  j                  d      r| j                          | j                  j
                  j                         D ]-  }|s|j                  s| j                  |j                         / | j                  d       | j                          y )NFORKED_BY_MULTIPROCESSINGT)force)r(   r8   r9   rb   r|   r   all
connection_maybe_close_db_fd_close_databaser   )rH   r`   cs      r!   r   z(DjangoWorkerFixup.on_worker_process_init   s     ::>>56  " %%))+ 	6AQ\\''5	6
 	4(r    fdc                 F    	 t        |       y # | j                  $ r Y y w xY wr'   )r.   r~   )rH   r   s     r!   r   z$DjangoWorkerFixup._maybe_close_db_fd   s'    	B$$ 		s      senderr   c                 T    t        |j                  dd      s| j                          yy)zCalled before every task.is_eagerFN)getattrrequestr   rH   r   r`   s      r!   r   z DjangoWorkerFixup.on_task_prerun   s#    v~~z59! :r    c                 t    t        |j                  dd      s!| j                          | j                          y y )Nr   F)r   r   r   r   r   s      r!   r   z!DjangoWorkerFixup.on_task_postrun   s/    v~~z59! :r    c                     | j                   s| j                         S | j                  | j                   dz  k\  rd| _        | j                          | xj                  dz  c_        y )N   r   r0   )r{   r   _db_recyclesrc   s     r!   r   z DjangoWorkerFixup.close_database   sX      '')) 1 1A 55 !D  "Qr    r   c                    | j                   j                  j                         D ]&  }	 |r|j                          n|j	                          ( y # | j
                  $ r Y ;| j                  $ r}t        |      }d|vrd|vr Y d }~bd }~ww xY w)Nclosedznot connected)r|   r   r   r)   close_if_unusable_or_obsoleter~   r   rv   )rH   r   connexcstr_excs        r!   r   z!DjangoWorkerFixup._close_database   s    HH((,,. 	D
JJL668	 (( %% c(7*g/Ms   #AB B.BBc                 d    	 | j                   j                          y # t        t        f$ r Y y w xY wr'   )r}   close_cachesr-   r+   rZ   s    r!   r   zDjangoWorkerFixup.close_cache   s.    	KK$$&>* 		s    //)r5   r   r%   N)r%   Nrp   rq   )r   r   r   r   rI   r   rb   r<   r   r   r   r   r   r   r   ru   r   r   r   r    r!   r\   r\   u   s    L
Gs t ,R D "V "s "t "
f   s t T d r    r\   )r3   r   r%   N)DJANGO_SETTINGS_MODULE)+rr   r(   rL   r>   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.   r4   rv   r#   r"   r\   r   r    r!   <module>r      s    $ 	 
  ' # ? ? . / " @ 1&$' ' #  t P
x c -AX 3; 3;lc cr    