
    xai!                     n   d Z ddl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 dd
l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$ 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)WorkController)
ModuleType)Protocol)BaseDatabaseWrapper)ConnectionHandler)Celery)Taskc                       e Zd ZU eed<   y)DjangoDBModuleconnectionsN)__name__
__module____qualname__r   __annotations__     f/var/www/html/BankruptcyAI-uat/bankruptcy-ai/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_fdr0   '   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_versionr6   /   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.r5   r   N)r*   environget
loader_clslowerr5   r6   r$   installImportErrorwarningswarnr   ERR_NOT_INSTALLED)r7   r8   SETTINGS_MODULEr5   s       r#   r%   r%   4   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)   )r7   r   default_appset_default_worker_fixupselfr7   s     r#   __init__zDjangoFixup.__init__E   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nowr7   loader_custom_task_cls_usedtask_clsr   import_modulesconnecton_import_modulesworker_initon_worker_initrJ   s    r#   r>   zDjangoFixup.installK   s     	299;''(>?"hhxx-- GDHH&&t'='=>##D$7$78r"   c                 f    | j                   t        | j                        | _         | j                   S r)   )rH   DjangoWorkerFixupr7   r\   s    r#   worker_fixupzDjangoFixup.worker_fixup[   s+    %!2488!<D!!!r"   Nc                     || _         y r)   )rH   )rJ   values     r#   r_   zDjangoFixup.worker_fixupa   s
    "r"   kwargsc                 8    | j                   j                          y r)   )r_   validate_modelsrJ   rb   s     r#   rY   zDjangoFixup.on_import_modulese   s    ))+r"   c                     |j                  d      }|r|| j                  _        nt        j                  dt
        d       | j                  j                          y )NsenderzDjangoFixup.on_worker_init called without a sender (worker instance). This may indicate a misconfiguration or an internal error.   )
stacklevel)r;   r_   workerr@   rA   r   r>   )rJ   rb   rj   s      r#   r[   zDjangoFixup.on_worker_initi   sM    -3ZZ-A'-D$MMM	 	!!#r"   utcc                 l    |r#t        j                  t        j                        S | j	                         S r)   )r   rS   r   rk   _now)rJ   rk   s     r#   rS   zDjangoFixup.nowv   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.appsro   get_app_configsname)rJ   ro   configs      r#   autodiscover_taskszDjangoFixup.autodiscover_tasksy   s&    $*.*>*>*@AAAAs   /c                     t        d      S )Nzdjango.utils.timezone:nowr   r\   s    r#   rm   zDjangoFixup._now}   s    9::r"   )r7   r   )r'   r$   r'   r^   )ra   r^   r'   N)F)r   r   r   __doc__rK   r>   propertyr_   setterr   rY   r[   boolr   rS   r	   strrt   r   rm   r!   r"   r#   r$   r$   B   s    ,A  " "
 # #,# ,$ ,$s $t $Bt B BBDI B ;h ; ;r"   c                       e Zd 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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efdZddZddZy)r^   r   Nr'   c                    || _         | 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.cacherM   zdjango.db.utils.InterfaceErrorzdjango.db:DatabaseError)r7   confr;   db_reuse_maxr   r   _db_cacher   rR   interface_errorsDatabaseErrorrI   s     r#   rK   zDjangoWorkerFixup.__init__   sz     HHMM--.CTJ(-*DE#$78'(>? ;<!
 ,,EFr"   c                 ,    dd l }|j                          y )Nr   )r5   setup)rJ   r5   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*   r:   r;   )rJ   r   s     r#   rd   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_initrX   close_databasetask_prerunon_task_preruntask_postrunon_task_postrunworker_process_initon_worker_process_initclose_cacher\   s    r#   r>   zDjangoWorkerFixup.install   s    ""**4+>+>?##D$7$78$$T%9%9:##++D,G,GHr"   rb   c                 6   t         j                  j                  d      r| j                          | j                  j
                  j                         D ]#  }|s|j                  s| j                  |       % | j                          | j                          y )NFORKED_BY_MULTIPROCESSING)r*   r:   r;   rd   r   r   all
connection_maybe_close_db_fd_close_databaser   )rJ   rb   cs      r#   r   z(DjangoWorkerFixup.on_worker_process_init   sv     ::>>56  " %%))+ 	+AQ\\''*	+
 	r"   c                     	 |j                   5  t        |j                         d d d        y # 1 sw Y   y xY w# | j                  $ r Y y w xY wr)   )wrap_database_errorsr0   r   r   )rJ   r   s     r#   r   z$DjangoWorkerFixup._maybe_close_db_fd   sH    	'' .-. . .$$ 		s#   9 -9 69 9 A
Arg   r   c                 T    t        |j                  dd      s| j                          yy)zCalled before every task.is_eagerFN)getattrrequestr   rJ   rg   rb   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 )Nrh   r   r2   )r   r   _db_recyclesre   s     r#   r   z DjangoWorkerFixup.close_database   sX      '')) 1 1A 55 !D  "Qr"   c                     | j                   yt        | j                   j                  t              r| j                   j                  n| j                   j                  j                  }d|v S )NFprefork)rj   
isinstancepool_clsr{   r   )rJ   pools     r#   _is_preforkzDjangoWorkerFixup._is_prefork   sQ    ;;'1$++2F2F'Lt{{##RVR]R]RfRfRqRqD  r"   c                    	 | j                   j                  j                  d      }| j	                         }|D ]  }	 |j                          | j                  j                  j                  |j                  i       j                  di       j                  d      }|r@|r>t        |d      r2t        j                  t              5  |j                          d d d         y # t        $ r' | j                   j                  j                         }Y w xY w# 1 sw Y   ?xY w# | j                  $ r Y | j                   $ r}t#        |      }d|vrd|vr Y d }~ d }~ww xY w)NT)initialized_onlyOPTIONSr   
close_poolclosedznot connected)r   r   r   r/   r   r+   rR   	DATABASESr;   aliashasattr
contextlibsuppressKeyErrorr   r   r   r{   )rJ   r   
is_preforkconnpool_enabledexcstr_excs          r#   r   z!DjangoWorkerFixup._close_database   s3   	5((..22D2IK
 %%'
 	D

#~~77;;DJJKOOPY[]^bbcijJ743N#,,X6 *)*	  	5((..224K	5* *(( %% c(7*g/MsG   &C" BD!DD!"-DDD	D!!E2E EEc                 d    	 | j                   j                          y # t        t        f$ r Y y w xY wr)   )r   close_cachesr/   r-   r\   s    r#   r   zDjangoWorkerFixup.close_cache   s.    	KK$$&>* 		s    //)r7   r   r'   N)r'   Nrv   )r   r   r'   N)r   r   r   r   rj   rK   r   rd   r>   r   r   r   r   r   r   rz   r   r   r   r!   r"   r#   r^   r^      s    LF
Gs t ,"V "s "t "
f   s t !T !.r"   r^   )r5   r   r'   N)DJANGO_SETTINGS_MODULE)0rw   r   r*   rN   r@   r   r   	importlibr   typingr   r   r   r	   r
   r   kombu.utils.importsr   kombu.utils.objectsr   celeryr   r   celery.exceptionsr   r   celery.workerr   typesr   r   django.db.backends.base.baser   django.db.utilsr   celery.app.baser   celery.app.taskr   r   __all__rB   r0   r6   r{   r%   r$   r^   r!   r"   r#   <module>r      s    $  	 
  ' # ? ? . / " @ ( @1&$' ' #  t P
x c -AX =; =;@t tr"   