
    h                     Z   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! 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)BaseDatabaseWrapper)ConnectionHandler)Celery)Taskc                       e Zd ZU eed<   y)DjangoDBModuleconnectionsN)__name__
__module____qualname__r   __annotations__     P/var/www/Befach/backend/env/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_versionr5   -   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.r4   r   N)r)   environget
loader_clslowerr4   r5   r#   installImportErrorwarningswarnr   ERR_NOT_INSTALLED)r6   r7   SETTINGS_MODULEr4   s       r"   r$   r$   2   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(   )r6   r   default_appset_default_worker_fixupselfr6   s     r"   __init__zDjangoFixup.__init__C   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nowr6   loader_custom_task_cls_usedtask_clsr   import_modulesconnecton_import_modulesworker_initon_worker_initrI   s    r"   r=   zDjangoFixup.installI   s     	299;''(>?"hhxx-- GDHH&&t'='=>##D$7$78r!   c                 f    | j                   t        | j                        | _         | j                   S r(   )rG   DjangoWorkerFixupr6   r[   s    r"   worker_fixupzDjangoFixup.worker_fixupY   s+    %!2488!<D!!!r!   Nc                     || _         y r(   )rG   )rI   values     r"   r^   zDjangoFixup.worker_fixup_   s
    "r!   kwargsc                 8    | j                   j                          y r(   )r^   validate_modelsrI   ra   s     r"   rX   zDjangoFixup.on_import_modulesc   s    ))+r!   c                 8    | j                   j                          y r(   )r^   r=   rd   s     r"   rZ   zDjangoFixup.on_worker_initg   s    !!#r!   utcc                 l    |r#t        j                  t        j                        S | j	                         S r(   )r   rR   r   rf   _now)rI   rf   s     r"   rR   zDjangoFixup.nowj   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.appsrj   get_app_configsname)rI   rj   configs      r"   autodiscover_taskszDjangoFixup.autodiscover_tasksm   s&    $*.*>*>*@AAAAs   /c                     t        d      S )Nzdjango.utils.timezone:nowr   r[   s    r"   rh   zDjangoFixup._nowq   s    9::r!   )r6   r   )r&   r#   r&   r]   )r`   r]   r&   NF)r   r   r   __doc__rJ   r=   propertyr^   setterr   rX   rZ   boolr   rR   r	   strro   r   rh   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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.cacherL   zdjango.db.utils.InterfaceErrorzdjango.db:DatabaseError)r6   confr:   db_reuse_maxr   r   _db_cacher   rQ   interface_errorsDatabaseErrorrH   s     r"   rJ   zDjangoWorkerFixup.__init__y   sz     HHMM--.CTJ(-*DE#$78'(>? ;<!
 ,,EFr!   c                 ,    dd l }|j                          y )Nr   )r4   setup)rI   r4   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)   r9   r:   )rI   r   s     r"   rc   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_initrW   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!   ra   c                 :   t         j                  j                  d      r| j                          | j                  j
                  j                         D ]#  }|s|j                  s| j                  |       % | j                  d       | j                          y )NFORKED_BY_MULTIPROCESSINGT)force)r)   r9   r:   rc   r}   r   all
connection_maybe_close_db_fd_close_databaser   )rI   ra   cs      r"   r   z(DjangoWorkerFixup.on_worker_process_init   sv     ::>>56  " %%))+AQ\\''* ,
 	4(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_errorsr/   r   r   )rI   r   s     r"   r   z$DjangoWorkerFixup._maybe_close_db_fd   sH    	'' .-. . .$$ 		s#   9 -9 69 9 A
Asenderr   c                 T    t        |j                  dd      s| j                          yy)zCalled before every task.is_eagerFN)getattrrequestr   rI   r   ra   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   r1   )r|   r   _db_recyclesrd   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   rw   )rI   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,   r[   s    r"   r   zDjangoWorkerFixup.close_cache   s.    	KK$$&>* 		s    //)r6   r   r&   N)r&   Nrq   )r   r   r&   Nrr   )r   r   r   r   rJ   r   rc   r=   r   r   r   r   r   r   rv   r   r   r    r!   r"   r]   r]   v   s    L
Gs t ,"V "s "t "
f   s t T d r!   r]   )r4   r   r&   N)DJANGO_SETTINGS_MODULE)-rs   r)   rM   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.backends.base.baser   django.db.utilsr   celery.app.baser   celery.app.taskr   r   __all__rA   r/   r5   rw   r$   r#   r]   r    r!   r"   <module>r      s    $ 	 
  ' # ? ? . / " @ @1&$' ' #  t P
x c -AX 3; 3;ld dr!   